在您获得的股票 OpenGL ES 应用程序中(当您在 XCode 中创建新的“OpenGL 游戏”时),在setupGL
函数中,有:
glEnable(GL_DEPTH_TEST);
//glGenVertexArraysOES( 1, &_vertexArray ) ; // va's are not being used!
//glBindVertexArrayOES( _vertexArray ) ; // we comment these out
// to no ill effect -- are these calls extraneous?
glGenBuffers( 1, &_vertexBuffer ) ;
glBindBuffer( GL_ARRAY_BUFFER, _vertexBuffer ) ;
glBufferData( GL_ARRAY_BUFFER, sizeof(gCubeVertexData), gCubeVertexData, GL_STATIC_DRAW ) ;
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(12));
//glBindVertexArrayOES(0);
但是,似乎没有使用顶点数组(据我所知,顶点数组保留在客户端内存中,而顶点缓冲区则停在 OpenGL 服务器内存中)。
如果您注释掉这些glBindVertexArrayOES
命令,代码似乎完全一样。
glBindVertexArrayOES
此 xCode 示例中的调用是否无关紧要?