检查是否设置了HLSL采样器

时间:2012-09-14 05:12:24

标签: hlsl

是否可以确定采样器是否实际连接到纹理单元而不是简单地取消设置?

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

这是针对WPF效果(PS 3.0),如果这有任何区别。

1 个答案:

答案 0 :(得分:1)

Afaik没有直接检查方法。根据我的经验,未初始化的着色器可能表现得非常奇怪,例如:一个系统用未初始化的纹理绘制了我的场景,因为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