Opengles将VBO和非VBO渲染混合在一起得到EXC_BAD_ACCESS

| 大家好。我试图渲染如下所示的两种方法。 RenderA()正在使用VBO,而RenderB()不是。我到达RenderB()中的glDrawArrays()时收到EXC_BAD_ACCESS错误。 尽管如果我不创建和使用任何VBO,即当我注释掉CreateVBOs()和RenderA()时,RenderB()也可以正常工作。 那么这是否意味着一旦开始使用VBO,所有渲染都必须使用VBO? 还是我在这里做错了什么? Render(){     CreateVBOs(); // glGenBuffers,glBindBuffer,glBufferData等     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(){     静态GLfloat顶点[] = {1.0,1.0,1.0,2.0,1.0,1.0};     glEnableClientState(GL_VERTEX_ARRAY);     glVertexPointer(3,GL_FLOAT,0,顶点);     glDrawArrays(GL_POINTS,0,2);     glDisableClientState(GL_VERTEX_ARRAY); } 编辑(已解决) 弄清楚了。显然,如果没有绑定缓冲区,则必须确保取消绑定缓冲区,以便在不使用vb​​o的情况下进行渲染。 我的CreateVBOs()函数已绑定,但未取消绑定缓冲区,因此当RenderB()尝试使用glDrawArrays时,这造成了错误的访问。取消绑定缓冲区只是将其绑定到0,如下所示:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
    
已邀请:
        在进行非VBO绘制调用之前,请尝试将GL_ELEMENT_ARRAY_BUFFER和GL_ARRAY_BUFFER绑定为零。 将以下代码行添加到VBO绘制调用(RenderA)的末尾:
glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
    

要回复问题请先登录注册