大家好。我正在尝试呈现如下所示的两种方法。 RenderA() 使用的是 VBO 而 RenderB() 不是。当它到达 RenderB() 中的 glDrawArrays() 时,我收到一个 EXC_BAD_ACCESS 错误。
RenderB() 工作正常,但如果我不创建和使用任何 VBO,即当我注释掉 CreateVBOs() 和 RenderA() 时。
- 那么这是否意味着一旦您开始使用 VBO,所有渲染都必须使用 VBO?
- 或者我在这里做错了什么?
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); }
Edit(Solved)
Figured it out. Apparently you have to make sure you unbind the buffer if it was binded before in order to render without vbo.
My CreateVBOs() function binded but did not unbind the buffer so thats what created bad access when RenderB() was trying to use glDrawArrays. Unbinding the buffer is just binding it to 0 like so:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
最佳答案
在执行非 VBO 绘制调用之前尝试将 GL_ELEMENT_ARRAY_BUFFER 和 GL_ARRAY_BUFFER 绑定(bind)为零。
将以下代码行添加到 VBO 绘制调用 (RenderA) 的末尾:
glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
关于c++ - 混合 VBO 和非 VBO 渲染的 Opengles 给出 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153704/