Повторное использование кода HLSL
Чтобы указать компилятору включить существующий код High-Level Shader Language (HLSL) в другой файл или раздел, используйте следующие методы:
- Включить файл HLSL в другой, используя стандартную директиву HLSL
#include. - Дублирование HLSL в нескольких местах с помощью макросов
HLSLINCLUDEиENDHLSL. - Примените директиву
#pragmaк нескольким файлам HLSL, используя директиву Unity#include_with_pragmas.
Включение файла HLSL в другой файл
Unity поддерживает стандартную директиву HLSL #include. Дополнительные сведения см. в разделе директива include в документации Microsoft HLSL.
Дублирование HLSL в нескольких местах
Чтобы дублировать код HLSL во всех разделах вашего кода, например, чтобы добавить одни и те же переменные в несколько блоков Pass, оберните код, который вы хотите повторно использовать, в макросы HLSLINCLUDE и ENDHLSL. Unity добавляет код вверху каждого блока HLSLPROGRAM.
Например:
Shader "Examples/ExampleShader"
{
HLSLINCLUDE
// Add HLSL code you want to share across the file.
ENDHLSL
SubShader
{
Pass
{
...
HLSLPROGRAM
// Unity pastes the contents of the HLSLINCLUDE block here.
ENDHLSL
}
Pass
{
...
HLSLPROGRAM
// Unity pastes the contents of the HLSLINCLUDE block here.
ENDHLSL
}
}
}
Применение директивы pragma к нескольким файлам
Чтобы применить директиву #pragma к нескольким файлам шейдеров, используйте директиву Unity #include_with_pragmas.
Этот метод можно использовать для добавления аргумента в несколько файлов, но для включения и отключения аргументов обновлением только одного файла. Например, можно создать и переключить ключевое слово debugging, которое включает и отключает код условной отладки в нескольких шейдерах.
- Добавьте директиву
#pragmaв отдельный файл шейдера. Например, создайте однострочный файл HLSL с прагмой, которая включает символы отладки шейдера:
#pragma enable_d3d11_debug_symbols
- В каждом шейдере, в который вы хотите включить директиву, добавьте директиву
#include_with_pragmasдля включения файла. Например:
#include_with_pragmas "path-to-include-file"
Примечание: Если файл шейдера использует #include для импорта файла, содержащего директиву #include_with_pragmas, Unity игнорирует директивы #pragma в файле, содержащем ссылки на директиву #include_with_pragmas. Unity предупредит вас об этом в консоли.