1

奇妙なことを尋ねる男、ここでも

DirectX 9と10の両方で作成されたゲームでは、異なる実行可能ファイルを使用していることがわかります。コードファイルに「d3d9.h」と「d3d10.h」を含めてから、direct3d9関数またはdirect3d10を選択することができます。たとえば、フラグのように機能する引数に応じて機能しますか?私は、direct3d9コンテキストとオブジェクトを使用してdirect3d10関数を使用して何かを描画することについて話しているのではありません。

私がやりたいのは、にinit3D(UINT version);応じてという関数versionを作成することです。これにより、directx9またはdirectx10のオブジェクトとデバイスが作成されます。それが可能かどうかはわかりません。または、2つの異なる実行可能ファイルを作成する必要があります(d3d8を使用する場合は3つも作成する必要があります)

あなたの助けに感謝し、C++テクニックのいくつかについての私の理解の欠如を許してください。

4

3 に答える 3

1

はい、それは完全に可能です。

唯一の問題は、両方のライブラリがターゲットマシンに存在する必要があることです。d3d10とリンクしているため、d3d9モードで実行する場合でも、.exeをロードするには、マシンにインストールする必要があります。これは、xpマシンには当てはまりません。

これを回避するには、動的リンクを使用して関数を呼び出す必要があります。これにより、ライブラリは実行時にのみロードされます。LoadLibraryとGetProcAddressを検索します。幸い、direct3dで呼び出す可能性のあるグローバル関数は、「作成」関数だけです。D3DXでも同じ問題が発生します

于 2012-07-02T13:05:39.823 に答える
1

DirectX 8が正しくサポートされていないことを理解していますか?DirectX10にはDirectX9が含まれているため、両方を必要とする理由はありません。

インストールされているDirectXのバージョンに基づいて、条件付きでヘッダーファイルをインクルードできるはずです。

これは、C#で記述されていますが、正確にそれを行う方法の例です。

C#で自分のマシンに直接Xバージョンを取得するようにコーディングするにはどうすればよいですか?

従来の方法は、アプリケーションのインストール時にアプリケーションが使用するバージョンのDirectXをインストールすることです。他の方法はハックと見なされ、長期的にはサポートされません。

于 2012-07-02T13:11:59.977 に答える
1

もう1つのコメント。これをどのプラットフォームで実行しますか?

Windows Vista以降ではdirectx11が実行され、directx11directx9レベルのハードウェアで動作します(明らかに、テッサレーションシェーダーなどの新しい機能はありません)。

XPをサポートする必要がない場合(そして、実際にはかなり古くなっています...)、dx9とdx10の両方を忘れて、directx11を使用してください。

于 2012-07-02T14:00:14.683 に答える