带有 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的主要内容,如果未能解决你的问题,请参考以下文章
带有 QT 错误的 OpenGL:断言:“QOpenGLFunctions::isInitialized(d_ptr)”。无法创建 OpenGL 上下文