2010-02-28 64 views
18

最近我一直在玩Direct3D 11,並且由於缺乏關於API的基礎知識(比如簡單的幾何體渲染)的文檔而感到沮喪。稀疏文檔帶來的混淆之處之一是(明顯)從使用着色器的效果轉移。Direct3D 11效果文件已被棄用?

在D3D11中,所有的效果(.fx)支持已經從D3DX庫中刪除,並被埋在一個很難找到的(當然稀疏記錄的)共享源庫中。所包含的例子都沒有使用它,而是直接編譯HLSL文件。所有這些都告訴我,微軟正試圖讓人們停止使用效果文件格式。真的嗎?有沒有任何文件說明這一點?我無論如何都做得很好,但是多年來他們一直在推廣.fx格式,所以他們突然決定放棄它,這似乎很奇怪。

+0

我完全同意。 [ID3DX11Effect](http://msdn.microsoft.com/en-us/library/ff476652(VS.85).aspx)在示例中未被引用(除了提供ID3DX11Effect的示例外),甚至只是建立一個.lib文件。因爲它很難得到,所以似乎不鼓勵人們使用它。 – bobobobo 2011-09-23 16:49:20

回答

4

我處於完全相同的位置,在使用D3DX11CreateEffectFromMemory進行最簡單的示例時,Google瘋狂搜索之後,我也得出結論:.fx文件支持不是它們的最高prio。雖然奇怪的是,他們添加了EffectGroup的概念,如果他們不希望我們使用它,這個概念是11的新概念。

我對新的反射API玩過一些,所以它看起來很容易將自己的函數一起設置變量等,實質上創建自己的效果類,下一步是將會去看看他們通過API創建渲染狀態塊的支持。能夠直接在.fx文件中編輯它們是非常好的,所以希望這樣的東西仍然存在(或者,最壞的情況下,我可以從Effect11代碼中撕掉那部分內容)。

+0

我最終解決的是一個幫助器類,它使用反射API來分析vs/ps參數,並使用set_variable(name,value)等方法設置值(如果需要,它們實際上映射了cbuffer,並且已更新內存直接)。 我還實現了一個系統,如果磁盤上的文件發生變化,我會得到一個回調,所以我可以動態地重新加載着色器。 對於深度模板狀態等,我最終使用了這些輔助函數:http://legalizeadulthood.wordpress.com/2009/07/12/description-helpers-for-direct3d-10-10-1-and- 11/ – 2010-05-28 08:21:19

0

http://msdn.microsoft.com/en-us/library/ff476261(v=VS.85).aspx

這表明,它可以採取着色器或效果。

http://msdn.microsoft.com/en-us/library/ff476190(v=VS.85).aspx

而且,是什麼着色器和效果之間的區別?

+0

Nah,CompileFromFile只能用於着色器,因爲它需要一個作爲pFunctionName參數傳遞的函數名,而且效果沒有相同的函數。 着色器和效果之間的區別在於,可以將效果視爲容器,該着色器將渲染狀態設置(和其他元數據)與多個着色器一起保存,而着色器僅爲單個頂點或像素着色器。 – 2010-04-08 15:11:53

3

許多專業遊戲和圖形開發人員不使用Direct3D中的效果界面,許多領先的遊戲引擎也不使用它們。相反,自定義材質/效果子系統建立在較低級着色器和圖形狀態管理工具之上。這允許開發人員通過通用資產管理流水線來執行諸如Direct3D和OpenGL兩種操作。

+0

IMO與此處的主題無關 – thewhiteambit 2016-05-14 19:00:04

1

在DirectX SDK中提供了一個作爲示例的效果運行時,它應該能夠幫助您使用.fx文件。 檢查出目錄:%DXSDK_DIR%\ Samples \ C++ \ Effects11

+1

最新的Effects 11託管於[CodePlex](http://go.microsoft.com/fwlink/?linkid=271568&clcid=0x804)上。 – 2014-07-08 22:52:12

3

主要問題是HLSL編譯器團隊不贊成使用所需元數據編譯Effects 11着色器的fx_5_0配置文件。運行時間是shared-source,但編譯器不是。在最新的D3DCompiler(#47)中,它發出警告。 fx_5_0從未更新在DirectX 11.1和11.2一些較新的語言方面,但工程「原樣」支持Direct3D 11

的第二個問題是,你需要D3DCompile的API在運行時使用效果11.由於D3DCompile是對於Windows 8.0和Windows Phone 8.0的Windows應用商店應用的「僅開發」,這不是一種選擇。技術上它是因爲D3DCompile#47是OS的一部分,並且包含對fx_5_0的'不支持/原樣'編譯器支持,所以今天可以使用適用於Windows 8.1和Windows Phone 8.1的Windows Store應用程序。不鼓勵。

大量的DirectX SDK示例和所有的Windows應用商店示例都避免使用效果11.我確實發佈了一些使用它的Win32桌面示例到GitHub

所以,總之,是的,你不鼓勵使用它,但你現在仍然可以在這個時候,如果你能與免責聲明一起生活。

+0

那麼你用什麼來代替'fx_5_0'? – MoonKnight 2018-01-13 13:15:30

+0

根本不使用效果。您直接以「vs_5_0」,「ps_5_0」等構建所有排列和着色器階段。 – 2018-01-14 08:24:21