阅读SSBO的rgba8

时间:2016-07-07 13:42:49

标签: opengl opengl-es glsl

我需要传递~1 Mb的1D图像数据(rgba8)来计算着色器。我尝试使用2D纹理,一切都很好。

现在我对如何使用SSBO实现这一点感兴趣。 我可以使用glBufferData将任何数据作为void *传递。 但是如何将着色器中SSBO中的像素读取为vec4

1 个答案:

答案 0 :(得分:2)

你不能。您必须手动解压缩数据。

您必须将数据的像素读为uint(这是一个32位无符号整数)。然后,您必须使用位操作从该数据中解压缩4个8位组件。然后将其标准化为4个浮点数。

幸运的是,GLSL具有unpackUnorm4x8功能,正是这样做的。它需要uint并吐出vec4