着色器(shader)入门
摘自《DirectX9.0 3D 游戏开发编程基础》Frank D. Luna
1. 顶点着色器和像素着色器是我们自行编写的一些规模较小的定制程序,这些定制程序可取代固定功能流水线中某一功能模块,并可在图形卡的GPU中执行。
2. 在DirectX8.x系列版本中,着色器程序是用底层的汇编语言来编写。DirectX9提供了一种专门用来编写着色器程序的高级着色语言——HLSL。
3. 可以将着色器代码保存为ASCII文本文件,然后使用D3DXCompileShaderFromFile进行编译。
4. 输入和输出结构:对于顶点着色器,以下结构分别定义了该着色器的输入和输出的顶点数据(输入输出顶点的结构)。
POSITION、COLOR为语义,: POSITION说明position用于描述输入顶点的位置信息。: COLOR说明diffuse用于描述输出顶点的颜色信息。
从底层观点看,语义语法建立了着色器中的变量与硬件寄存器之间的关系。
1 struct VS_INPUT 2 { 3 vector position : POSITION; 4 }; 5 struct VS_OUTPUT 6 { 7 vector position : POSITION; 8 vector diffuse : COLOR; 9 };
5. 着色器的入口函数,函数名称可以自定义。
6. 在应用程序中访问着色器中的全局变量。
// 获取常量句柄 D3DXHANDLE ID3DXConstantTable::GetConstantByName( D3DXHANDLE hConstant, LPCSTR pName ); // 设置常量 HRESULT ID3DXConstantTable::SetXXX( LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, XXX value );
7. 标量类型
bool 布尔值
int 32位有符号整数
half 16位浮点数
float 32位浮点数
double 64位浮点数
8. 向量类型
vector 等价于float4
vector<T, n>
float2、float3、float4
9. 矩阵类型
matrix 等价于float4x4
matrix<T, m, n>
floatmxn m,n必须介于1-4之间