2017-01-15 2 views
0

Я хочу создать несколько вершинных буферов в объектах (один за объектом). конструктор:Opengl VAO и объекты VBO

VertexBuffer::VertexBuffer(const GLvoid *data, 
          GLsizeiptr size, 
          GLenum mode, 
          GLsizei count, 
          GLsizei stride, 
          ShaderInterface *shaderInterface, 
          GLvoid *positionOffset, 
          GLvoid *normalOffset) 
    : _mode(mode), 
    _count(count), 
    _stride(stride), 
    _shaderInterface(shaderInterface), 
    _positionOffset(positionOffset), 
    _normalOffset(normalOffset) 

{ 
    glGenBuffers(1, &_vertexBufferID); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID); 
    glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW); 

    // 
    GLuint vao = 0; 
    glGenVertexArrays(1, &vao); 
    glBindVertexArray(vao); 
    glEnableVertexAttribArray(0); //?????? 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID); 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); 
    // 
} 

Если я создаю 1 объект VertexBuffer, это работает нормально. Но если я создам другой объект (я его не буду использовать), и я снова рисую первый объект, результат неверен (например, показанный объект находится в другом месте). Зачем?

+0

Вы также должны показать свой код чертежа. – ybungalobill

ответ

0

Вы, кажется, не храните vao в любом месте, но вам нужно. Перед тем, как нарисовать каждый объект, вы должны glBindVertexArray его vao (но не _vertexBufferID) перед тем, как позвонить любому из glDraw*.

См. Также this answer, чтобы увидеть, что такое состояние VAOs.

Смежные вопросы