混合VBO和非VBO渲染的Opengles可以提供EXC
大家好。 我试图呈现下面显示的两种方法。 RenderA()使用VBOs和RenderB()isnt。 当它到达RenderB()中的glDrawArrays()时,我得到一个EXC_BAD_ACCESS错误。
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);
在进行非VBO绘制调用之前,尝试将GL_ELEMENT_ARRAY_BUFFER和GL_ARRAY_BUFFER绑定为零。
将以下代码行添加到VBO绘图调用(RenderA)的末尾:
glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
链接地址: http://www.djcxy.com/p/38483.html
