我有一个正常运行的 OpenGL ES 3 程序 (iOS),但我很难理解 OpenGL 纹理。我正在尝试将几个四边形渲染到屏幕上,它们都具有不同的纹理。纹理都是带有独立调色板的 256 色图像。
这是将纹理发送到着色器的 C++ 代码
// THIS CODE WORKS, BUT I'M NOT SURE WHY
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, _renderQueue[idx]->TextureId);
glUniform1i(_glShaderTexture, 1); // what does the 1 mean here
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, _renderQueue[idx]->PaletteId);
glUniform1i(_glShaderPalette, 2); // what does the 2 mean here?
glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
这是片段着色器
uniform sampler2D texture; // New
uniform sampler2D palette; // A palette of 256 colors
varying highp vec2 texCoordOut;
void main()
{
highp vec4 palIndex = texture2D(texture, texCoordOut);
gl_FragColor = texture2D(palette, palIndex.xy);
}
正如我所说,代码有效,但我不确定它为什么有效。几个看似微小的变化打破了它。例如,在 C++ 代码中使用GL_TEXTURE0
, andGL_TEXTURE1
会破坏它。将数字更改glUniform1i
为 0,然后 1 打破它。我猜我不了解 OpenGL 3+ 中的纹理(也许是纹理单元???),但需要一些指导来弄清楚是什么。