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);
}
编辑(已解决)
弄清楚了。显然,如果没有绑定缓冲区,则必须确保取消绑定缓冲区,以便在不使用vbo的情况下进行渲染。
我的CreateVBOs()函数已绑定,但未取消绑定缓冲区,因此当RenderB()尝试使用glDrawArrays时,这造成了错误的访问。取消绑定缓冲区只是将其绑定到0,如下所示:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
没有找到相关结果
已邀请:
1 个回复
惭法搽