1
我正在嘗試將我的固定管線代碼(OpenGL ES 1.1)轉換爲使用着色器管線(OpenGL ES 2.0)的代碼。但是隻有一個紋理似乎工作,我得到的錯誤:GLSL紋理多個片段
Validation Failed: Sampler error:
Samplers of different types use the same texture image unit.
- or -
A sampler's texture unit is out of range (greater than max allowed or negative).
在我的片段着色器我有一個質地均勻的ID和紋理座標從我的頂點着色器未來通過:
varying lowp vec4 colorVarying;
varying lowp vec2 texCoordsVarying;
uniform sampler2D texID;
void main()
{
lowp vec4 colour = texture2D(texID, texCoordsVarying);
gl_FragColor = colour * colorVarying;
}
正如我瞭解它,因爲我只使用一個紋理,我只需要一個活動紋理單元。因此,在我的管道中,我通過激活適當的紋理單元來設置紋理,綁定當前紋理並將紋理ID的統一值設置爲紋理單元。然後我繼續繪製頂點。
這裏是我的管道的紋理部分:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ((MNTexturedRect*)object).texID);
glUniform1i(uniforms[UNIFORM_TEXTURE], GL_TEXTURE0);
glVertexAttribPointer(ATTRIB_TEXTURE_COORDS, 2, GL_FLOAT, GL_FALSE, object.dataPerPoint*sizeof(GLfloat), &points[((MNTexturedRect*)object).texCoordOffset]);
glEnableVertexAttribArray(ATTRIB_TEXTURE_COORDS);
我有一個想法,其實質地的ID一致導致了該問題,但不知道如何解決它。我有幾個對象,它似乎只有加載的第一個紋理似乎工作。我只對採樣器有所瞭解,不太確定爲什麼它會抱怨使用相同的紋理單元,並且我的紋理單元處於範圍內,因爲它只是GL_TEXTURE0。
任何有關爲何發生這種情況的任何想法?
這種固定的錯誤,只有一個紋理會顯示的原因是,我的其他紋理有α和我沒有啓用混合,所以他們顯示爲白色矩形。 – 2010-11-03 11:48:44