HLSL 编译器错误?

发布于 2024-08-02 12:24:18 字数 354 浏览 5 评论 0原文

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    return mul(PosImageSpace,matInvViewProj);
}

这是我的像素着色器的一部分。为什么会出现编译错误? 我正在 ps_3_0 中编译它。 没有 mul() 它可以编译。

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    return mul(PosImageSpace,matInvViewProj);
}

That's a part of my pixelshader. Why is there a compiler error?
I'm compiling it in ps_3_0.
Without the mul() it compiles.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

极度宠爱 2024-08-09 12:24:18

啊,我想这是有道理的。由于 w 组件未初始化,因此 mul() 函数将失败。

为了避免这种情况,您可以按如下方式初始化向量:

float4 PosImageSpace = (float4)0;

我仍然建议您尝试在调试模式下使用 fxc 编译着色器,因为这样您可以获得更好的错误描述。您甚至可以设置自定义构建步骤,让您右键单击 .fx 文件并编译它,而无需编译整个解决方案/项目。

要在调试配置中使用 fxc 编译着色器:

fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx

您可以在 C:\Program Files\Microsoft DirectX SDK\Utilities\bin 中找到 fxc

要在 Visual Studio 中设置自定义构建步骤 从 DirectX SDK 检查此示例以及检查此网站

另请检查 msdn 上的这篇文章介绍了如何使用 fxc。

Ahh, I guess that makes sense. Since the w componenet is not initialized, the mul() function will fail.

To avoid it you could initialize your vector as follows:

float4 PosImageSpace = (float4)0;

I will still recommend you to try compiling your shader using fxc in debug mode, as you can get much better error descriptions that way. You can even set up a custom build step that lets you right click the .fx file and compile it without having to compile the entire solution/project.

To compile the shader using fxc in a debug configuration:

fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx

You can find fxc in C:\Program Files\Microsoft DirectX SDK\Utilities\bin

To set up a custom build step in Visual Studio check this sample from the DirectX SDK and also check this site

Also check this article on msdn about using fxc.

ま柒月 2024-08-09 12:24:18

这很奇怪:
我添加了这一行:

PosImageSpace.w = 0.0f;

现在它编译得很好。
现在看起来就是这样:

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    PosImageSpace.w = 0.0f;
    return mul(PosImageSpace,matInvViewProj);
}

That's weird:
I added this line:

PosImageSpace.w = 0.0f;

and now it compiles well.
That's how it looks now:

float4x4 matInvViewProj;

float4 GetPointPosition(float2 Tex0)
{
    float4 PosImageSpace;
    PosImageSpace.xy = float2(Tex0*2-1);
    PosImageSpace.z = tex2D(DepthTextureSampler,Tex0).r;
    PosImageSpace.w = 0.0f;
    return mul(PosImageSpace,matInvViewProj);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文