Привет, ребята.Я пытаюсь сделать два метода, показанные ниже.RenderA () использует VBO, а RenderB () - нет.Я получаю ошибку EXC_BAD_ACCESS, когда она достигает glDrawArrays () в RenderB ().
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);
}
Правка (решено)
Разобрался.По-видимому, вы должны убедиться, что вы открепили буфер, если он был связан ранее, чтобы выполнить рендеринг без vbo.
Моя функция CreateVBOs () была связана, но не открепила буфер, так что это создало плохой доступ при RenderB ()пытался использовать glDrawArrays.Отмена привязки буфера это просто привязка его к 0 следующим образом:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);