1
所以我新的着色器(使用XNA),和我收到我无法解释一个超级怪异的错误。考虑下面的像素着色器功能:基本像素着色器:难以理解的错误有两个纹理
float4 BasicTest(float2 coords: TEXCOORD0) : COLOR0
{
float4 src=tex2D(s0, coords);
float4 dst=tex2D(s1, coords);
float4 color=src;
if (coords.x>0.5) color=dst;
return color;
}
这显示纹理src
在屏幕的左侧,dst
在右侧,符合市场预期。不过,如果我不是简单地使用:
float4 BasicTest(float2 coords: TEXCOORD0) : COLOR0
{
float4 src=tex2D(s0, coords);
float4 dst=tex2D(s1, coords);
float4 color=dst;
return color;
}
我得到src
在整个屏幕上!
显然,着色器根本不会显示dst
,除非它在某种表达式中(color=src*0.5+dst*0.5
也可以正常工作)。我想我可以围绕这个问题(if (coords.x>=0)
也许)欺骗,但我真的宁愿知道是什么原因引起的!
如果您需要了解我的代码的其他详细信息,请告诉我。
胡乱猜测:也许着色器编译器(在这里和那里都有一些bug)正在优化's0',因为它从未被使用过,错误地向下移动了's1'。 – 2013-02-24 07:04:20
哦...也许。那是一些过分热情的优化! – Orteil 2013-02-24 11:21:16