2018年2月13日 星期二

從D3D10到D3D11

從D3D10到D3D11
前言
  最近要將原本的D3D10的引擎整合D3D11,這邊把一些差異的部分記錄下來。

內容
  首先D3D10的Device在D3D11被分裂成Device與DeviceContext,D3D11的Device主要負責製造資源,而DeviceContext負責執行繪圖的命令。這裡要注意D3D11是可以向下整合的!剩至可以相容D3D10,而原本的D3D10在10.0與10.1差異只有用不同的Create()去區分。
  在DXGISwapChain的部分,要注意11.0的作法與D3D10差不多,但11.1的作法就不一樣了,可以參考D3D11的教學範例,參考教學2的做法即可。
  在shader的方面,D3D11多了Hull shader與Domain shader,ConstatBuffer、Texture與SamplerState的設置介面和舊有的Shader是一樣的,但D3D11的SetShader()的介面多了2個參數,目前還不知具體的作用,設成空的是可行的。
  編譯shader的部分只要把版本調成"5"就可以了,至少目前沒發生問題。
  RasterizerState、BlendState與DepthStencilState基本上和D3D10的做法一樣,但若是11.1的話,要注意BlendState在Create的時候,D3D11_BLEND_DESC1的Rendertarget裡會多一個"RenderTargetWriteMask",這個參數的預設值請設成"D3D11_COLOR_WRITE_ENABLE_ALL",就算是把Blend設為關閉也要設置這個變數,不可以設成"0",如果設成"0"會看不到任何繪製結果!一定要注意。

後記
如果只是單純用D3D11模擬D3D10的繪製方法的話,整體來說還算是簡單,但看了一下Device的介面裡多可一些新的資源可以Create,那些新東西以後有機會再來研究研究。
參考資料
ID3D11Device interface
D3D11的教學範例

沒有留言:

張貼留言