GLSL 内置函数
packHalf2x16()
将两个浮点数转换成半精度后打包。
示例版本:GLSL ES 3.00 / WebGL 2示例阶段:片段
函数签名
uint packHalf2x16(vec2 v)参数
- v
- 需要打包的分量
返回值
一个 uint,低 16 位保存 v.x 的半精度浮点编码,高 16 位保存 v.y。
在线示例
修改右侧代码,左侧预览会实时更新。
packHalf2x16 做什么
将两个浮点数转换成半精度后打包。
看懂预览
packHalf2x16(vec2(x,y)) 再解包后,在当前尺度下仍近似为直线。把 x 换成 x*0.5,解码后线条的斜率会减半。
核心调用
unpackHalf2x16(packHalf2x16(vec2(x,y))).x;
半精度会丢失尾数精度,极大数可能溢出。
修改实验
把打包输入 vec2(x,y) 改为 vec2(0.1,y)。解码后的 x 分量会变成接近 0.1 的常数,半精度舍入的小偏差在普通预览尺度下难以分辨。