我正在开发一些图形应用程序,但在GL_INVALID_OPERATION
之后得到了glPopAttrib()
。预测答案“似乎您在glPopAttrib()
块中调用了glBegin/glEnd
”,请参阅我使用GLIntercept编写的日志。
/* 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 */
导致错误的
glBegin/glEnd
之前不进行glPopAttrib()
调用。 (I用于FINDSTR commad到过滤日志)。该错误仅出现一次,在代码执行期间不会再出现此类(或其他)错误。我怀疑我应该在
glPushAttrib(GL_VIEWPORT_BIT)
之前调用某些函数。 最佳答案
我遇到了同样的问题,并最终找出了原因:
当您在glBindFramebuffer
和glPushAttrib(GL_COLOR_BUFFER_BIT)
之间调用glPopAttrib
时,在glPopAttrib调用上会导致GL_INVALID_OPERATION
。
在调用glPopAttrib之前恢复原始帧缓冲区绑定(bind)时,甚至会发生这种情况。
唯一的解决方案似乎是要么避免在glPushAttrib和glPopAttrib之间进行所有glBindFramebuffer调用,要么通过手动存储和恢复所有相关的颜色缓冲区状态来避免使用glPushAttrib和glPopAttrib。
关于c++ - glPopAttrib和GL_INVALID_OPERATION,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8504947/