2008-09-15 6 views
3

グラフィックスプログラマーの皆様には疑問があります。DirectX 9と10の両方をサポートするアプリケーション

いくつかのゲーム(Crysisなど)がDirectX 9(XP)と10(Vista)をどのようにサポートするのか混乱しますか?

私が今までに理解していることは、DX10アプリケーションを作成すると、Vistaでしか実行できないということです。

2つのコードベースがあるかもしれません.1つはDX9で書かれ、もう1つはDX10で書かれていますか?しかし、それは過度なことではないのですか?

答えて

5

これらは、DX9コールを使用するレンダリングパイプラインとDX10コールを使用するレンダリングパイプラインの2つを備えています。 APIは互換性がありませんが、大部分のゲームエンジンはいずれかのために再利用できます。異なるレンダリングパイプラインがどのように行われているかについていくつかのオープンソースの例が必要な場合は、OpenGL、DX9、(すぐに)DX10レンダリングをサポートするOgre3dのようなものを見てください。

1

抽象レイヤーを持っている可能性があります。実行時には、DX9またはDX10のコンクリートエンジンをインスタンス化します。

抽象化がDirectXレイヤーに非常に近い位置にあり、DX10に手作業で実装されたDX9を提供するだけでなく、DX10上でDX9ロジックを強化すると思います。

2

ゲームのレンダリングレイヤは、通常、アプリケーション全体のかなりよく分離/抽象化された部分です。ゲームエンジンに関する限り、各フレームは概念的なオブジェクト(ツリー、文字など)のリストを単純に構築しています。ゲームエンジンが特定のオブジェクトをレンダリングすることを選択した場合、レンダリングレイヤーによって、そのインテントをDX描画呼び出しに実際にどのように変換するかが決まります。 DX10レンダリングでは、DX9レイヤーとは異なる描画呼び出しが生成されますが、概念的には同じアクション、つまり「このツリーをレンダリング」を実行しています。

「レンダーツリー」アクションが実行されると、レンダリングレイヤーから情報を取得することはまれですので、レンダリングはきれいに抽象化されます。 99.9%の情報がエンジンからグラフィックスシステムに送られ、戻って来る0.1%が2つのAPI間で同じ形式をとるため、DX9/DX10レンダリングコールのさまざまな潜在的な結果を処理する必要はほとんどありません。

DX10がサポートされているかどうかシステムに尋ねなければならないので、アプリケーション設定はちょっと厄介です。これは、DX9が正常に機能しているかどうかを確認する必要があります。ゲームは、解像度、リフレッシュレート、入力デバイスなどを選択しなければならない)。

関連する問題