Поместите свой код шейдера в файл .hlsli
, добавьте его в свой проект. Создайте для каждой комбинации шейдера и модели файл .hlsl
, который будет #include
вашего .hlsli
файла. Добавьте каждый .hlsl
в свой проект и настройте параметры файла соответствующим образом.
Файл 1 (установлен для исключения из сборки)
// MyShader.hlsli
PS_INPUT VertexShader( VS_INPUT input )
{
...
}
float4 PixelShader( PS_INPUT input)
{
...
}
Файл 2 (для построения в качестве вершинного шейдера, модель шейдера 9_3, точка входа VertexShader)
// MyShader_VS.hlsl
#include "MyShader.hlsl"
Файл 3 (устанавливается как пиксельный шейдер, модель шейдера 9_3, точка входа PixelShader)
// MyShader_PS.hlsl
#include "MyShader.hlsl"
Файл 4 (устанавливается для построения в качестве вершинного шейдера, модель шейдера 4.0, точка входа VertexShader)
// MyShader_VS4.hlsl
#include "MyShader.hlsl"
Файл 5 (для сборки в виде пиксельного шейдера, модель шейдера 4.0, точка входа PixelShader)
// MyShader_PS4.hlsl
#include "MyShader.hlsl"
Обратите внимание, что вы можете немного упростить жизнь, отредактировав файл vcxproj
вручную с помощью текстового редактора. Найдите Label="UserMacros"
, а затем в ItemDefinitionGroup
для каждой конфигурации сразу после этого добавьте раздел для <FXCompile>
, чтобы установить лучшие значения по умолчанию (вместо 4.0_level_9_1
):
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
...
</Link>
<ClCompile>
...
</ClCompile>
<FXCompile>
<ShaderModel>4.0_level_9_3</ShaderModel>
</FXCompile>
Если вы специально не ориентируетесь на системы Windows XP, использование устаревшего API Direc3D 9 не имеет большого смысла. Просто используйте DirectX 11 Feature Level 9.3+ для работы с видеокартами эпохи Shader Model 2.0 / 3.0. Главной ценностью Shader Model 3.0 была выборка вершинных текстур, которая так или иначе не была реализована одним из основных поставщиков. Профиль 4_0_level_9_3
уже создает шейдер как 2.0 и 4.0 в одном и том же BLOB-объекте.