opengl – 结合glVertexPointer和glVertexAttribPointer会产生问题

首次使用程序渲染顶点缓冲区时遇到问题,

然后在没有程序的情况下渲染不同的顶点缓冲区.

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

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

最佳答案 尝试添加

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

在切换到固定功能渲染之前.

点赞