OpenGL抱怨枚举使用

时间:2015-05-06 15:35:37

标签: opengl

我发现错误正是这样:

Source=DEBUG_SOURCE_API Type=DEBUG_TYPE_ERROR ID=3200 Severity=DEBUG_SEVERITY_HIGH Message=Using glGetIntegerv in a Core context with parameter <pname> and enum '0xbb1' which was removed from Core OpenGL (GL_INVALID_ENUM)
Source=DEBUG_SOURCE_API Type=DEBUG_TYPE_ERROR ID=3200 Severity=DEBUG_SEVERITY_HIGH Message=Using glGetIntegerv in a Core context with parameter <pname> and enum '0xd3b' which was removed from Core OpenGL (GL_INVALID_ENUM)
OpenGL error occured: A GLenum argument was out of range.

这是第一次出现这个错误,首先我认为我不再使用不存在的东西,但我发现我的标题中甚至不存在theese值。

CLIENT_ATTRIB_STACK_DEPTH = 0xbb1
MAX_CLIENT_ATTRIB_STACK_DEPTH = 0xd3b

然而,经过一些额外的研究,我发现它比我想象的更奇怪,因为我的代码中有一些东西在调试版本中发生OpenGL错误时停止调试器。

#if DEBUG
    Debug.HoldOnGLError();
#endif

这是在每次OpenGL调用之后插入的,但是它不会停留在glGetIntegerv,它会以随机方式停止,大多数是glBindBufferglBindFramebuffer

我不知道为什么会出现错误,并对任何想法感到高兴。

修改

忘记提到错误仅在一段时间后出现,并且仅在Visual Studio的调试模式下出现。

2 个答案:

答案 0 :(得分:2)

我发现这不是我的错。它的AMD故障,实际上 AMD-Gaming-Evolved 使用旧代码进行覆盖,这也是它在一段时间后崩溃的原因,因为覆盖层会在几秒钟后出现。

退出客户解决了这个问题。

答案 1 :(得分:1)

OpenGL调试消息(通过回调)仅在OpenGL-4.3中引入。客户端属性堆栈(glPushClientAttrib和朋友)(这些枚举所涉及的)是OpenGL-1.1的功能,并且已被OpenGL-3弃用,并且仅在兼容性配置文件中可用。如果您有核心配置文件上下文,那么相关的枚举确实无效。

程序中的某些内容(库或遗留代码)使用[client]属性堆栈,从而触发此错误。您应该找到这是哪一部分,因为属性堆栈用于保存和恢复OpenGL状态,如果有问题的代码依赖于它来完成OpenGL状态的恢复,可能会使OpenGL上下文处于不希望的状态。 / p>

(服务器)属性堆栈(glPushAttrib和朋友)也是如此。