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

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

Шейдер корпуса преобразует набор входных контрольных точек (из вершинного шейдера) в набор контрольных точек вывода. Количество входных и выходных точек может различаться по содержимому и количеству в зависимости от преобразования (типичное преобразование будет базовым).

Шейдер корпуса также выводит сведения о константе исправления, такие как факторы тесселяции, для шейдера предметной области и тесселлатора. Этап тесселлатора с фиксированной функцией использует факторы тесселяции, а также другие состояния, объявленные в шейдере корпуса, чтобы определить, сколько тесселяции.

Создание шейдера корпуса

  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

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