使用glEndList()的OpenGL错误1282

时间:2011-07-25 13:23:43

标签: c++ opengl

我有一个小段,生成一个如下所示的显示列表:

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)。

说实话,看不出它有什么问题。

1 个答案:

答案 0 :(得分:5)

您需要将转换矩阵操作移出glBegin / glEnd对。这就是documentation所说的:

  

glBegin和glEnd之间只能使用GL命令的子集。   命令是glVertex,glColor,glIndex,glNormal,glTexCoord,   glEvalCoord,glEvalPoint,glArrayElement,glMaterial和glEdgeFlag。   此外,可以使用glCallList或glCallLists来执行   显示仅包含上述命令的列表。如果有的话   GL命令在glBegin和glEnd之间执行,错误标志是   设置,命令被忽略。

在错误部分:

  

如果glVertex以外的命令生成GL_INVALID_OPERATION,   glColor,glIndex,glNormal,glTexCoord,glEvalCoord,glEvalPoint,   glArrayElement,glMaterial,glEdgeFlag,glCallList或glCallLists是   在执行glBegin和相应的执行之间执行   执行glEnd。