Microsoft DirectX 8.0 (C++) |
Microsoft® Direct3D® for Microsoft DirectX® 8.0 では、頂点トランスフォームおよびライティング パイプラインと、ピクセル テクスチャ ブレンディング パイプラインの動作を指定するためにプロシージャ モデルを使用する。プログラム モデル ベースの構文を使ってハードウェアの動作を指定することには、多くの利点がある。
まず、プロシージャ モデルでは、より一般的な構文を使って共通の操作を指定できる。固定機能 API では、プログラム可能とは対照的に、表現する必要がある数多くの処理についてモード、フラグなどを定義しなければならない。さらに、ハードウェアの能力が向上すると (色、テクスチャ、頂点ストリームなどが増加すると)、データ入力数と乗算された操作のトークン空間が複雑になる。一方、プログラム可能なモデルでは、適切な色および適切なテクスチャをライティング モデルの適切な部分に適用するなどの簡単な処理を、直接的な方法で実行できる。使用可能なすべてのモードを検索する必要がなく、マシンのアーキテクチャを理解し、実行する適切なアルゴリズムを指定するだけで済む。
たとえば、次のような既知の機能をサポートできる。
次に、プロシージャ モデルは、新しい処理を開発するための簡単なメカニズムを提供する。実行する必要のある処理の多くが、現在の API ではサポートされていないことがある。多くの場合、これはハードウェアの能力の制限によるものではなく、API の制限によるものである。一般的に、これらの処理は、固定機能の API を API の設計者が予想していない方法で無理やり使って、同じ動作を抽出するよりも、単純であり、高速である。
一般的に実装されることが予想される新しい機能には、次のようなものがある。
第 3 に、プロシージャ モデルはスケーラビリティと発展性を提供する。ハードウェアの能力は急速に発展し続けており、プログラムによる表現は非常にスケーラブルなので、同じ API によるプログラムがその発展にあわせて高層化が可能である。次の処理によって、新しい機能および能力を簡単に公開して、追加することができる。
コードは、複雑な処理を表現するための最適なスケーリング プロパティを持つ表現である。さらに、プログラム可能なシェーダに追加された新しい機能について、Direct3D 内部で変更しなければならないコードは非常に少ない。
第 4 に、プロシージャ モデルは親しみやすい。ソフトウェア開発者にとっては、ハードウェアよりもプログラミングの方が理解しやすい。ソフトウェア開発者の要求を満たす API は、ハードウェアの機能をコード パラダイムにマッピングするべきである。
第 5 に、プロシージャ モデルは、フォトリアル レンダリングの遺産を受け継いでいる。ハイエンドのフォトリアル レンダリングでは、長年にわたって、プログラム可能なシェーダが使用されてきた。一般的に、この分野はパフォーマンスの制約を受けないので、プログラム可能なシェーダによって、レンダリング技術の妥協のない、究極の目標が表現される。
最後に、プロシージャ モデルによって、ハードウェアへの直接的なマッピングが可能になる。最新の 3D ハードウェアは、少なくとも頂点処理ステージでは、実際にはかなりプログラム可能である。API によるプログラム可能性によって、アプリケーションが直接このハードウェアにマッピングできるようにする。これにより、要件に応じてハードウェア リソースを管理できる。実行できるレジスタや命令が制限されている場合、そのすべての機能を持つ固定機能の実装を個別に有効にすることは困難である。共有リソースを必要とする多くの機能を一度に有効にすると、予期しない方法で動作を停止する場合がある。プログラム可能な API モデルでは、DirectX の伝統に従い、アプリケーション開発者が直接ハードウェアを操作し、このような制限を意識せずに済むようにして、この問題を回避している。