我在 IOS 上玩一些技巧来尝试构建一个 CPU-GPU-hybrid JPEG 编码器。从我对 CPU 的测试来看,我相信使用 GPU 来执行 DCT 和量化步骤很有意义,并且应该会显着提高性能(压缩大量 JPEG 是我应用程序的瓶颈)。有了变换反馈,这应该是可行的,因为我已经用它在 GPGPU 计算中获得了很好的结果。棘手的部分是如何有效地获取数据(RGBA 的无符号整数)。
如前所述,我曾经使用 openGL ES 3.0 进行 GPGPU 计算,所以我只有浮点纹理的经验,这是由
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA32F,WIDTH,HEIGHT,0,GL_RGBA,GL_GLOAT,data);
并通过
texelFetch()
但是现在我的输入数据存储为一个无符号字节数组(或 uint8),我每次都需要依次获取其中的 64 个。我想我可以将它们作为无符号字节的纹理获取,或者更有效地作为无符号整数的纹理获取,然后通过位移将它们分开。
我的问题是,我该怎么做呢?更具体地说,我应该如何设置glTexImage2D()的internalFormat、格式和类型?我尝试了很多组合,但所有组合在着色器中都只提供 0(我仔细检查了数据源,它们不是零)。