【发布时间】:2011-10-01 00:53:30
【问题描述】:
我最近开始接触 HLSL 编程,我很好奇我正在做的一些事情实际上是如何工作的。
例如,我在这里有一个非常简单的着色器,可以将任何青色像素着色为红色。
sampler2D mySampler;
float4 MyPixelShader(float2 texCoords : TEXCOORD0): COLOR
{
float4 Color;
Color = tex2D(mySampler, texCoords.xy);
if(Color.r == 0 && Color.g == 1.0 && Color.b == 1.0)
{
Color.r = 1.0;
Color.g = 0.5;
Color.b = 0.5;
}
return Color;
}
technique Simple
{
pass pass1
{
PixelShader = compile ps_2_0 MyPixelShader();
}
}
我知道tex2D 函数在指定位置抓取像素的颜色,但我不明白mySampler 甚至有任何数据。我根本没有设置它或传入纹理,但它神奇地包含了我的纹理数据。
此外,以下内容之间有什么区别:
COLOR 和 COLOR0
或者
TEXCOORD 和 TEXCOORD0
我可以进行一个合乎逻辑的猜测,并说COLOR0 是程序集中的一个注册表,它保存了 GPU 中当前使用的像素颜色。 (这可能是完全错误的,我只是陈述我的想法)
如果是这样,这是否意味着指定 float2 texCoords : TEXCOORD0 之类的内容会默认获取 GPU 正在处理的当前位置?
【问题讨论】: