Skip to main content
gamedev.net
🔒 Locked

glClientActiveTextureARB issues....

Started by RuilMalvar 5 replies 3.4k views
Original Post
RuilMalvar
RuilMalvar
I am currently utilizing ARB shaders and to specify texture coordinates for each texture unit. I use glClientActiveTextureARB( GL_TEXTURE_ARB )

glClientActiveTextureARB(GL_TEXTURE0_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, m_pTexCoords);
glBindTexture(GL_TEXTURE_2D, m_iTex0);

glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, m_pTexCoords);
glBindTexture(GL_TEXTURE_2D, m_iTex1);


So the problem that is happening is that the last texture unit that I’m binding to is set to the primary GL_TEXTURE0 texture unit. Any ideas on why this is happening?
noisecrime
noisecrime
Think you've forgotten to use

glActiveTextureARB(GL_TEXTURE0_ARB);
and
glActiveTextureARB(GL_TEXTURE1_ARB);

These set the active texture unit for binding textures to, whilst glClientActiveTextureARB sets the active texture unit for vertex array states (e.g vertices, normals, texture coordinates etc)

RuilMalvar
RuilMalvar
When I do that,

It will work, though everything in my scene that is textured is textured black except for the object rendered after the above code. Though the only thing different from this object from the rest of the scene is that it's the only thing which has a shader applied to it.

so...
glEnable(GL_VERTEX_PROGRAM_ARB);glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0);glEnable(GL_FRAGMENT_PROGRAM_ARB);glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 1);glActiveTexture(GL_TEXTURE0_ARB);glClientActiveTextureARB(GL_TEXTURE0_ARB);glEnableClientState(GL_TEXTURE_COORD_ARRAY);glTexCoordPointer(2, GL_FLOAT, 0, m_pTexCoords);glBindTexture(GL_TEXTURE_2D, m_iTex0);glActiveTexture(GL_TEXTURE1_ARB);glClientActiveTextureARB(GL_TEXTURE1_ARB);glEnableClientState(GL_TEXTURE_COORD_ARRAY);glTexCoordPointer(2, GL_FLOAT, 0, m_pTexCoords);glBindTexture(GL_TEXTURE_2D, m_iTex1);glVertexPointer(3, GL_FLOAT, 0, m_pVertices);glNormalPointer(GL_FLOAT, 0, m_pNormals);glDrawElements(GL_TRIANGLES, m_iNumOfFaces * 3, GL_UNSIGNED_INT, m_pFaceIndices);glDisable(GL_VERTEX_PROGRAM_ARB);glDisable(GL_FRAGMENT_PROGRAM_ARB);


This is the flow of rendering my object, but for only this object. What gives?

[Edited by - RuilMalvar on March 20, 2005 1:09:45 AM]
noisecrime
noisecrime
you use
glActiveTexture(GL_TEXTURE1_ARB);

twice in that code. The first time it should be
glActiveTexture(GL_TEXTURE0_ARB);
RuilMalvar
RuilMalvar
sorry, it was a typo, the texture units 0 and 1 are being set accordingly.
CRACK123
CRACK123
You need to disable the multitexturing after you are done with it

glClientActiveTexture(GL_TEXTURE0_ARB);glActiveTexture(GL_TEXTURE0_ARB);glEnable(GL_TEXTURE_2D);glClientActiveTexture(GL_TEXTURE1_ARB);glActiveTexture(GL_TEXTURE0_ARB);glEnable(GL_TEXTURE_2D);.........glClientActiveTexture(GL_TEXTURE0_ARB);glActiveTexture(GL_TEXTURE0_ARB);glDisable(GL_TEXTURE_2D);glClientActiveTexture(GL_TEXTURE1_ARB);glActiveTexture(GL_TEXTURE0_ARB);glDisable(GL_TEXTURE_2D);


The more applications I write, more I find out how less I know
RuilMalvar
RuilMalvar
That was it, Thank you very much.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.