RenderB()工作正常,但如果我不创建和使用任何VBO,即当我注释掉CreateVBOs()和RenderA()时。
Render() { CreateVBOs(); //glGenBuffers,glBindBuffer,glBufferData etc RenderA(); RenderB(); } RenderA(){ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo->indexBuffer); glBindBuffer(GL_ARRAY_BUFFER, vbo->vertexBuffer); glVertexPointer(3, GL_FLOAT, sizeof(Vertex), 0); glColorPointer(4, GL_FLOAT, sizeof(Vertex), colorOffset); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glDrawElements(GL_TRIANGLES,vbo->indexCount, GL_UNSIGNED_SHORT, bodyOffset); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); } RenderB(){ static GLfloat vertices[] = {1.0,1.0,1.0,2.0,1.0,1.0}; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertices); glDrawArrays(GL_POINTS, 0, 2); glDisableClientState(GL_VERTEX_ARRAY); }
想出来。显然你必须确保解除缓冲区的绑定,如果它之前是绑定的,以便在没有vbo的情况下进行渲染。
我的CreateVBOs()函数绑定但没有取消绑定缓冲区,以便在RenderB()尝试使用glDrawArrays时创建错误访问。取消绑定缓冲区只是将它绑定到0,如下所示:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
答案 0 :(得分:9)
在进行非VBO绘制调用之前,尝试将GL_ELEMENT_ARRAY_BUFFER和GL_ARRAY_BUFFER绑定为零。
将以下代码行添加到VBO绘制调用(RenderA)的末尾:
glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);