(怎么样)可以按顺序将vec4(32位)按位复制到浮点数(32位)?
答案 0 :(得分:2)
vec4 通常是 128位(4x32位浮点数),因此将其打包到单个浮点数中是有问题的。
也许您的意思是将任意32位值打包到浮点数中?您可以使用内置intBitsToFloat
以按位方式将int
中的32位复制到float
。但是,生成的浮点值可能是某种类型的Nan,在这种情况下,使用floatBitsToInt
将其转换回int可能不会给您相同的结果。
修改强>
从您的评论中,您似乎会在着色器中将数字格式的缓冲区中的像素格式混淆。每当您从缓冲区或纹理中读取像素时,它将从像素格式转换为数字格式,具体取决于 您读取像素的方式。如果您对绑定到RGBA纹理的某种texture
进行了正常的sampler
查找,那么该纹理的每个通道都将被解压缩到该范围内的32位浮点数中0.0..1.0。您可以使用packUnorm4x8
将其轻松打包回32位uint,然后将该32位uint转换为带intBitsToFloat
的浮点数(在第二步可能会出现上述问题) )。或者你可以通过在设置采样器时使用适当的纹理元素类型将其作为32位int或float首先读取(这将影响插值,但你可能根本不想要插值,具体取决于关于你想做什么)。