每个例子中,我遇到渲染阵列数据类似于下面的代码,其中,在绘图循环中,您第一次呼叫glEnableClientState你会使用什么,当你完成你打电话glDisableClientState:是否需要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);
}
在我的程序中,我总是使用纹理坐标和顶点数组,所以我认为每帧保持启用和禁用它们是毫无意义的。我把glEnableClientState移到循环的外部,如下所示:
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);
}
它似乎工作正常。我的问题是:
我是否需要在某处调用glDisableClientState;也许当程序关闭时?
此外,可以这样做吗?有没有什么我失踪,因为其他人启用和禁用每帧?