如何:创建外壳着色器

外壳着色器是协同工作以实现 分割的三个阶段中的第一个阶段。 外壳着色器输出驱动细化器阶段以及域着色器阶段。 本主题演示如何创建外壳着色器。

外壳着色器将一组输入控制点 (从顶点着色器) 转换为一组输出控制点。 输入和输出点的数量在内容和数量上可能会有所不同,具体取决于转换 (典型的转换将是) 的基础转换。

外壳着色器还会为域着色器和细化器输出修补常量信息,例如细化因子。 固定函数细化器阶段使用细化因子以及在外壳着色器中声明的其他状态来确定细化量。

创建外壳着色器

  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

细化概述