2012-09-24 62 views
1

我會問一個相對普遍的問題。HLSL代碼沒有註冊?

我正在使用VC++ 2010,使用着色器組件編程Direct X9應用程序。該程序編譯得很好,它繪製了一個點燃和質感的廣場。問題在於,儘管程序的C++結束工作正常,並且更改(如更改照明顏色或紋理位置)可以正常工作,但忽略.fx文件的所有更改。實際上從指定目錄中刪除文件實際上對程序沒有影響。

這是編譯器問題嗎? HLSL文件當然不是無用的,我的意思是我將變量傳遞給它,所以他們可以在哪裏?

main.cpp中:mediafire.com/?9n4llrclcfohqfb

transform.fx:mediafire.com/?jqach463p2vcqhz

+2

在沒有更多細節的情況下回答這個問題幾乎是不可能的,比如:你如何加載着色器?你確定它不在可執行文件的同一目錄中加載一個副本嗎?你正在談論的事情是在程序運行時發生的變化,還是在運行程序的不同實例之間? –

+0

http://www.mediafire.com/?9n4llrclcfohqfb http://www.mediafire.com/?jqach463p2vcqhz main.cpp and transform.fx; 不同的實例之間,我改變了代碼,重新編譯並且變化很明顯; – HonestHeuristic

回答

0

哇這實際上很可恥,事實證明,我忘記編輯D3DXCreateEffectFromFile函數中的.fx文件的目錄,所以我編輯的文件當然對應用程序沒有影響。感謝大家的幫助。

0

着色器不重新編譯的飛行,所以如果你修改shader代碼,而你的程序正在運行,您需要再次調用D3DXCreateEffectFromFile來創建着色器的新編譯實例。

+0

我不是那麼新。在更改代碼並運行新編譯的可執行文件之前,我關閉了該程序。 – HonestHeuristic

+0

那麼如果你刪除了fx文件,重新編譯並重新運行它仍然運行? – catflier

+0

也可能在Debug中檢查ID3DXBuffer *錯誤中的內容。也在你的CPP代碼mhTech = mFX-> GetTechniqueByName(「AmbientDiffuseSpecTech」);被評論但你仍然叫mFX-> SetTechnique(mhTech); 。並在您的着色器文件行83:float3 texColor = 0xfffffffftex2D(TexS,tex0).rgb;將確保着色器不編譯 – catflier