Is glDisableClientState required?
Posted
by
Shawn
on Stack Overflow
See other posts from Stack Overflow
or by Shawn
Published on 2012-10-07T21:27:30Z
Indexed on
2012/10/07
21:37 UTC
Read the original article
Hit count: 209
opengl
Every example I've come across for rendering array data is similar to the following code, in which in your drawing loop you first call glEnableClientState for what you will be using and when you are done you call glDisableClientState:
void drawScene(void) {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, texturePointerA);
glTexCoordPointer(2, GL_FLOAT, 0,textureCoordA);
glVertexPointer(3, GL_FLOAT, 0, verticesA);
glDrawElements(GL_QUADS, numPointsDrawnA, GL_UNSIGNED_BYTE, drawIndicesA);
glBindTexture(GL_TEXTURE_2D, texturePointerB);
glTexCoordPointer(2, GL_FLOAT, 0,textureCoordB);
glVertexPointer(3, GL_FLOAT, 0, verticesB);
glDrawElements(GL_QUADS, numPointsDrawnB, GL_UNSIGNED_BYTE, drawIndicesB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
}
In my program I am always using texture coordinates and vertex arrays, so I thought it was pointless to keep enabling and disabling them every frame. I moved the glEnableClientState outside of the loop like so:
bool initGL(void) {
//...
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
void drawScene(void) {
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texturePointerA);
glTexCoordPointer(2, GL_FLOAT, 0,textureCoordA);
glVertexPointer(3, GL_FLOAT, 0, verticesA);
glDrawElements(GL_QUADS, numPointsDrawnA, GL_UNSIGNED_BYTE, drawIndicesA);
glBindTexture(GL_TEXTURE_2D, texturePointerB);
glTexCoordPointer(2, GL_FLOAT, 0,textureCoordB);
glVertexPointer(3, GL_FLOAT, 0, verticesB);
glDrawElements(GL_QUADS, numPointsDrawnB, GL_UNSIGNED_BYTE, drawIndicesB);
}
It seems to work fine. My question is:
Do I need to call glDisableClientState somewhere; perhaps when the program is closed?.
Also, is it ok to do it like this? Is there something I'm missing since everyone else enables and disables each frame?
© Stack Overflow or respective owner