Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:hlsl:hlsl

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++的差别在于:

  • 参数只能按值传递
  • 不能递归
  • 所有函数都是强制inline
  • 参数有in/out描述符。in(默认)仅读入,实参的值将会复制到形参上。out仅输出,对形参修改的最终结果将会复制到实参上。inout即in和out的组合。

数组、结构体

和C++一样

变量修饰符

static
该着色器变量将不会暴露给C++应用层,需要在HLSL中自己初始化,否则使用默认初始化

extern
与static相反,该着色器变量将会暴露给C++应用层

uniform
该着色器变量允许在C++应用层被改变,但在着色器执行的过程中,其值始终保持不变(运行前可变,运行时不变)。着色器程序中的全局变量默认为既uniform又extern

const
和C++中的含义相同,它是一个常量,需要被初始化且不可以被修改

逻辑分支

if else continue break switch都支持
discard用于抛弃该像素

HLSL语义

Odt笔记(20221007)

/var/www/DokuWikiStick/dokuwiki/data/pages/程序/hlsl/hlsl.txt · Last modified: 2022/10/07 09:29 by zh