У меня проблема при первом рендеринге вершинного буфера с программой, а затем при рендеринге другого вершинного буфера без программы.
для первого буфера, когда программа включена, я использую код, подобный:
glBindBuffer( GL_ARRAY_BUFFER, m_id );
GLint location = glGetAttribLocation( pID, "position" );
glEnableVertexAttribArray( location );
glVertexAttribPointer( location, 3, GL_FLOAT, GL_FALSE, 3 * sizeof( GLfloat ), 0 );
glDrawArrays( m_mode, 0, m_numVertices );
для второго, без программы:
glBindBuffer( GL_ARRAY_BUFFER, m_id );
glEnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( 3, GL_FLOAT, 3 * sizeof( GLfloat ), 0 );
glDrawArrays( m_mode, 0, m_numVertices );
оба кодовых путиработает нормально по отдельности, но при выполнении в порядке «с программой» -> «без программы» второй, похоже, использует буфер первого, а в порядке «без программы» -> «с программой» первыйне рисуется (во второй итерации).
теперь это наводит меня на мысль, что мне не хватает некоторых изменений состояния, выполненных блоком glEnableVertexAttribArray, но я не понимаю, какое изменение состояния вызывает проблемы.
ps причина, по которой я выполняю рендеринг с программой и без программы, состоит в том, что в lib im сцены можно использовать программы для включения или выключения для каждого узла.