Dear all, I’m a beginer to OpenGL, this problem confused me for a whole afternoon.
Problem is that, all objects with various textures are drawn with only one texture, even if I call glBindTexture to bind different textures to different objects each frame, it seems like only one glBindTexture call works. This is code of unwrapped draw call:
m_pProgram->Use(); SetUpMatrix(); // This is the diffuse texture // m_pMat->GetTexDif() return different texture names with different objects glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_pMat->GetTexDif()); glUniform1i(LOCATION_TEX_DIFF, 0); // This is the normal texture glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, m_pMat->GetTexNormal()); glUniform1i(LOCATION_TEX_NORM, 1); glBindVertexArray(m_uVAO); glDrawElements(GL_TRIANGLES, m_uFaceNum * 3, GL_UNSIGNED_INT, (void*)0); // query current binding texture, result is different among different draw calls // but the shader still get same one, so strange. int currentTex; glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤tTex); printf("current binding texture: %d ", currentTex);
The shader does get both diffuse texture and normal texture, however, all objects get same ones.
Can anyone find how does this error happen? Appreciate.
By the way, I’m using Win7 64bit, Nvidia Geforce GTX560, OpenGL/GLSL 4.3 with newest driver, GLEW 1.9.0 and GLFW 2.7.6