结合glVertexPointer和glVertexAttribPointer会出现问题

4
当我首次使用程序渲染一个顶点缓冲区,然后再不使用程序渲染另一个顶点缓冲区时,出现了问题。
对于第一个缓冲区,在启用程序时,我使用类似以下的代码:
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块所做的某些状态更改,但我不明白哪个状态更改导致问题。
顺便说一下,我之所以要用程序渲染和不用程序渲染是因为在我使用的场景图库中,您可以按节点打开或关闭程序。
1个回答

2

尝试添加

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接