2013-02-23 59 views
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)也許)欺騙,但我真的寧願知道是什麼原因引起的!

如果您需要了解我的代碼的其他詳細信息,請告訴我。

+1

胡亂猜測:也許着色器編譯器(在這裏和那裏都有一些bug)正在優化's0',因爲它從未被使用過,錯誤地向下移動了's1'。 – 2013-02-24 07:04:20

+0

哦...也許。那是一些過分熱情的優化! – Orteil 2013-02-24 11:21:16

回答

0

這是一個奇怪的錯誤確實如此。

如果您使用PS 2.0或更高版本: 註冊您的樣品是這樣的:

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

別人更低的像素着色器的版本,使用T1,T2,T3 ...