如何在没有("<<"||">>")运算符的情况下有效地执行位移?

Lar*_*der 11 performance shader bit-manipulation opengl-es glsl

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

因此,我执行了许多*2和/ 2操作来模拟位移.

有谁知道更有效/更优雅的方式来做到这一点?有没有我不知道的伎俩?

谢谢!

Tho*_*ens 5

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


jac*_*nad 1

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

  • 纹理采样并不便宜。为什么不是 *2 和 *0.5? (6认同)