一.简介
在DirectX 11 SDK中,支持三种基础着色器:顶点着色器(Vertex Shader) 像素着色器(Pixel Shader / Fragment Shader) 几何着色器(Geometry Shader)
顶点着色器通过顶点作为输入数据,只要将每个顶点缓存传入GPU就会执行
像素着色器使用一个像素作为输入数据
几何着色器使用基元(Primitive,点/线/面)作为输入
在Direct3D 11中,GPU必须包含一个正确的顶点和像素着色器,而几何着色器是可选的
二.顶点着色器
顶点着色器类似C语言的一个函数,通过顶点作为参数输入这个函数,并且返回编程后的顶点信息.
当程序通过顶点着色器传入顶点缓冲数据时,GPU就会迭代顶点缓冲数据,并为每个顶点执行一次着色器函数
顶点着色器最主要是用于坐标变换
flaot4 VS(float4 Pos : POSITION) : SV_POSITION { return Pos; }
三.像素着色器
一个三角形,包含了三个顶点,把三个顶点连载一起称为光栅化
像素着色器通过输入的像素颜色值,通过GPU计算颜色并返回渲染管线
float4 PS(float4 Pos : SV_POSITION) : SV_Target { return float4(1.0f, 1.0f, 0.0f, 1.0f); }
四.几何着色器
五.编译着色器
着色器编写的代码(HLSL)保存在一个文本文件中,可以通过Direct3D 11中的D3DX11CompileFronFile()进行编译
// Create the vertex shader if(FAILED(D3DX11CompileFromFile("Tutorial03.fx", NULL, NULL, "VS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL))) return FALSE; // Create the pixel shader if(FAILED(D3DX11CompileFromFile("Tutorial03.fx", NULL, NULL, "PS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL))) return FALSE;
六.绑定着色器
通过VSSetShader()和PSSetShader()两个方法将顶点着色器和像素着色器绑定到管线上