OpenGL ES 2.0 - 具有多个纹理的片段着色器

时间:2014-05-03 19:00:53

标签: ios opengl-es textures fragment-shader

我正在设置两个纹理:

GLKTextureInfo  *texture = [GLKTextureLoader ...
glActiveTexture(GL_TEXTURE0);
glUniform1i(glGetUniformLocation(self.program, "uTextureMask"), 0);
glBindTexture(GL_TEXTURE_2D, texture.name);

texture = [GLKTextureLoader ...
glActiveTexture(GL_TEXTURE1);
glUniform1i(glGetUniformLocation(self.program, "uTextureLabel"), 1);
glBindTexture(GL_TEXTURE_2D, texture.name);

在片段着色器中引用:

uniform sampler2D uTextureMask;
uniform sampler2D uTextureLabel;

问题是着色器中只有我绑定的最后一个纹理。 在上面的示例中,只有uTextureLabel可以正常工作。

有什么想法吗?

谢谢, DAN

更新

glGetUniformLocation为uTextureMask返回13,为uTextureLabel返回14。

在着色器中我做了:

highp vec4 label = texture2D(uTextureLabel, vTexel);
highp vec4 mask = texture2D(uTextureMask, vTexel);

highp vec3 surface;

surface = label.rgb;
// surface = mask.rgb; // <--- DOESN'T WORK    

gl_FragColor = vec4(surface, 1.0);

1 个答案:

答案 0 :(得分:0)

在IOS上GLKTextureLoader不仅加载PNG. It's also create texture name by glGenTexture`,绑定它并在GPU上加载数据,还为GL_WRAP_MODE和MIN / MAG算法设置默认参数。

在您的代码中,我看到您致电

glActiveTexture(GL_TEXTURE0)
glBindTexture(MaskTexture)
glBindTexture(LabelTature) // this call made GLKTextureLoader
glActiveTexture(GL_TEXTURE1)
glBindTexture(LabelTexture)

结果您将LabelTexture绑定到GL_TEXTURE0GL_TEXTURE1纹理块。