グラフィックス プログラマーに初歩的な質問があります。
一部のゲーム (Crysis など) が DirectX 9 (XP の場合) と 10 (Vista の場合) の両方をどのようにサポートできるのか混乱していますか?
これまでのところ、DX10 アプリを作成すると、Vista でしか実行できないことがわかりました。
多分彼らは 2 つのコード ベースを持っています.1 つは DX9 で書かれ、もう 1 つは DX10 で書かれていますか? でもそれってやり過ぎじゃない?
グラフィックス プログラマーに初歩的な質問があります。
一部のゲーム (Crysis など) が DirectX 9 (XP の場合) と 10 (Vista の場合) の両方をどのようにサポートできるのか混乱していますか?
これまでのところ、DX10 アプリを作成すると、Vista でしか実行できないことがわかりました。
多分彼らは 2 つのコード ベースを持っています.1 つは DX9 で書かれ、もう 1 つは DX10 で書かれていますか? でもそれってやり過ぎじゃない?
2 つのレンダリング パイプラインがあり、1 つは DX9 呼び出しを使用し、もう 1 つは DX10 呼び出しを使用します。API には互換性がありませんが、ほとんどのゲーム エンジンはどちらにも再利用できます。さまざまなレンダリング パイプラインの実行方法に関するオープン ソースの例が必要な場合は、OpenGL、DX9、および (間もなく) DX10 レンダリングをサポートする Ogre3d などを参照してください。
通常、ゲームのレンダリング レイヤーは、アプリケーション全体からかなり分離/抽象化された部分です。ゲーム エンジンに関する限り、各フレームは概念的なオブジェクト (ツリー、キャラクターなど) のリストを構築しているだけです。ゲーム エンジンが特定のオブジェクトをレンダリングすることを選択した場合、そのインテントを実際に DX ドロー コールに変換する方法は、レンダリング レイヤー次第です。DX10 レンダリングは、DX9 レイヤーへの別の一連の描画呼び出しを生成しますが、概念的には、「このツリーをレンダリングする」という同じアクションを実行しています。
レンダリング レイヤーから情報を取得することはほとんどないため、レンダリングは適切に抽象化されています。「このツリーをレンダリングする」アクションが実行されると、ゲーム エンジンはレンダリングが正しく見えると想定します。情報の 99.9% がエンジンからグラフィックス システムに送られ、返される 0.1% は 2 つの API 間で同じ形式をとる可能性が高いため、DX9/DX10 レンダリング呼び出しからの異なる潜在的な結果を処理する必要はほとんどありません。
DX10 がサポートされているかどうかをシステムに確認し、サポートされていない場合は DX9 に適切にフォールバックする必要があるため、アプリケーションのセットアップは少し面倒ですが、これはアプリケーションのセットアップの標準的な方法です (ゲームがサポートされているのと同じ方法で)。解像度、リフレッシュ レート、入力デバイスなどを選択します)。
抽象化レイヤーがあり、それに対して開発している可能性があります。実行時に、これらは DX9 または DX10 ラッピング コンクリート エンジンをインスタンス化します。
それらの抽象化は DirectX レイヤーに非常に近い位置にあり、DX9 に DX10 関数の賢明な手動実装を提供するか、DX10 で実行するときに DX9 ロジックを強化するだけだと思います。