次の方法で共有


BasicHLSL サンプル

このサンプルは、エフェクト インターフェイスを使用した上位レベル シェーダー言語 (HLSL) の簡単な例を示しています。

Ee416223.BasicHLSL(ja-jp,VS.85).jpg

Path

Source SDK ルート\Samples\C++\Direct3D\BasicHLSL
実行可能ファイル SDK ルート\Samples\C++\Direct3D\Bin\<x86 または x64>\BasicHLSL.exe

サンプルの概要

このサンプルは、メッシュを読み込み、ファイルからエフェクトを作成します。次に、そのエフェクトを使用してメッシュをレンダリングします。使用されているエフェクトは、簡単な頂点シェーダーで、時間をベースに頂点をアニメーション化します。

サンプルが動作するしくみ

まず、サンプルが D3DXLoadMeshFromX を使用してジオメトリを読み込みます。メッシュの法線が存在しない場合は、D3DXComputeNormals を呼び出して作成します。次に、OptimizeInplace() を呼び出して頂点キャッシュのメッシュを最適化し、次に D3DXCreateTextureFromFile を使用してテクスチャーを読み込みます。次に、サンプルは D3DXCreateEffectFromFile を呼び出してエフェクト テキスト ファイルをコンパイルし、m_pEffect と呼ばれる ID3DXEffect* インターフェイスにします。

D3DXCreateEffectFromFile は、Visual Studio .NET シェーダー デバッガーを使用してシェーダーをデバッグするのに必要とされるフラグを取得します。頂点シェーダーのデバッグには、リファレンス デバイスまたはソフトウェア頂点処理のいずれかが必要です。ピクセル シェーダーのデバッグには、リファレンス デバイスが必要です。

D3DXSHADER_FORCE_*_SOFTWARE_NOOPT フラグは、さまざまなソース コード デバッグ オプションを設定します。これらのフラグを設定すると、シェーダーが最適化されないにもかかわらず、ソフトウェアでは最適化を適用されるため、レンダリングが低速になります。サンプル コードにあるこれらのフラグを有効にするには、ファイルの上部にある #define DEBUG_VS or #define DEBUG_PS コメント行を削除します。これによって、CMyD3DApplication::ConfirmDevices にコードがいくつか追加されて、デバイスによるソフトウェア処理が強制的に実行されます。

CMyD3DApplication::Render では、サンプルは ID3DXEffect::SetTechnique の呼び出しを伴うテクニックを設定し、ID3DXBaseEffect::GetTechniqueByName を呼び出して初期化されて取得されたテクニックに D3DXHANDLE を渡します。ハンドルの代わりに文字列名を渡すことができますが、ハンドルを使用した方がパフォーマンスは改善されます。この高周波数呼び出しは、文字列の比較で時間がかからないからです。

サンプルは、World*View*Projection 行列などのテクニックで使用される変数、およびさまざまな ID3DXEffect::Set* 呼び出しを持つ時間変数を設定します。レンダリングするため、サンプルは ID3DXEffect::Begin を呼び出します。これは、テクニックによって必要なパス数を返し、次に m_pEffect->Pass(iPass) を呼び出すことで各パスをループし、ID3DXBaseMesh::DrawSubset でメッシュをレンダリングします。すべての引き渡しが完了したら、ID3DXEffect::End を呼び出します。