2017-01-15 7 views
0

オブジェクトに複数の頂点バッファを作成したい(オブジェクトごとに1つ)。コンストラクタは次のとおりです。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はどこにも保存されていないようですが、そうする必要があります。各オブジェクトを描画する前に、glDraw*のいずれかを呼び出す前に、のvao(ただし、_vertexBufferIDは含まない)にします。

this answerも参照して、VAOの状態を確認してください。

関連する問題