OpenGL error 1282 with glEndList()

OpenGL error 1282 with glEndList()

本文关键字:glEndList with error 1282 OpenGL      更新时间:2023-10-16

我有一个小段,它生成一个显示列表,看起来像这样:

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。