3.2 像素着色器输入和输出 两样东西要输入到像素着色器:颜色和纹理坐标。两样都是以每像素为单位的。
注意:回想一下,顶点颜色是在图元的面(face of primitive)间进行插值的。
每个像素的纹理坐标就是简单的 (u , v) 坐标,它指定了像素正准备被映射到的纹理的纹理单元。Direct3D按每个像素来计算颜色和纹理坐标,从顶点颜色和顶点纹理坐标,在进入像素着色器之前。输入到像素着色器的颜色和纹理坐标的数量依赖于顶点着色器输出的颜色和纹理坐标的数量。例如,如果一个顶点着色器输出了两个颜色和三个纹理坐标,那么Direct3D将会按每个像素计算两个颜色和三个纹理坐标并且把它们把它们输入到像素着色器。我们使用带语意的语法(semantic syntax,译者注:参见译文第一章)映射这些输入颜色和纹理坐标进我们的着色器程序的变量里。使用前面的例子,我们可以这样写:
struct PS_INPUT
{
vector c0 : COLOR0;
vector c1 : COLOR1;
float2 t0 : TEXCOORD0;
float2 t1 : TEXCOORD1;
float2 t2 : TEXCOORD2;
};
对于输出,像素着色器输出一个单一的计算过的该像素的颜色值:
struct PS_OUTPUT
{
vector finalPixelColor : COLOR0;
};