943,719 Members | Top Members by Rank

Ad:
Jun 22nd, 2009
0

OpenGL Wrong Texture Same Shader, Same Mesh

Expand Post »
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!

// 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 );
Similar Threads
Reputation Points: 546
Solved Threads: 99
Practically a Posting Shark
wildgoose is offline Offline
891 posts
since Jun 2009
Jun 23rd, 2009
0

Re: OpenGL Wrong Texture Same Shader, Same Mesh

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!
Reputation Points: 546
Solved Threads: 99
Practically a Posting Shark
wildgoose is offline Offline
891 posts
since Jun 2009
Jun 23rd, 2009
0

Re: OpenGL Wrong Texture Same Shader, Same Mesh

What happens when you use the same mesh, different textures and no shader?

What you're doing looks right to me, assuming that all of your variables and functions are 'correct' with respect to what it is you're doing.
Moderator
Featured Poster
Reputation Points: 522
Solved Threads: 64
Veteran Poster
MattEvans is offline Offline
1,091 posts
since Jul 2006
Jun 26th, 2009
0

Re: OpenGL Wrong Texture Same Shader, Same Mesh

Exactly the same thing. The textures get shuffled!
Reputation Points: 546
Solved Threads: 99
Practically a Posting Shark
wildgoose is offline Offline
891 posts
since Jun 2009

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Game Development Forum Timeline: Python Universe Builder
Next Thread in Game Development Forum Timeline: Dark GDK





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC