我正在设置两个纹理:
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);
答案 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_TEXTURE0
和GL_TEXTURE1
纹理块。