首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >glPopAttrib和GL_INVALID_OPERATION

glPopAttrib和GL_INVALID_OPERATION
EN

Stack Overflow用户
提问于 2011-12-14 21:03:49
回答 2查看 1.1K关注 0票数 10

我正在开发一些图形应用程序,在glPopAttrib()之后我得到了一个GL_INVALID_OPERATION。预测答案“似乎你在glBegin/glEnd块中调用了glPopAttrib()”,请参阅我用GLIntercept写的日志。

代码语言:javascript
复制
/* tons of wglGetProcAddress* */
wglGetProcAddress("glEndOcclusionQueryNV")=087C9B10 
wglGetProcAddress("glBeginTransformFeedbackN...")=087C9ED0 
wglGetProcAddress("glEndTransformFeedbackNV")=087C9F00 
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib() glGetError() = GL_INVALID_OPERATION # <---- THIS
glPopAttrib()
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPushAttrib(GL_POINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib()
glPopAttrib()
glPushAttrib(GL_VIEWPORT_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPushAttrib(GL_COLOR_BUFFER_BIT)
glPopAttrib()
glPopAttrib()
glPopAttrib()
/* and so on */

在导致glPopAttrib()出错之前,不会进行任何glBegin/glEnd调用。(我使用findstr commad来过滤日志)。

该错误只出现一次,在代码执行过程中不会再出现此类(或其他)错误。我怀疑我应该在glPushAttrib(GL_VIEWPORT_BIT)或其他什么之前调用一些函数。

EN

回答 2

Stack Overflow用户

发布于 2015-09-28 22:31:03

我也遇到了同样的问题,并最终找出了原因:当您在glPushAttrib(GL_COLOR_BUFFER_BIT)glPopAttrib之间调用glBindFramebuffer时,glPopAttrib调用会导致GL_INVALID_OPERATION

甚至在调用glPopAttrib之前恢复原始帧缓冲区绑定时也会发生这种情况。

唯一的解决方案似乎是避免glPushAttrib和glPopAttrib之间的所有glBindFramebuffer调用,或者通过手动存储和恢复所有相关的颜色缓冲区状态来避免使用glPushAttrib和glPopAttrib。

票数 3
EN

Stack Overflow用户

发布于 2011-12-16 19:34:19

有趣的问题。让我思考..。

可能发生的情况是,当从窗口系统获取OpenGL上下文时,与COLOR_BUFFER_BIT关联的一些状态变量未使用正确的值进行初始化。当您执行glPushAttrib时,那些(可能)不正确的值被保存,而当弹出属性时,不正确的值被恢复-导致无效操作?这听起来合乎逻辑吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8504947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档