PDA

View Full Version : Problem with texture binding while drawing multiple objects



ctownboy
02-03-2013, 06:59 AM
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, &currentTex);
printf("current binding texture: %d\n", 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

ctownboy
02-04-2013, 12:11 AM
Solved, nothing wrong with glBindTexture, I used nvidia nsight check the texture passed into the shader, I found textures are all correct, however, the mesh is so wrong that it contains all objects' mesh before it, due to a stupid bug. Thanks to Nsight, amazing tools!

thokra
02-04-2013, 01:06 AM
Did you use 3.0? Is the GL frame debugging stuff any good? Last I checked, the only thing worth analyzing was the timeline.