2012-07-02 27 views
1

,詢問奇怪的事情,這裏的傢伙,再包括DirectX 9和10中的相同的代碼文件

我看到他們使用不同的可執行文件,因爲這是兩個DirectX 9和DirectX 10,這是創建一個遊戲可能在代碼文件中包含「d3d9.h」和「d3d10.h」,然後選擇direct3d 9函數或direct3d 10函數,例如,取決於像標誌一樣的參數?我不是在使用direct3d 9上下文和對象使用direct3d 10函數來繪製某些東西。

我想要做的是創建一個名爲init3D(UINT version);的函數。根據version,它將創建一個directx 9或directx 10對象和設備。我不知道這是否可行,或者我必須創建兩個不同的可執行文件(如果我決定使用d3d8,也可以創建兩個)(012)。

回答

1

是的,這完全有可能。

唯一的問題是兩者的庫都必須存在於目標機器上。因爲您已經與d3d10鏈接,所以即使您想要在d3d9模式下運行,它也必須安裝在機器上才能使.exe甚至加載,而xp機器上則不會這樣。

爲了避免這種情況,您需要使用動態鏈接來調用任何函數,以便僅在運行時加載庫。查找LoadLibrary和GetProcAddress。幸運的是,在direct3d中,您可能會調用的唯一全局函數是「創建」函數。 D3DX將導致相同的問題,雖然

+0

運行時鏈接是不是有點慢? – ali

+0

不是真的,通過函數指針而不是直接調用一些小的開銷。另一種方法是將d3d9和d3d10代碼放入單獨的dll中,然後在運行時只加載其中的一個。 – jcoder

1

你明白,DirectX 8不支持的權利? DirectX 10包含DirectX 9,因此沒有理由同時需要這兩者。

您應該能夠根據安裝的DirectX版本有條件地包含頭文件。

下面是如何做的正是這雖然其C#編寫的一個例子:

How to code to get direct X version on my machine in C#?

的傳統方法是安裝DirectX的版本在安裝應用程序時,你的應用程序使用。任何其他方式都應該被認爲是黑客行爲,並且長期不受支持。

+0

我將創建兩個版本的可執行文件,一個用於不支持directx 10的系統,另一個用於支持DirectX 9和10的系統。 – ali

+0

DirectX 10是否包含DirectX 9?因此,如果我使用d3d10.lib/d3d10.h創建應用程序,我是否可以在Windows 7上運行它,例如,使用DirectX9.0c? – ali

1

另一個評論。你想在哪個平臺上運行?

Windows vista和更新版本將運行directx11,並且directx11 將在directx9級硬件上工作(顯然,沒有像tessalation着色器這樣的新功能)。

如果您不需要支持XP(它真的是已經非常老了...),那麼忘記了DX9和DX10,只是使用的DirectX11