2015-05-06 50 views
0

我一個錯誤抓到這正好是這樣的: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. 

這是第一次遇到這種錯誤出現了,開始我還以爲是我使用的東西不存在了,但我發現這些值在我的頭文件中不存在。

CLIENT_ATTRIB_STACK_DEPTH = 0xbb1 
MAX_CLIENT_ATTRIB_STACK_DEPTH = 0xd3b 

但是經過一些額外的研究,我發現,它甚至比我還以爲是因爲我在我的代碼一些東西,停在調試調試構建時的OpenGL出錯陌生人。

#if DEBUG 
    Debug.HoldOnGLError(); 
#endif 

這是每一個OpenGL的調用之後插入,但它不是在glGetIntegerv在隨機方法大多是一些glBindBufferglBindFramebuffer停止,其停止。

我不知道爲什麼錯誤出現,並會爲任何想法感到高興。

編輯

忘記提到該錯誤後的一段時間,只有在Visual Studio調試模式下僅出現。

+0

您是否在使用某種可以進行這些調用的框架?如果您可以提供有關您正在使用的平臺/環境/工具的更多詳細信息,可能會有所幫助。在任何情況下,如果錯誤檢查是在第一次OpenGL調用時觸發的,則可以通過調用glGetError()來首先清除錯誤狀態,從而解決此問題。 –

+0

其實我自己的框架最適合完美的時間。這是C#自帶頭文件。使用Windows 7,AMD R9 290.問題在於,調用隨機出現在不同的方法中,這些方法根本無法使用,而且在調試時也沒有幫助。 –

+2

說真的,是誰投票結束這個問題?這是一個非常有效的OpenGL問題。這不是「我的代碼無法正常工作」的投訴。夥計們,如果你不明白這個問題,或者有疑問,就留下吧。 - ** Upvoted因爲對一個問題有效的問題其他人可能會跳閘進入爲好,我們希望他們能夠找到這一點,並鍵入它進入選擇的搜索引擎的答案,如果。** – datenwolf

回答

2

我發現這不是我的錯。它的AMD的錯誤,實際上是AMD-Gaming-Evolved使用舊代碼覆蓋,這也是它在一段時間後崩潰的原因,因爲覆蓋在幾秒鐘後出現。

退出客戶端可解決問題。

1

OpenGL調試消息(通過回調)僅在OpenGL-4.3中引入。客戶端屬性堆棧(glPushClientAttrib和朋友)(這些枚舉是關於的)是OpenGL-1.1的功能,並且已經被OpenGL-3棄用,並且僅在兼容性配置文件中可用。如果您有核心配置文件上下文,那麼相關的枚舉實際上是無效的。

程序(庫或遺留代碼)中的某些內容使用[client]屬性堆棧,從而觸發此錯誤。你應該知道這是哪一個部分,因爲屬性堆棧被用來保存和恢復OpenGL狀態,並且如果代碼依賴於它在它完成後恢復OpenGL狀態,它可能會使OpenGL上下文處於非期望狀態。

同樣也適用於(服務器)屬性堆棧(glPushAttrib和朋友)。

+0

感謝您的回答。正如我所說我不使用它們,也不使用外部庫。我仍然試圖找出爲什麼會發生這種情況。也許它在驅動程序中有某種調試功能。仍然可以幫助其他人如此+1。 –

+0

發現它是什麼,它是AMD-Gaming-Evolved。 –