DirectX Graphics の新機能

DirectX Graphics の新機能

ここでは、Microsoft® DirectX 9.0® における DirectX グラフィックスの新機能について説明する。DirectX 全体の新機能については、「DirectX 9.0 の新機能」を参照すること。

プログラミング ガイド

トピックを見つけやすいように、プログラミング ガイドを次のように分けた。

  • DirectX 9.0 への移行 - アプリケーションが DirectX 9.0 に移行するためのヒントを紹介する。「DirectX 9.0 への移行」を参照すること。

  • 基礎知識 - Microsoft Direct3D® を使うために必要な基礎知識を説明する。

    DirectX 9.0 形式の頂点宣言についての新しいページが追加された。「頂点宣言」を参照すること。

  • 固定機能 - 固定機能パイプラインの機能について説明する。

    テクスチャのセクション - ミップマップの自動生成が追加された。「ミップマップの自動生成」を参照すること。

  • プログラマブル パイプライン - シェーダ モデルに多数の新機能が追加された。

    現在の頂点シェーダとピクセル シェーダは、ハンドルで参照するものではなく、オブジェクトである。頂点シェーダと頂点宣言の分離について詳しく説明する、新しいトピックも追加されている。コンポーネント オブジェクト モデル (COM) インターフェイスの「IDirect3DVertexShader9」および「IDirect3DPixelShader9」を参照すること。

    現在のシェーダと頂点ストリーム宣言は、作成時に互いにバインドされない。現在の頂点ストリーム宣言は D3DVERTEXELEMENT9 要素の配列として表現する。詳細については、「頂点宣言のマッピング」および「IDirect3DDevice9::SetFVF」を参照すること。

    バージョン 2 の頂点シェーダ (vs_2_0) には、制限付きのフロー制御 (loop...endloopif...else...endif、サブルーチン) が追加されている。その他の機能には、レジスタの増加、定数設定メソッド (IDirect3DDevice9::SetVertexShaderConstantBIDirect3DDevice9::SetVertexShaderConstantF、および IDirect3DDevice9::SetVertexShaderConstantI)、新しいマクロ命令 (累乗、外積、符号、絶対値、ライン形補間) などがある。「頂点シェーダ 2_0」を参照すること。

    ピクセル シェーダ バージョン 2 (ps_2_0) では、テクスチャ レジスタに加えてサンプラ レジスタが作成されたので、テクスチャ データとテクスチャ サンプリングが分離された。命令数とレジスタ数が増えた。float のデータ型が追加された。テクスチャ アドレス命令と算術命令が混在できるようになった。正負反転を除くすべての修飾子が削除された。新しいマクロおよび命令には、正弦と余弦、正規化、外積、累乗、線形補間、射影テクスチャ ロード、バイアス詳細レベル (LOD) テクスチャ ロードなどがある。「ピクセル シェーダ 2_0」を参照すること。

    ハードウェア サポートを利用しなくてもシェーダを効率的に開発できるように、ソフトウェア シェーダが実装された。追加されたソフトウェア バージョンは、vs_2_sw、vs_3_sw、ps_2_sw、ps_3_sw である。

    拡張シェーダ バージョンは、既存のシェーダ バージョンを含み、ハードウェアによって特定の能力が設定されている場合は機能が拡張される。拡張機能には、動的フロー制御、静的フロー制御のネスト、グラデーション命令、任意の入れ換えなどがある。詳細については、「頂点シェーダ 2_0 拡張」および「ピクセル シェーダ 2_0 拡張」を参照すること。

    バージョン 3 のシェーダは、拡張シェーダ バージョンの機能がさらに強化し、能力を設定する必要がなくなった。また、頂点シェーダは、頂点テクスチャ処理のサポートが追加され、レンダリング呼び出し中の頂点シェーダ レジスタの設定頻度を制御できるようになった。詳細については、「頂点シェーダ 3_0」および「ピクセル シェーダ 3_0」を参照すること。

  • 高度なトピック - 新しいツールおよびテクニックが多数追加された。

    • N パッチ、矩形パッチ、三角形パッチなどの高次プリミティブに対して、視点空間内の制御頂点の深度の値に基づいて適応型テセレーションを適用できる。「テセレーション」を参照すること。
    • 非同期通知 - ドライバのステータスに関して行える興味深い多数の非同期クエリーがある。この新機能では、新しいインターフェイスを使って、非同期クエリー機能をサポートしている。「非同期通知」および「IDirect3DQuery9」を参照すること。
    • Direct3D エクステンション (D3DX) - D3DX ライブラリに新しい機能が加わり、メッシュ関数、アンチエイリアシングによるライン描画、ピクセル シェーダと頂点シェーダ、エフェクト、演算、テクスチャ適用関数などの新機能がサポートされるようになった。「その他の Direct3DX エクステンション (D3DX)」を参照すること。
    • ディスプレースメント マッピング - いくつかの単一チャンネルの符号付きフォーマットを使うディスプレースメント マップのサポートが追加された。「ディスプレースメント マッピング」を参照すること。
    • ガンマ補正 - パイプラインがガンマを適切に考慮してブレンドできるように、テクスチャがガンマ 2.2 で補正される (sRGB) かどうかをアプリケーションから指示できる。「ガンマ」を参照すること。
    • ライン描画 - アンチエイリアシングを行ってラインを描画するための新しいインターフェイスが追加された。「Direct3D エクステンション (D3DX) のライン描画」または「ID3DXLine」を参照すること。
    • マルチエレメント テクスチャ - アプリケーションでこの機能を使うと、ピクセル シェーダからテクスチャの複数の要素を同時に書き出すことができる。「マルチエレメント テクスチャ」を参照すること。
    • 複数のレンダリング ターゲット - 単一レンダリング ターゲットのサポートが、複数のレンダリング ターゲットをサポートするように拡張された。「複数のレンダリング ターゲット」を参照すること。
    • マルチヘッド - マルチヘッド ビデオ カードでは、共通のフレーム バッファと独自のデジタル-アナログ コンバータ (DAC) を使って、有用なマルチモニタ サポートを提供する。「マルチヘッド」を参照すること。
    • サーフェイスのロックの動作 - 新しいロック フラグ D3DLOCK_DONOTWAIT を使うと、ドライバがサーフェイスを直ちにロックできない場合に、アプリケーションは、再び CPU サイクルを利用できる。「D3DLOCK」を参照すること。
    • シザー テスト - IDirect3DDevice9::SetScissorRectIDirect3DDevice9::GetScissorRect、および新規レンダリング ステート D3DRS_SCISSORTESTENABLE を使って実装するシザー テストがパイプラインでサポートされる。
    • テセレーション - テセレータ サポートは、適応型テセレーションを行い、ディスプレースメント マップから頂点ごとの変位値を参照するように拡張された。「テセレーション」を参照すること。
    • 両面ステンシルのサポート - シャドウ ボリュームを使って遮蔽ジオメトリによるシャドウを追加できるようになった。「両面ステンシル」を参照すること。
  • チュートリアル、サンプル、ツール、ヒント - 豊富なサンプルおよび役に立つヒントやツールを紹介する。「チュートリアル、サンプル、ツール、ヒント」を参照すること。

リファレンス

リファレンスには次のような新しいページが数多く追加された。

  • エフェクト - ID3DXEffectCompilerID3DXBaseEffectID3DXEffectID3DXFragmentLinkerID3DXInclude。ID3DXSkinMesh の名前が ID3DXSkinInfo に変更された。

    エフェクト フレームワーク。新しいインターフェイス ID3DXEffectCompiler を使うと、ユーザーは関数または頂点シェーダからエフェクトをコンパイルできる。上位レベル シェーダ言語を使って関数を記述できる。

  • 上位レベル言語リファレンス - 頂点シェーダからエフェクトを作成するために、上位レベルのシェーダ言語が用意されている。この機能を使うと、開発者は C に似た高級言語からエフェクトを作成できる。詳細については、「上位レベル シェーダ言語」を参照すること。

  • シェーダ デバッガ - Microsoft Visual Studio® のエクステンションが用意され、そのサポートによっていくつかの種類の頂点シェーダをデバッグできる。詳細については、「シェーダ デバッガ」を参照すること。

その他の機能

その他の新機能には、次のものがある。

  • ダーティー領域。現在の IDirect3DDevice9::Present は、4 番目の引数で領域へのポインタを示すことにより、ダーティー領域をサポートする。
  • 2D のサポート。IDirect3DDevice9::StretchRect の使用時には、ほとんどの種類の D3DPOOL_DEFAULT サーフェイスの間で色変換を伴うブリットがサポートされ、IDirect3DDevice9::ColorFill の使用時には、D3DPOOL_DEFAULT サーフェイスに対する色の塗りつぶし処理がサポートされるようになった。
  • Microsoft Windows® Graphics Device Interface (GDI) との相互運用性。デバイス コンテキストにアクセスするために、IDirect3DSurface9::GetDCIDirect3DSurface9::ReleaseDC の 2 つの新しいメソッドが追加された。
  • DrawIndexedPrimitive。IDirect3DDevice9::SetIndices を繰り返し呼び出すことなく、同じインデックス バッファで複数のプリミティブをバッチ処理できるように、IDirect3DDevice9::DrawIndexedPrimitive が変更された。
  • Texgen モード。この新しい texgen モードは、OpenGL 形式の球状マップ texgen をサポートすることを目的としている。新しいレンダリング ステート D3DVTXPCAPS_TEXGEN_SPHEREMAP が必要である。「D3DVTXPCAPS」を参照すること。
  • ProcessVertices の動作の変更。この変更により、マルチパスの頂点処理と、ソフトウェアによるテセレーション前のシェーダが可能になった。その結果、IDirect3DDevice9::ProcessVertices は、クリッパーをバイパスすることが可能になり、したがってスクリーン座標を計算する必要がなくなった。
  • メッシュの copy および update メソッド。頂点のデータ レイアウトを再フォーマットおよび変更するには、ID3DXBaseMesh::CloneMesh を使う。たとえば、これまで存在していなかった法線、テクスチャ座標、色、重みなどのためにスペースを追加する場合に使う。ID3DXBaseMesh::UpdateSemantics は、頂点バッファのレイアウトを変更することなく、頂点宣言を異なったセマンティクス情報で更新するためのメソッドである。たとえば、3D テクスチャ座標のラベルを従法線や接線に変更する場合や、その逆に変更する場合に使う。
  • 32 ビット テクスチャ フォーマット。2 つの新しい 32 ビット テクスチャ フォーマット 3DFMT_A8B8G8R8、D3DFMT_X8B8G8R8 が追加された。「D3DFORMAT」を参照すること。
  • マルチサンプリング。ユーザーがパフォーマンスと品質を相互に調整するための新しいマルチサンプリング コントロールが追加された。「SetDialogBoxMode」、「SetSampler」、「GetSamplerState」、「D3DSAMPLERSTATE」を参照すること。
  • CreateImageSurface。D3DPOOL_SCRATCH の追加により、削除された。
  • 列挙。IDirect3D9::EnumAdapterModes は、D3DFORMAT を受け取って、拡大するディスプレイ モード セットをサポートするようになった。
  • サンプル フレームワーク。サンプル フレームワークには、ユーザーが処理タイプ、デバイス タイプなどを選択するためのダイアログ ボックスが含まれるようになった。サンプル フレームワークでは、デバイス能力の列挙も改良された。「サンプル フレームワーク」を参照すること。
  • ウィンドウ モードのバック バッファ。バック バッファは、ディスプレイとフォーマットが異なっていてもよくなった。カラー チャンネルあたり 10 ビットのディスプレイ モードが追加された。マルチヘッド アダプタの直接サポートが追加された。
  • CopyRects。IDirect3DDevice9::UpdateSurface に置き換えられた。
  • ステート ブロック。現在のステート ブロックは、ハンドルで参照するものではなく、オブジェクトになった。「IDirect3DStateBlock9」を参照すること。