以下是一个简单的顶点着色器实现
cbuffer cbPerObject
{
float4x4 gWorldViewProj;
};
void VS(float3 iPosL : POSITION,
float4 iColor : COLOR,
out float4 oPosH : SV_POSITION,
out float4 oColor : COLOR)
{
// Transform to homogeneous clip space.
oPosH = mul(float4(iPosL, 1.0f), gWorldViewProj);
// Just pass vertex color into the pixel shader.
oColor = iColor;
}
着色器是由HLSL(高阶着色语言)编写的,语法与C++非常相似。着色器通常编写在特效文件(.fx)中。
顶点着色器函数叫做VS。注意你可以见顶点着色器命名为任何有效的函数名。这个顶点着色器有四个参数,前两个为输入参数,后两个为输出参数。HLSL没有引用和指针,所以为了从一个函数中返回多个值,你需要使用结构体或者输出参数。
前两个输入参数构成顶点着色器的输入签名并对应着我们的自定义结构体中的数据成员。参数的语义“:POSITION”和“:COLOR”的作用是映射顶点结构体中的元素和顶点着色器中的参数,如下图所示。
输出参数同样附加了语义(“:S