Практическое руководство. Создание шейдера корпуса
Шейдер корпуса — это первый из трех этапов, которые совместно работают для реализации тесселяции. Выходные данные шейдера корпуса управляют этапом тесселлатора, а также этапом шейдера предметной области. В этом разделе показано, как создать шейдер корпуса.
Шейдер корпуса преобразует набор входных контрольных точек (из вершинного шейдера) в набор контрольных точек вывода. Количество входных и выходных точек может различаться по содержимому и количеству в зависимости от преобразования (типичное преобразование будет базовым).
Шейдер корпуса также выводит сведения о константе исправления, такие как факторы тесселяции, для шейдера предметной области и тесселлатора. Этап тесселлатора с фиксированной функцией использует факторы тесселяции, а также другие состояния, объявленные в шейдере корпуса, чтобы определить, сколько тесселяции.
Создание шейдера корпуса
Разработка шейдера корпуса. См . статью Практическое руководство. Проектирование шейдера корпуса.
Компиляция кода шейдера
Создайте объект шейдера с помощью ID3D11Device::CreateHullShader.
HRESULT CreateHullShader( const void *pShaderBytecode, SIZE_T BytecodeLength, ID3D11ClassLinkage *pClassLinkage, ID3D11HullShader **ppHullShader );
Инициализируйте этап конвейера с помощью ID3D11DeviceContext::HSSetShader.
void HSSetShader( ID3D11HullShader *pHullShader, ID3D11ClassInstance *const *ppClassInstances, UINT NumClassInstances );
Шейдер предметной области должен быть привязан к конвейеру, если шейдер корпуса привязан. В частности, нельзя напрямую передавать контрольные точки шейдера корпуса с помощью геометрического шейдера.
Связанные темы