2015-09-12 73 views
-1

我有一個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。

+0

我不認爲這是一個很好的問題,因爲如果它不可能提取到少量的代碼。想到的一種可能性是您可能錯過了清除深度緩衝區。 –

+0

你超頻你的顯卡嗎?它已經在其他軟件中出現問題,所以它可能是罪魁禍首。 CPU也可能過快地向卡發送數據,導致一些數據被破壞。嘗試降低CPU的時鐘速度。 – 1201ProgramAlarm

+0

我會嘗試創建在單個函數中產生錯誤的代碼。不過,我覺得,鑑於這個bug已經在3個獨立的實現中顯示出來,並且如此不可預測,所以它是一些潛在的問題,而不是代碼中的錯誤。 (另外我在glClear期間清除深度緩衝區)。 – user573949

回答

3

這看起來像一個破碎的圖形卡給我。最可能的問題是內存(內存本身或焊接問題)。如果由於某種原因,設置內存操作的地址在開始讀取之前沒有完全解決或發生,那麼您看到的那些工件可能會發生;這可能是由於GPU和內存之間的連接不良(焊接連接失敗)或內存本身故障導致的。

解決方案:購買新的顯卡。您可以嘗試使用迴流工藝解決問題時會發生什麼;有一些關於如何做這種DIY的教程,但適當的迴流爐可以產生更好的效果。

+0

我相信你是對的,我把這個可執行文件發給了另外兩個人,它在他們的機器上完美無缺地工作。看起來像一個新的GPU,然後... – user573949

相關問題