Поделиться через


Практическое руководство. Создание шейдера домена

Шейдер предметной области — это третий из трех этапов, которые работают вместе для реализации тесселяции. Входные данные для этапа доменного шейдера поступают из шейдера корпуса. В этом разделе показано, как создать шейдер домена.

Шейдер предметной области преобразует геометрию поверхности (созданную этапом тесселлатора с фиксированной функцией) с помощью точек управления выходными данными шейдера корпуса, выходных данных патч-константы шейдера корпуса и единого набора координат 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

Общие сведения о тесселяции