我有一个小段,它生成一个显示列表,看起来像这样:
glNewList ( CDisplayList :: GetBaseList () + 2, GL_COMPILE );
{
glBegin ( GL_QUADS );
glPushMatrix ();
//
// Move to slightly lower position.
//
glTranslatef ( 0.0f, -1.1f, 0.0f );
glColor4f ( 1.0f, 1.0f, 1.0f, 1.0f );
//
// Front facing.
//
glTexCoord2f ( m_TexLeft, m_TexBottom ); glVertex3f ( m_Start, -0.1f, 0.0f );
glTexCoord2f ( m_TexRight, m_TexBottom ); glVertex3f ( m_End, -0.1f, 0.0f );
glTexCoord2f ( m_TexRight, m_TexTop ); glVertex3f ( m_End, -1.3f, 0.0f );
glTexCoord2f ( m_TexLeft, m_TexTop ); glVertex3f ( m_Start, -1.3f, 0.0f );
//
// Back facing.
//
glTexCoord2f ( m_TexLeft, m_TexTop ); glVertex3f ( m_Start, -1.3f, 0.0f );
glTexCoord2f ( m_TexRight, m_TexTop ); glVertex3f ( m_End, -1.3f, 0.0f );
glTexCoord2f ( m_TexRight, m_TexBottom ); glVertex3f ( m_End, -0.1f, 0.0f );
glTexCoord2f ( m_TexLeft, m_TexBottom ); glVertex3f ( m_Start, -0.1f, 0.0f );
glPopMatrix ();
glEnd ();
}
glEndList ();
GLenum e = glGetError();
这里末尾的"e"值总是1282(无效操作或类似的东西)。我不知道为什么。我检查了glGetError之后的每一个命令构建列表,从glNewList向下,它总是相同的(零)。此显示列表是之前构建的3 - 2个列表中的一个(使用glGetError进行测试并返回零)。因此,这个列表的某些内容特别让司机头疼。
任何想法?
注意m_TexLeft等是0,0,1,0.125(左,上,右,下)和m_Start, m_End是0,100。GetBaseList返回一个通过调用glGenLists(3)得到的整数(确切的值是257)。
老实说,我看不出有什么问题。
您需要将转换矩阵操作移出glBegin/glEnd对。文档是这样说的:
只有一部分GL命令可以在glBegin和glEnd之间使用。这些命令是glVertex, glColor, gllindex, glNormal, glTexCoord,glEvalCoord, glEvalPoint, glrayelement, glMaterial,和glEdgeFlag。同样,使用glCallList或glCallLists来执行也是可以接受的显示仅包含上述命令的列表。如有其他在glBegin和glEnd之间执行GL命令时,错误标志为
在Errors部分下:
GL_INVALID_OPERATION:glColor, gllindex, glNormal, glTexCoord, glEvalCoord, glEvalPoint,glrayelement, glMaterial, glEdgeFlag, glCallList,或glCallLists是在执行glBegin和对应的执行glEnd。