网络安全检测|网络安全服务|网络安全扫描-香港墨客投资移动版

主页 > 业界资讯 > 网络渗透测试

DirectX11--HLSL语法入门(3)

HLSL也支持for, while和do while循环。和条件语句同样,它可能也会在基于运行时的条件值判断而产生动态分支,从而影响程序性能。若是循环次数较小,咱们可使用属性[unroll]来展开循环,代价是产生更多的汇编指令。用法以下:

times = 4; sum = times; [unroll] while (times--) { sum += times; }

若没有添加属性,默认使用的则为[loop]。

函数

函数的语法也和C/C++的十分相似,但它具备如下属性:

参数只能按值传递

不支持递归

只有内联函数(避免产生调用的跳转来减少开销)

此外,HLSL函数的形参能够指定输入/输出类别:

输入输出类别 描述
in   仅读入。实参的值将会复制到形参上。若未指定则默认为in  
out   仅输出。对形参修改的最终结果将会复制到实参上  
inout   即in和out的组合  

例如:

bool foo(in bool b, // 输入的bool类型参数 out int r1, // 输出的int类型参数 inout float r2) // 具有输入/输出的float类型参数 { if (b) { f1 = 5; } else { r1 = 1; } // 注意r1不能出如今等式的右边 // r2既能够被读入,也能够写出结果到外面的实参上 r2 = r2 * r2 * r2; return true; } 内置函数

HLSL提供了一些内置全局函数,它一般直接映射到指定的着色器汇编指令集。这里只列出一些比较经常使用的函数:

函数名 描述 最小支持着色器模型
abs   每一个份量求绝对值   1.1  
acos   求x份量的反余弦值   1.1  
all   测试x份量是否按位全为1   1.1  
any   测试x份量是否按位存在1   1.1  
asdouble   将值按位从新解释成double类型   5.0  
asfloat   将值按位从新解释成float类型   4.0  
asin   求x份量的反正弦值   1.1  
asint   将值按位从新解释成int类型   4.0  
asuint   将值按位从新解释成uint类型   4.0  
atan   求x份量的反正切值值   1.1  
atan2   求(x,y)份量的反正切值   1.1  
ceil   求不小于x份量的最小整数   1.1  
clamp   将x份量的值限定在[min, max]   1.1  
clip   丢弃当前像素,若是x份量的值小于0   1.1  
cos   求x份量的余弦值   1.1  
cosh   求x份量的双曲余弦值   1.1  
countbits   计算输入整数的位1个数(对每一个份量)   5.0  
cross   计算两个3D向量的叉乘   1.1  
ddx   估算屏幕空间中的偏导数\(\partial \mathbf{p} / \partial x\)。这使咱们能够肯定在屏幕空间的x轴方向上,相邻像素间某属性值\(\mathbf{p}\)的变化量   2.1  
ddy   估算屏幕空间中的偏导数\(\partial \mathbf{p} / \partial y\)。这使咱们能够肯定在屏幕空间的y轴方向上,相邻像素间某属性值\(\mathbf{p}\)的变化量   2.1  
degrees   将x份量从弧度转换为角度制   1.1  
determinant   返回方阵的行列式   1.1  
distance   返回两个点的距离值   1.1  
dot   返回两个向量的点乘   1.1  
dst   计算距离向量   5.0  
exp   计算e^x   1.1  
exp2   计算2^x   1.1  
floor   求不大于x份量的最大整数   1.1  
fmod   求x/y的余数   1.1  
frac   返回x份量的小数部分   1.1  
isfinite   返回x份量是否为有限的布尔值   1.1  
isinf   返回x份量是否为无穷大的布尔值   1.1  
isnan   返回x份量是否为nan的布尔值   1.1  
length   计算向量的长度   1.1  
lerp   求x + s(y - x)   1.1  
lit   返回一个光照系数向量(环境光亮度, 漫反射光亮度, 镜面光亮度, 1.0f)   1.1  
log   返回以e为底,x份量的对数   1.1  
log10   返回以10为底,x份量的对数   1.1  
log2   返回以2为底,x份量的天然对数   1.1  
mad   返回mvalue * avalue + bvalue   1.1  
max   返回x份量和y份量的最大值   1.1  
min   返回x份量和y份量的最小值   1.1  
modf   将值x分开成整数部分和小数部分   1.1  
mul   矩阵乘法运算   1  
normalize   计算规格化的向量   1.1  
pow   返回x^y   1.1  
radians   将x份量从角度值转换成弧度值   1  
rcp   对每一个份量求倒数   5  
reflect   返回反射向量   1  
refract   返回折射向量   1.1  
reversebits   对每一个份量进行位的倒置   5  
round   x份量进行四舍五入   1.1  
rsqrt   返回1/sqrt(x)   1.1  
saturate   对x份量限制在[0,1]范围   1  
sign   计算符号函数的值,x大于0为1,x小于0为-1,x等于0则为0   1.1  
sin   计算x的正弦   1.1  
sincos   返回x的正弦和余弦   1.1  
sinh   返回x的双曲正弦   1.1  
smoothstep   给定范围[min, max],映射到值[0, 1]。小于min的值取0,大于max的值取1   1.1  
step   返回(x >= a) ? 1 : 0   1.1  
tan   返回x的正切值   1.1  
tanh   返回x的双曲正切值   1.1  
transpose   返回矩阵m的转置   1  
trunc   去掉x的小数部分并返回   1  
语义

语义一般是附加在着色器输入/输出参数上的字符串。它在着色器程序的用途以下:

用于描述传递给着色器程序的变量参数的含义

容许着色器程序接受由渲染管线生成的特殊系统值

(责任编辑:admin)