我需要传递~1 Mb的1D图像数据(rgba8)来计算着色器。我尝试使用2D纹理,一切都很好。
现在我对如何使用SSBO实现这一点感兴趣。
我可以使用glBufferData
将任何数据作为void *传递。
但是如何将着色器中SSBO中的像素读取为vec4
?
答案 0 :(得分:2)
你不能。您必须手动解压缩数据。
您必须将数据的像素读为uint
(这是一个32位无符号整数)。然后,您必须使用位操作从该数据中解压缩4个8位组件。然后将其标准化为4个浮点数。
幸运的是,GLSL具有unpackUnorm4x8
功能,正是这样做的。它需要uint
并吐出vec4
。