带有 glEndList() 的 OpenGL 错误 1282

Posted

技术标签:

【中文标题】带有 glEndList() 的 OpenGL 错误 1282【英文标题】:OpenGL error 1282 with glEndList() 【发布时间】:2011-07-25 13:23:43 【问题描述】:

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

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】:

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

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

在错误部分下:

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

【讨论】:

啊,是的。我什至不确定他们在那里做什么。我最初是在 8 年前写的 - 但是多年来驱动程序的改进意味着如果我执行这个列表,这个代码现在会失败而不是继续下去。现在可以编译了,谢谢。

以上是关于带有 glEndList() 的 OpenGL 错误 1282的主要内容,如果未能解决你的问题,请参考以下文章

设置和获取光标位置?带有 OpenGL 的 JAVA

带有 OpenCV 和 OpenGL 的 AR

带有opengl的GDI +可能吗?

使用带有移动对象的 OpenGL 实例化绘图

带有 QT 错误的 OpenGL:断言:“QOpenGLFunctions::isInitialized(d_ptr)”。无法创建 OpenGL 上下文

带有 Qt 和 OpenGL 的轨迹球控件