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 的常数,半精度舍入的小偏差在普通预览尺度下难以分辨。

规范

GLSL ES 3.00 built-in functions, chapter 8

相关函数