gpt4 book ai didi

c++ - glPopAttrib & GL_INVALID_OPERATION

转载 作者:可可西里 更新时间:2023-11-01 12:41:58 24 4
gpt4 key购买 nike

我正在开发一些图形应用程序,在 glPopAttrib() 之后我得到了一个 GL_INVALID_OPERATION。预测答案“您似乎在 glBegin/glEnd block 中调用了 glPopAttrib()”,请参阅我用 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 */

在导致错误的 glPopAttrib() 之前没有调用 glBegin/glEnd。 (我使用 findstr commad 来过滤日志)。

该错误仅出现一次,在代码执行期间不会再次出现此类(或其他)错误。我怀疑我应该在 glPushAttrib(GL_VIEWPORT_BIT) 或其他东西之前调用一些函数。

最佳答案

我遇到了同样的问题,终于找到原因了:当您在 glPushAttrib(GL_COLOR_BUFFER_BIT)glPopAttrib 之间调用 glBindFramebuffer 时,会在 glPopAttrib 上引发 GL_INVALID_OPERATION打电话。

即使在调用 glPopAttrib 之前恢复原始帧缓冲区绑定(bind)时也会发生这种情况。

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

关于c++ - glPopAttrib & GL_INVALID_OPERATION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8504947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com