这可能是一个愚蠢的问题,但我寻找了很长时间的答案,但我找不到我的DirectX 11游戏引擎。例如,我有两个像素着色器,A,和B,我不想重复我的伽马校正代码。因此,我的想法是将它移到单独的hlsl文件中,并包括它们,但我不知道如何做到这一点。当我在谷歌时,我只能找到关于.fx工作流的信息,但我没有使用它。当我试图做一个新的着色器,我总是会有一个错误,我的着色器需要有主要的功能。我该怎么做?
编辑:正如VTT所建议的,我将提供示例。假设我的uber_pixel_shader.hlsl是这样的:
#include "gamma_utils_shader.hlsl"
...
float4 main(PS_INPUT input) : SV_TARGET
{
...
finalColor = gammaCorrect(finalColor);
return float4(finalColor, Alpha);
}在HLSL中没有方法gammaCorrect,所以我想从另一个名为gamma_utils_shader.hlsl的文件中包含它。该文件如下所示:
float3 gammaCorrect(float3 inputColor)
{
return pow(inputColor, 1.0f / 2.2f);
}当我试图编译它时,Comi普勒抛出了一个错误“3501 'main':entrypoint”。这是真的,因为我在这个文件中没有主方法,但我不需要一个。如何在2017中解决这个问题?
发布于 2019-08-22 20:40:08
默认情况下,项目设置指定应使用HLSL编译器编译HLSL文件。这意味着在构建过程中,VS将对所有HLSL文件(包括包含文件)进行排队,供编译器使用默认的main入口点进行编译。显然,这是不需要的-一个包含的文件不能被真正编译。
要解决这个问题,右键单击“解决方案资源管理器”中的HLSL包含文件,单击“Properties”,并将“Item Type”字段从"HLSL编译器“更改为”不参与构建“。这将阻止Visual编译包含文件。
将来,为您的HLSL文件提供'.hlsli‘扩展。Visual将使用HLSL编辑器打开这些文件,但会自动识别它们不参与构建过程。
https://stackoverflow.com/questions/57578784
复制相似问题