1. 程式人生 > >D3D11之HLSL常見問題和除錯方法總結

D3D11之HLSL常見問題和除錯方法總結

用D3D11有一小段時間了,感覺在以前的教程章節也是散亂的寫關於HLSL的總結,不過以前的我感覺有點不太對,這裡我重新整理一下子

第一,HLSL錯誤型別。

HLSL錯誤兩類兩大類:

第一,載入shader檔案路徑出錯或者檔名出錯,這應該是最低階的錯誤.

第二,是shader的語法錯誤,比如無效字元,不記得返回值,值未初始化就使用等等。

一般來說,這時候除錯時最好對想除錯的那個shader檔案進行設定為HLSL偵錯程式,

如圖 我的shader檔案為 ColorShader.fx檔案,對該shader檔案右鍵,然後點選屬性,屬性-》配置屬性-》常規-》項型別,設為HLSL編譯器,


這個問題出現的原因是將.fx檔案(著色器檔案)匯入自己新建的工程以後,VS2013會預設使用HLSL編譯器對其進行編譯,而.fx檔案中並未定義main函式,所以會導致編譯出錯。


這樣的話 該shader檔案有語法錯誤的話可以從VS2015的面板上找到錯誤,不然的話老是得到那個shader輸出錯誤檔案裡,真心麻煩。

當然除錯完畢後記得,對每個shader檔案右鍵,然後點選屬性,屬性-》配置屬性-》常規-》項型別,設為不參與生成,不然編譯Shader時會出錯。

這裡建議shader編寫檔案直接用.HLSL,就省去手動設定的功夫了,或者在FX裡編寫shader程式碼,用HLSL檔案包含FX檔案,然後D3DCompile編譯.fx檔案,參見微軟的Directx11基礎入門教程程式碼。

如圖:


第二,HLSL除錯方法。