2015-10-11 111 views
0

我最近遇到了由於我無意中在OpenGL幾何着色器中的EmitVertex和EndPrimitive之後錯誤地鍵入了一對括號而導致的呈現問題。令我驚訝的是,glsl編譯器並沒有拋出任何編譯錯誤,並悄悄讓它通過。最終的結果是一個空白屏幕,因爲幾何着色器沒有發射頂點。glsl編譯器完全忽略捕捉EmitVertex後缺少括號的錯誤EndPrimitive

我想知道它是在編譯器中的錯誤還是有任何其他原因。 順便說一句,我已經在Win7上測試了它與nVidia Titan X以及Win8與GTX 750M。他們都有同樣的問題。

+2

在發生這種情況時發佈着色器示例。 – BDL

+0

無需發佈着色器。您可以通過刪除EmitVertex()或EndPrimitive()的圓括號在任何opengl幾何着色器上嘗試它。 – stonexjr

回答

1

這絕對是一個錯誤,如果它按照您描述的方式工作(,例如EmitVertex);)。

如果您有任何疑問,您可以隨時使用Khronos的'reference compiler驗證着色器。這種事情在基於D3D的軟件中已經很常見,其中在構建軟件時着色器是預編譯的; GL不支持與硬件無關的預編譯着色器,因此您只能將其用作驗證步驟而不是編譯過程的一部分。

儘管它不會保存運行時,但將其應用到軟件的構建過程中並不是一個壞主意,因此您不必等到實際部署軟件才能捕獲這樣的簡單分析錯誤。否則,您通常只會在驅動程序版本更改後才能瞭解這些內容,或者在以前從未測試過的GPU上運行該軟件。

+0

感謝您的回答。我嘗試使用glslangValidator來驗證我的問題幾何着色器。它確實檢測到語法錯誤: 錯誤:0:138:'EmitVertex':未聲明的標識符 我很確定這是nvidia驅動程序中的錯誤。我的驅動程序版本是352.86 – stonexjr

+0

再次,在10/07/2015發佈nvidia驅動程序後更新至358.50。該錯誤仍然存​​在。 – stonexjr