XNA中的基本像素着色器:两个纹理难以理解的bug

时间:2013-02-23 21:06:28

标签: xna shader

所以我是shaders的新手(使用XNA),而且我得到了一个我无法解释的超级奇怪的bug。请考虑以下像素着色器功能:

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)),但我真的很想知道是什么造成了它!

如果您需要有关我的代码的其他详细信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

这确实是一个奇怪的错误。

如果您使用ps 2.0或更高版本: 像这样注册你的样品:

sampler tex0: register(s1);
sampler tex1: register(s2);

对于较低像素着色器版本,请使用t1,t2,t3 ...