方法: ハル シェーダーを作成する

ハル シェーダーは、 テセレーションを実装するために連携する 3 つのステージの最初のステージです。 ハル シェーダー出力は、テセレータ ステージとドメイン シェーダー ステージを駆動します。 このトピックでは、ハル シェーダーを作成する方法について説明します。

ハル シェーダーは、一連の入力コントロール ポイント (頂点シェーダーから) を出力コントロール ポイントのセットに変換します。 入力ポイントと出力ポイントの数は、変換に応じて内容と数が異なる場合があります (一般的な変換は基本変換になります)。

ハル シェーダーは、ドメイン シェーダーとテセレータのパッチ定数情報 (テセレーション 係数など) も出力します。 固定関数テセレータ ステージでは、テセレーション 係数と、ハル シェーダーで宣言された他の状態を使用して、テセレーションの量を決定します。

ハル シェーダーを作成するには

  1. ハル シェーダーを設計します。 「 方法: ハル シェーダーを設計する」を参照してください

  2. シェーダー コードをコンパイルする

  3. ID3D11Device::CreateHullShader を使用してハル シェーダー オブジェクトを作成します。

    HRESULT CreateHullShader(
      const void *pShaderBytecode,  
      SIZE_T BytecodeLength,  
      ID3D11ClassLinkage *pClassLinkage,  
      ID3D11HullShader **ppHullShader
    );
    
  4. ID3D11DeviceContext::HSSetShader を使用してパイプライン ステージを初期化します。

    void HSSetShader(
      ID3D11HullShader *pHullShader,  
      ID3D11ClassInstance *const *ppClassInstances,
      UINT NumClassInstances
    );
    

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

Direct3D 11 の使用方法

テセレーションの概要