2013-02-02 84 views
0

我剛開始使用C++,IM下面就一本書的教程來學習HLSL的基礎知識,第一個基本着色器:錯誤C2146嘗試編譯基本HLSL着色器在C++

float4 VS_Main(float4 pos:POSITION):SV_POSITION 
{ 

return pos; 
} 

但我在編譯時遇到很多錯誤:

錯誤C2146:語法錯誤:';'在標識符'VS_Main'之前丟失

錯誤C4430:缺少類型說明符,假定爲int。注:默認int不再支持

錯誤C2146:語法錯誤:「)」標識的POS'

錯誤C2059前丟失:語法errorlooks像一個函數的定義,但目前還沒有正式的參數列表。

錯誤C2059:語法錯誤:「{」

它真的看起來像編譯器不能處理HLSL在所有...也許VS2012表達犯規支持HLSL?

在此先感謝

回答

0

it really looks like the compiler cant handle HLSL at all...maybe VS2012 express doesnt support HLSL?

沒有C++編譯器。它不應該被編譯器處理。

您需要將其轉換爲資源並使用後構建腳本將其複製到bin目錄中,然後在運行時加載HLSL。

參見:http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5

1

HLSL不是C++。您應該使用着色器編譯器編譯着色器,並使用C++編譯器編譯C++ - 不要混合使用。有兩種編譯HLSL的選項。

  1. 使用包含在DirectX SDK(文檔和用法here at MSDN)命令行實用程序fxc.exe。它生成一個文件,您應該在運行時通過here中描述的一些方法加載。
  2. 使用D3DCompileFromFile函數在運行時編譯着色器。

每種變體都有優點和缺點。簡而言之,在構建時進行預編譯會爲您在運行時帶來一些時間收益,而在運行時編譯在開發階段更加靈活和舒適(無需記住重新編譯它或使用後構建腳本),但是更容易出錯,俯臥。自己選擇。

1

該代碼對於HLSL來說看起來很好。如果你想從VS2012編譯它,使用HLSL着色器編譯器設置「.fx」文件。右鍵單擊文件選擇屬性。然後選擇General並將Item Type設置爲HLSL編譯器。

如果你真的想使用C++着色器,你可以看看C++ AMP看它是否適合你的需求。