繁体   English   中英

HLSL将着色器拆分为多个文件

[英]HLSL splitting shader into multiple files

这可能是一个愚蠢的问题,但是我一直在寻找答案很长一段时间,但找不到针对DirectX 11游戏引擎的答案。 例如,我有两个像素着色器AB ,我不想重复我的代码进行伽玛校正。 所以我的想法是将其移动到单独的hlsl文件中并包括它们,但是我不知道该怎么做。 当我在Google时,我只能找到有关.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);
}

当我尝试编译它时,comipler抛出错误“错误 3501'main ':找不到入口点” 的确如此,因为我在此文件中没有main方法,但是我不需要一个。 如何在Visual Studio 2017中解决此问题?

默认情况下,您的项目设置指定应使用HLSL编译器来编译HLSL文件。 这意味着在构建过程中,VS将所有HLSL文件(包括包含文件)排队,以供编译器使用默认入口点main进行编译。 显然这是不希望的-包含文件无法真正编译。

要解决此问题,请在“解决方案资源管理器”中右键单击您的HLSL包含文件,单击“属性”,然后将“项目类型”字段从“ HLSL编译器”更改为“不参与构建”。 这将阻止Visual Studio编译您的包含文件。

将来,请为您的HLSL包含文件提供'.hlsli'扩展名。 Visual Studio将使用HLSL编辑器打开这些文件,但会自动将其标识为未参与构建过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM