У меня есть установка на основе https://github.com/AndrewJDR/glslvalidatevs для автоматической компиляции любого файла шейдера GLSL, присутствующего в моем проекте Visual Studio 2019.
Вот содержание моей версии GLSLValidateVS.props
, так как она отличается от той, что в хранилище выше:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)GLSLValidateTargets.props" />
<AvailableItemName Include="GLSLValidate">
<Targets>GLSLValidate</Targets>
</AvailableItemName>
</ItemGroup>
<PropertyGroup Label="UserMacros">
<GLSLValidatorExe>%VULKAN_SDK%\Bin\glslangValidator.exe</GLSLValidatorExe>
</PropertyGroup>
<ItemGroup>
<BuildMacro Include="GLSLValidatorExe">
<Value>$(GLSLValidatorExe)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
<Target Name="GLSLValidate" Condition="'@(GLSLValidate)' != ''" AfterTargets="Compile" BeforeTargets="Link">
<Message Text="Building GLSL Shaders..." Importance="High" />
<ItemGroup>
<GLSLValidate>
<Message>%(Filename)%(Extension)</Message>
<Command>if not exist "$(SolutionDir)assets\shaders\" mkdir $(SolutionDir)assets\shaders\
$(GLSLValidatorExe) -V "%(GLSLValidate.FullPath)" -o $(SolutionDir)assets\shaders\%(Filename).spv</Command>
<Outputs>$(SolutionDir)assets\shaders\%(Filename).spv</Outputs>
</GLSLValidate>
</ItemGroup>
<CustomBuild
Sources="@(GLSLValidate)"
MinimalRebuildFromTracking="true"
TrackerLogDirectory="$(TLogLocation)"
ErrorListRegex="(?'CATEGORY'ERROR|WARNING): (?'FILENAME'.+):(?'LINE'\d+): (?'TEXT'.*)">
</CustomBuild>
</Target>
</Project>
Я сейчас пытаюсь указать дополнительные зависимости, так как мои шейдеры GLSL включают в себя некоторые *.h
файлы, и я хотел бы, чтобы шейдеры GLSL были перестроены, если какой-либо из заголовочных файлов был изменен.
Я пытался добавить
<AdditionalDependencies>$(SolutionDir)src\shaders\my_header_file.h</AdditionalDependencies>
в блок, но это не сработало. Я также попытался добавить
<AdditionalInputs>$(SolutionDir)src\shaders\my_header_file.h</AdditionalInputs>
но это тоже не сработало.
Обратите внимание, что в обоих случаях VS не жалуется на неизвестные элементы, поэтому, похоже, распознает их, но они не действуют.