2013-08-25 29 views
1

directx 10到11有什麼變化?我已經在directx 10中編寫了一些代碼,我想將其更改爲directx 11.這僅僅是關於質量,我可以通過更改頭文件和dll文件或函數以及編碼方式進行更改來實現。 ING。如何在不同版本之間遷移?

+0

你爲什麼要遷移? DirectX 11增加了一些新功能。你顯然不需要的功能。只通過切換DirectX版本,程序的質量不會提高。 –

+0

我認爲不同的版本是關於技術的。更好的照明,更好的渲染和......沒有?:d – virtouso

+0

編號照明和渲染取決於程序員。 –

回答

6

首先,我需要說的是,如果您只是將D3D10DoSomething()函數更改爲D3D11DoSomething(),則沒有任何變化。他們會做同樣的事情。沒有被動收益。您必須使用新功能明確使您的應用程序更好。那些D3D10沒有的功能:如硬件鑲嵌,計算着色器,many many other stuff.要編碼。

所以,主要問題是「你真的需要這個功能嗎」?或者,也許,「你會在以後需要這些功能嗎?」? 當你看到古老的D3D10代碼時,你的編程夥伴會笑嗎?

如果答案是肯定的:

的DirectX 10至11的移植是非常簡單的。與DirectX 9到10的移植相比,這只是一個笑話。

這裏是短的東西非詳盡清單移植D3D10到D3D11時要做到:

  • 備份源
  • 獲取文本查找替換工具(如Visual Studio中,或者grep的) ,找到 「D3D10」 並替換爲 「D3D11」
  • 更換#include <d3d10*>#include <d3d11*>
  • 在連接選項替換d3d10*.libd3d11*.lib

設備和上下文創建:

  • 在D3D11設備接口分裂到設備和上下文,所以device現在負責創建功能(大多數方法是Create*())和context負責狀態改變功能(大多數方法是Set*()/Get*())。
  • 如果您使用D3D10CreateDevice*函數之一(現在它們已成爲D3D11CreateDevice*)創建設備,請添加額外的ID3D11DeviceContext參數並添加與D3D_FEATURE_LEVEL相關的參數。 (更多有關特徵等級here
  • 變化device->ChangeState()調用deviceContext->ChangeState()

其他的東西:

  • 一些功能接受額外的參數(S)。大多數情況下,您只需通過0即可,直到您不需要此功能。如果您得到與參數數量有關的編譯器錯誤或「無法轉換參數..「只是覺得這個功能在DirectX 11 reference,看看你是否必須添加額外的零參數=)

着色器:

  • 頂點,幾何,像素着色器大多是不變的,所以你可以放心地使用舊的
  • 如果您在使用Effect10框架,事情可能更復雜,但還是移植需要的時間約1小時左右,參考Microsoft site或谷歌,當你有問題。

以下是來自Microsoft的其他提示:link,link

嗯,主要是完成!歡迎來到D3D11世界=)