2012-09-14 24 views
2

是否可以確定採樣器是否實際上連接到紋理單元而不是簡單地取消設置?檢查是否設置了HLSL採樣器

sampler2D mySampler : register(S0); 
... 
if(mySampler == 0) 
    value = const_value; 
else 
    value = tex2D(mySampler, uv); 

這是爲了WPF效果(PS 3.0),如果這有什麼區別。

回答

1

Afaik沒有直接的方法來檢查這一點。在我的經驗中,未初始化的shaderconstants可能表現得很奇怪,例如一個系統將我的場景用未初始化的紋理繪製得很好,因爲tex2D只返回黑色。但在另一個系統上,整個場景看起來很糟糕,因爲它返回了其他值,然後是0.

因此,您必須從其他代碼處理這些情況。無論是與一個全局變量,它是由自己設定:

bool mySamplerisset; 
sampler2D mySampler : register(S0); 
... 
if (mySamplerisset) 
    value = tex2D(mySampler, uv); 
else 
    value = const_value; 

或者爲了最大性能,避免了分公司,預處理指令,讓您編譯着色器的兩個版本(一個時間的#define一次沒有)使用合適的:

#define SAMPLERISSET 
sampler2D mySampler : register(S0); 
... 
#if defined(SAMPLERISSET) 
    value = tex2D(mySampler, uv); 
#elseif 
    value = const_value; 
#endif 
+0

這就是我所設想的。謝謝。 – sharoz