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