Смешивание в OpenGles визуализации VBO и не VBO дает EXC_BAD_ACCESS - PullRequest
1 голос
/ 27 мая 2011

Привет, ребята.Я пытаюсь сделать два метода, показанные ниже.RenderA () использует VBO, а RenderB () - нет.Я получаю ошибку EXC_BAD_ACCESS, когда она достигает glDrawArrays () в RenderB ().

RenderB () работает нормально, хотя, если я не создаю и не использую какие-либо VBO, т.е. когда я закомментирую CreateVBOs () и RenderA ().

  1. Так значит ли это, когда вы начинаетеиспользуя VBO, все визуализации должны использовать VBO?
  2. Или что я здесь не так делаю?
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);

1 Ответ

9 голосов
/ 27 мая 2011

Попробуйте связать GL_ELEMENT_ARRAY_BUFFER и GL_ARRAY_BUFFER до нуля перед выполнением вызовов отрисовки не-VBO.

Добавьте следующие строки кода в конец вызовов отрисовки VBO (RenderA):

glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
...