HLSL 编译器错误?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
啊,我想这是有道理的。由于 w 组件未初始化,因此 mul() 函数将失败。
为了避免这种情况,您可以按如下方式初始化向量:
我仍然建议您尝试在调试模式下使用 fxc 编译着色器,因为这样您可以获得更好的错误描述。您甚至可以设置自定义构建步骤,让您右键单击 .fx 文件并编译它,而无需编译整个解决方案/项目。
要在调试配置中使用 fxc 编译着色器:
您可以在 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:
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:
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.
这很奇怪:
我添加了这一行:
现在它编译得很好。
现在看起来就是这样:
That's weird:
I added this line:
and now it compiles well.
That's how it looks now: