| | |
OpenGL Wrong Texture Same Shader, Same Mesh
![]() |
I have a really wierd problem using OpenGL. I've verified all my code passes the correct mesh, correct texture, to the correct shader.
When I use the same texture with multiple instances of the same mesh and the same shader located at different locations on the screen it shows up properly. When using other shaders and other meshes and other textures the scene appears correct.
However when I use same mesh, same shader, but bind alternate textures for rendering my textures get shuffled. There is an object at the position it is suppose to be, but the texture displayed at that location is different. It appears to be mis-binded exactly the same way.
My guess I'm missing something to tell the render to wait before processing the next instance and somehow the texture binding gets affected!
When I use the same texture with multiple instances of the same mesh and the same shader located at different locations on the screen it shows up properly. When using other shaders and other meshes and other textures the scene appears correct.
However when I use same mesh, same shader, but bind alternate textures for rendering my textures get shuffled. There is an object at the position it is suppose to be, but the texture displayed at that location is different. It appears to be mis-binded exactly the same way.
My guess I'm missing something to tell the render to wait before processing the next instance and somehow the texture binding gets affected!
// Note: I've trimmed the code but
// nSrcBlend = GL_ONE and nDstBlend = GL_ZERO
void DrawStageMesh( iMESH eMesh, iTEXTURE eTexture, uint nSrcBlend, uint nDstBlend )
{
MeshObject *pObj;
GLuint iTex;
pObj = &pStageMesh[ eMesh ];
if (pObj->nCount)
{
glEnable( GL_TEXTURE_2D );
iTex = GetPixMap( eTexture )->getName();
// I've verified that iTex is the correct texture name!!!
glBindTexture(GL_TEXTURE_2D, iTex);
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
if (pObj->pNormAry)
{
glEnableClientState( GL_NORMAL_ARRAY );
glNormalPointer( GL_FLOAT, 0, pObj->pNormAry );
}
glVertexPointer( 3, GL_FLOAT, 0, pObj->pVertAry );
glTexCoordPointer( 2, GL_FLOAT, 0, pObj->pUVAry );
glDrawArrays( GL_TRIANGLES, 0, pObj->nCount * 3 );
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );
if (pObj->pNormAry)
{
glDisableClientState( GL_NORMAL_ARRAY );
}
// I've tried the followng but didn't help!
// glBindTexture(GL_TEXTURE_2D, 0);
glDisable( GL_TEXTURE_2D );
}
}
// the following code snippet is included within other code and
// called for each instance of the object. The Shader constants
// are set with the object matrix, position and world matrix for the
// shader to use!
cgGLBindProgram( OdometerCgVertexProgram);
// Shader constants are setup then the following is called!
cgGLEnableProfile( TheCgVertexProfile );
DrawStageMesh( iMESH_CYLINDER01, eTex, GL_ONE, GL_ZERO );
cgGLDisableProfile( TheCgVertexProfile ); Upon further research I've found it is definitely a persistent binding problem. If I assign a second copy of the same shader and bind the alternate texture to it, there is no problem. So there appears to be a problem when the texture bind function being called a second time for a different texture. Anybody know how to get around this problem.
My work around fixed two objects where I used two different textures each, but I have a third object that has 75 selectable textures, and I'm not keen about creating 75 identical shaders even if in a loop!
My work around fixed two objects where I used two different textures each, but I have a third object that has 75 selectable textures, and I'm not keen about creating 75 identical shaders even if in a loop!
![]() |
Similar Threads
- DirectX in Visual C++: Help moving a mesh starting from BasicHLSL Tutorial (C++)
- help in needed in graphics (C++)
- please help with texture mapping on OpenGl. (Game Development)
- Popping up Windows and Child Windows (C++)
- Texture mapping for sphere! (Game Development)
- links to other pages (Site Layout and Usability)
- Need advice using openGl with win XP (C++)
Other Threads in the Game Development Forum
- Previous Thread: Python Universe Builder
- Next Thread: Text based browser game
| Thread Tools | Search this Thread |
3d advertising ai algorithm ban c++ cambridge camera censorship china competition console development engine fov fpx game gamer games gaming gauntanamo government idaho in-gameadvertisement intellectualproperty laracroft live manhunt math mathematics matrix mercenaries microsoft mmorpg modded msn naked news nintendo obama palin physics pirate playstation politics projection ps3 rpg search software sony stephenhawking stocks studio technology terrorism tombraider uk videogame web wii world-of-warcraft xbox xbox-live xbox360






