方法: ドメイン シェーダーを作成する

ドメイン シェーダーは、 テセレーションを実装するために連携する 3 つのステージの 3 番目です。 ドメイン シェーダー ステージの入力は、ハル シェーダーから取得されます。 このトピックでは、ドメイン シェーダーを作成する方法について説明します。

ドメイン シェーダーは、ハル シェーダーの出力コントロール ポイント、ハル シェーダー出力パッチ定数データ、および単一のテセレータ uv 座標セットを使用して、サーフェス ジオメトリ (固定関数テセレータ ステージによって作成) を変換します。

ドメイン シェーダーを作成するには

  1. ドメイン シェーダーを設計する。 「 方法: ドメイン シェーダーを設計する」を参照してください

  2. シェーダー コードをコンパイルします。

  3. ID3D11Device::CreateDomainShader を使用してドメイン シェーダー オブジェクトを作成します。

    HRESULT CreateDomainShader(
      const void *pShaderBytecode, // 
      SIZE_T BytecodeLength, // 
      ID3D11ClassLinkage *pClassLinkage, // 
      ID3D11DomainShader **ppDomainShader
    );
    
  4. ID3D11DeviceContext::D SSetShader を使用してパイプライン ステージを初期化します。

    void DSSetShader(
      ID3D11DomainShader *pDomainShader, // 
      ID3D11ClassInstance *const *ppClassInstances,
      UINT NumClassInstances
    );
    

ハル シェーダーがバインドされている場合は、ドメイン シェーダーをパイプラインにバインドする必要があります。 特に、ジオメトリ シェーダーを使用してハル シェーダーコントロールポイントを直接ストリーミングすることは有効ではありません。

Direct3D 11 の使用方法

テセレーションの概要