标量数据包括bool,int(32),uint(32),fixed,half(16),float(32),double(64)。
后面几种都是浮点数,精度依次提高。
向量类型可以通过标量类型后面跟一个数字来表示,例如float3,数字的范围是[2,4]。另一种表示向量的方式是:
vector<float, 4> some_vec;
访问数据可以使用rgba/xyzw,也可使用下标。
矩阵类型类似float3x3这样,数字的范围也是[2,4],用模板来表示是:
matrix<float, 2, 2> some_mat;
访问数据的形式是some_mat._m00~some_mat._m33,使用下标访问也是可以的。
和C++的差别在于:
和C++一样
static
该着色器变量将不会暴露给C++应用层,需要在HLSL中自己初始化,否则使用默认初始化
extern
与static相反,该着色器变量将会暴露给C++应用层
uniform
该着色器变量允许在C++应用层被改变,但在着色器执行的过程中,其值始终保持不变(运行前可变,运行时不变)。着色器程序中的全局变量默认为既uniform又extern
const
和C++中的含义相同,它是一个常量,需要被初始化且不可以被修改
if else continue break switch都支持
discard用于抛弃该像素