我有一個OpenGL測試應用程序,產生令人難以置信的不尋常的結果。當我啓動應用程序時,它可能會或可能不會出現嚴重的圖形錯誤。什麼導致這個不可預知的OpenGL錯誤?
它可能會產生這樣的圖像: http://i.imgur.com/JwPoDrh.jpg
或者這樣: http://i.imgur.com/QEYwhBY.jpg
或者只是正確的圖像,像這樣: http://i.imgur.com/zUJbwCM.jpg
的場景由一個旋轉的彩色立方體(由12個三角形組成),上面有一個簡單的着色器,它根據模型空間座標的絕對值爲像素着色。垃圾面似乎與立方體一起旋轉,好像它們被附着在立方體上一樣,並且通常垃圾三角形或四邊形短暫地在屏幕上閃爍,就好像它們是以2D渲染的一樣。
我發現最不尋常的事情是,行爲是高度不一致的,重複啓動完全相同的應用程序,而不是我個人改變系統上的其他任何東西會產生不同的結果,有時會出錯,有時候不會,產生的垃圾面也不一致。
我無法真正發佈應用程序的源代碼,因爲它非常冗長,實際的OpenGL調用分佈在很多包裝類和類似的地方。
這是在以下條件下發生:
視窗10 64位操作系統(雖然我已經視窗8.1 64位下觀察非常相似的行爲)。
AMD FX-9590 CPU(華碩Sabertooth 990FX主頻爲4.7GHz)。
AMD 7970HD GPU(已有兩三年的歷史,偶爾3D應用程序中的屏幕區域會變得混亂,但在我所經歷的範圍內沒有任何變化)。
使用SDL(https://www.libsdl.org/)進行窗口和上下文創建。
對OpenGL使用GLEW(http://glew.sourceforge.net/)。
使用OpenGL版本1.0,3.3和4.3(我假設SDL的確在使用我指示的版本)。
AMD Catalyst驅動程序版本15.7.1(驅動程序打包版本列爲15.20.1062.1004-150803a1-187674C,雖然我在舊版驅動程序中看到了非常類似的行爲)。
Catalyst Control Center將我的OpenGL版本列爲6.14.10.13399。
我不認爲這是一個很好的問題,因爲如果它不可能提取到少量的代碼。想到的一種可能性是您可能錯過了清除深度緩衝區。 –
你超頻你的顯卡嗎?它已經在其他軟件中出現問題,所以它可能是罪魁禍首。 CPU也可能過快地向卡發送數據,導致一些數據被破壞。嘗試降低CPU的時鐘速度。 – 1201ProgramAlarm
我會嘗試創建在單個函數中產生錯誤的代碼。不過,我覺得,鑑於這個bug已經在3個獨立的實現中顯示出來,並且如此不可預測,所以它是一些潛在的問題,而不是代碼中的錯誤。 (另外我在glClear期間清除深度緩衝區)。 – user573949