结合glVertexPointer和glVertexAttribPointer会产生问题

时间:2011-11-27 14:31:31

标签: opengl

首次使用程序渲染顶点缓冲区时出现问题, 然后在没有程序的情况下渲染不同的顶点缓冲区。

对于第一个缓冲区,当启用程序时,我使用类似于:

的代码
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我使用和不使用程序进行渲染的原因是在使用的场景图库中,您可以在每个节点上打开或关闭程序。

1 个答案:

答案 0 :(得分:2)

尝试添加

glDisableVertexAttribArray( location ); // location of "position"

切换到固定功能渲染之前。