Visual studio 2017 如何在visual studio中多次编译hlsl着色器?
我已经将HLSL着色器添加到我的Visual Studio项目中,它们将作为构建过程的一部分自动编译到cso文件中。我面临的问题是,我需要使用不同的着色器模型多次编译它们,因为“/4_0_level_9_3”适用于DirectX 11,但不适用于DirectX 9,而“/3_0”仅适用于DirectX 9,而不适用于DirectX 11 将相同的文件多次添加到VisualStudio项目不起作用,我希望避免复制HLSL源文件,因为这会增加维护工作和潜在的错误原因。我也不能在VisualStudio中创建单独的目标/配置来实现这一点,因为我需要在可执行文件中支持两个DirectX版本(可在运行时切换)Visual studio 2017 如何在visual studio中多次编译hlsl着色器?,visual-studio-2017,directx-11,hlsl,directx-9,Visual Studio 2017,Directx 11,Hlsl,Directx 9,我已经将HLSL着色器添加到我的Visual Studio项目中,它们将作为构建过程的一部分自动编译到cso文件中。我面临的问题是,我需要使用不同的着色器模型多次编译它们,因为“/4_0_level_9_3”适用于DirectX 11,但不适用于DirectX 9,而“/3_0”仅适用于DirectX 9,而不适用于DirectX 11 将相同的文件多次添加到VisualStudio项目不起作用,我希望避免复制HLSL源文件,因为这会增加维护工作和潜在的错误原因。我也不能在VisualStudi
有没有办法在Visual Studio中为单个HLSL文件指定多个编译(不同的着色器模型和不同的输出文件)?将着色器代码放入
文件中。hlsli
文件,将其添加到项目中。为每个着色器和模型组合创建一个.hlsl
文件,该文件包含.hlsli
文件的#include
。将每个.hlsl
添加到项目中,并适当设置文件设置
文件1(设置为从生成中排除)
文件2(设置为生成为顶点着色器,着色器模型9_3,入口点VertexShader)
文件3(设置为生成为像素着色器、着色器模型9_3、入口点像素着色器)
文件4(设置为生成为顶点着色器、着色器模型4.0、入口点VertexShader)
文件5(设置为生成为像素着色器、着色器模型4.0、入口点像素着色器)
请注意,通过使用文本编辑器手动编辑vcxproj
文件,您可以让生活变得更轻松。查找Label=“UserMacros”
,然后在项目定义组中为每个配置添加一个
部分,以设置更好的默认值(而不是4.0\u level\u 9\u 1
):
...
...
4.0级9级3级
除非您专门针对Windows XP系统,否则使用传统的Direc3D 9 API没有多大价值。只需使用DirectX 11功能级别9.3+以着色器模型2.0/3.0时代的视频卡为目标。Shader Model 3.0的主要价值是顶点纹理获取,但无论如何,一家主要供应商从未实现过该功能。4\u 0\u level\u 9\u 3
配置文件已在同一个blob中将着色器构建为2.0和4.0
// MyShader.hlsli
PS_INPUT VertexShader( VS_INPUT input )
{
...
}
float4 PixelShader( PS_INPUT input)
{
...
}
// MyShader_VS.hlsl
#include "MyShader.hlsl"
// MyShader_PS.hlsl
#include "MyShader.hlsl"
// MyShader_VS4.hlsl
#include "MyShader.hlsl"
// MyShader_PS4.hlsl
#include "MyShader.hlsl"
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Link>
...
</Link>
<ClCompile>
...
</ClCompile>
<FXCompile>
<ShaderModel>4.0_level_9_3</ShaderModel>
</FXCompile>