11

我正在开发一个 OpenGL ES 2.0 着色器,并且我有紧密打包的数据,例如两个字节块内的三个 5 位无符号整数。要解压这些数据,我显然需要移位,但 OpenGL ES 着色语言不支持此功能(参见第 29 页http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf

因此,我执行了一些 *2 和 /2 操作来模拟位移。

有谁知道更有效/更优雅的方式来做到这一点?有什么我不知道的技巧吗?

谢谢!

4

4 回答 4

6

如果您正在执行多个班次,您可以使用电源操作。位移是 2 n的乘法或除法,我认为,幂运算比多次乘法或除法运算更具可读性,但我不确定性能。我想这是一个更优雅的解决方案,但可能不是更有效的解决方案。

于 2010-08-12T10:10:08.533 回答
3

根据您在做什么,这些线程可能会有一些用处:

GLSL:将法线包装在单个浮动 链接中

将多个浮点数打包成一个浮点值 链接

将浮点数打包到各种位深度目标(必须搜索 OpenGL.org 论坛,因为堆栈溢出不允许新用户使用超过 2 个链接)

于 2011-09-08T05:32:47.990 回答
1

我从未使用过 OpenGL,但如果您的环境支持,最有效的方法是为每种类型创建一个 16 位查找表。您需要在启动时填充表一次,但这应该非常快。您可以为每种类型或二维表使用单独的表,例如 theTable[65536][3]。

于 2010-08-12T10:21:22.860 回答
0

从你的问题我不确定,但你可以使用&(位和),对吧?那么写起来应该很快:

processing(variable & 11111); processing(variable & 1111100000); (...)

当然,那些位掩码应该保存为整数常量。

于 2010-12-01T18:31:54.170 回答