在股票OpenGL ES应用程序中(当您在XCode中创build一个新的“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, […]
我创build了两个不同的顶点缓冲区, 使用两个不同的着色器来渲染它们 。 只要我绑定第二个顶点缓冲区,我停在第一个顶点缓冲区的数据似乎已经损坏或丢失。 如果我只生成和绘制一个顶点缓冲区,像这样: glGenBuffers( 1, &vb1 ) ; glBindBuffer( GL_ARRAY_BUFFER, vb1 ) ; // fill it.. glBufferData( .. ) 然后,在draw()循环中, glUseProgram( shader1 ) ; glBindBuffer( vb1 ) ; // make sure it is bound glDrawArrays( … ) // draw it 然后它工作正常,没有问题,没有错误(我每 gl *调用glGettingLastError(),所以看来这个代码是完全没问题) 现在,如果我生成并绑定了第二个顶点缓冲区,那么在第一个顶点缓冲区生成并绑定之后的任何时候, // ran in init() — then previously working code […]