Table of Contents

HLSL

适用于DirectX11DirectX12


HLSL基础语法

数据

标量数据包括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用于抛弃该像素

HLSL语义

Odt笔记(20221007)