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