HLSL 编译器错误?

问题描述 投票:0回答:2
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()
它可以编译。

directx hlsl direct3d
2个回答
1
投票

啊,我想这是有道理的。由于 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 中找到 fxc

要在 Visual Studio 中设置自定义构建步骤 请从 DirectX SDK 检查此示例,还要检查此站点

另请查看

msdn 上的这篇文章有关使用 fxc 的信息。


0
投票
这很奇怪: 我添加了这一行:

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); }
    
© www.soinside.com 2019 - 2024. All rights reserved.