我正在开发一个 OpenGL ES 2.0 着色器,并且我有紧密打包的数据,例如两个字节块内的三个 5 位无符号整数。要解压这些数据,我显然需要移位,但 OpenGL ES 着色语言不支持此功能(参见第 29 页http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf)
因此,我执行了一些 *2 和 /2 操作来模拟位移。
有谁知道更有效/更优雅的方式来做到这一点?有什么我不知道的技巧吗?
谢谢!
我正在开发一个 OpenGL ES 2.0 着色器,并且我有紧密打包的数据,例如两个字节块内的三个 5 位无符号整数。要解压这些数据,我显然需要移位,但 OpenGL ES 着色语言不支持此功能(参见第 29 页http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf)
因此,我执行了一些 *2 和 /2 操作来模拟位移。
有谁知道更有效/更优雅的方式来做到这一点?有什么我不知道的技巧吗?
谢谢!
如果您正在执行多个班次,您可以使用电源操作。位移是 2 n的乘法或除法,我认为,幂运算比多次乘法或除法运算更具可读性,但我不确定性能。我想这是一个更优雅的解决方案,但可能不是更有效的解决方案。
我从未使用过 OpenGL,但如果您的环境支持,最有效的方法是为每种类型创建一个 16 位查找表。您需要在启动时填充表一次,但这应该非常快。您可以为每种类型或二维表使用单独的表,例如 theTable[65536][3]。
从你的问题我不确定,但你可以使用&
(位和),对吧?那么写起来应该很快:
processing(variable & 11111); processing(variable & 1111100000); (...)
当然,那些位掩码应该保存为整数常量。