奇怪的GLSL/Opengl错误:多个采样器

奇怪的GLSL/Opengl错误:多个采样器,opengl,textures,glsl,Opengl,Textures,Glsl,我有一只很奇怪的虫子。我在GLSL片段着色器中使用多个纹理,但如果未设置纹理0,则无法读取纹理1 有效: glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texA); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, texB); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, 0);

我有一只很奇怪的虫子。我在GLSL片段着色器中使用多个纹理,但如果未设置纹理0,则无法读取纹理1

有效:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texA);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texB);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texB);
不起作用:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texA);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texB);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texB);
在第二个示例中,texB没有正确读取,但在第一个示例中是正确的。在绘制所有内容之前,我将其称为:

int samplerAID = mActiveShader->GetUniformID("TexSamplerA");
int samplerBID = mActiveShader->GetUniformID("TexSamplerB");
glUniform1i(samplerAID , 0);
glUniform1i(samplerBID , 1);

如果在片段着色器中删除对TexSamplerA的所有引用,则texB在示例#1

“如果未设置纹理0,则无法读取纹理1。”如果尝试,会发生什么?在调用
glUniform1i()
之前是否调用了
glUseProgram()
?如果没有,则需要将.texB显示为全黑色,是的,我调用GluseProgramm(在glUniform之前)来调用我的glsl着色器,因为着色器中的所有其他内容都存在相同的问题,我观察到在相同的配置中,texture1从单元0而不是单元1读取(我绑定到那里的所有内容都显示)。