我发现错误正是这样:
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
,它会以随机方式停止,大多数是glBindBuffer
或glBindFramebuffer
。
我不知道为什么会出现错误,并对任何想法感到高兴。
忘记提到错误仅在一段时间后出现,并且仅在Visual Studio的调试模式下出现。
答案 0 :(得分:2)
我发现这不是我的错。它的AMD故障,实际上 AMD-Gaming-Evolved 使用旧代码进行覆盖,这也是它在一段时间后崩溃的原因,因为覆盖层会在几秒钟后出现。
退出客户解决了这个问题。
答案 1 :(得分:1)
OpenGL调试消息(通过回调)仅在OpenGL-4.3中引入。客户端属性堆栈(glPushClientAttrib和朋友)(这些枚举所涉及的)是OpenGL-1.1的功能,并且已被OpenGL-3弃用,并且仅在兼容性配置文件中可用。如果您有核心配置文件上下文,那么相关的枚举确实无效。
程序中的某些内容(库或遗留代码)使用[client]属性堆栈,从而触发此错误。您应该找到这是哪一部分,因为属性堆栈用于保存和恢复OpenGL状态,如果有问题的代码依赖于它来完成OpenGL状态的恢复,可能会使OpenGL上下文处于不希望的状态。 / p>
(服务器)属性堆栈(glPushAttrib和朋友)也是如此。