首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HLSL分色器分成多个文件

HLSL分色器分成多个文件
EN

Stack Overflow用户
提问于 2019-08-20 17:28:22
回答 1查看 1.4K关注 0票数 0

这可能是一个愚蠢的问题,但我寻找了很长时间的答案,但我找不到我的DirectX 11游戏引擎。例如,我有两个像素着色器,A,B,我不想重复我的伽马校正代码。因此,我的想法是将它移到单独的hlsl文件中,并包括它们,但我不知道如何做到这一点。当我在谷歌时,我只能找到关于.fx工作流的信息,但我没有使用它。当我试图做一个新的着色器,我总是会有一个错误,我的着色器需要有主要的功能。我该怎么做?

编辑:正如VTT所建议的,我将提供示例。假设我的uber_pixel_shader.hlsl是这样的:

代码语言:javascript
复制
#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的文件中包含它。该文件如下所示:

代码语言:javascript
复制
float3 gammaCorrect(float3 inputColor)
{
    return pow(inputColor, 1.0f / 2.2f);
}

当我试图编译它时,Comi普勒抛出了一个错误“3501 'main':entrypoint”。这是真的,因为我在这个文件中没有主方法,但我不需要一个。如何在2017中解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-22 20:40:08

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

要解决这个问题,右键单击“解决方案资源管理器”中的HLSL包含文件,单击“Properties”,并将“Item Type”字段从"HLSL编译器“更改为”不参与构建“。这将阻止Visual编译包含文件。

将来,为您的HLSL文件提供'.hlsli‘扩展。Visual将使用HLSL编辑器打开这些文件,但会自动识别它们不参与构建过程。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57578784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档