Hey guys. Im trying to render two methods shown below. RenderA() is using VBOs and RenderB() isnt. Im getting an EXC_BAD_ACCESS error when it reaches glDrawArrays() in RenderB().
RenderB() works fine though if i dont create and use any VBOs, ie when i comment out CreateVBOs() and RenderA().
- So does this mean once you start using VBOs, all renderings must use VBOs?
- Or what am I doing wrong here?
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);