我正在开发一个OpenGL ES 2.0着色器,我有紧密的数据,例如两个字节块内的三个5位无符号整数。要解压缩这些数据,我显然需要进行位移,但OpenGL ES着色语言不支持此功能(参见第29页http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf)
因此,我执行了许多* 2和/ 2操作来模拟位移。
有谁知道更有效/更优雅的方式来做到这一点?有没有我不知道的技巧?
谢谢!
答案 0 :(得分:5)
如果您正在执行多班制,则可以使用电源操作。比特移位是乘法或除以2 n ,并且功率运算比多次乘法或除法运算更具可读性,我认为,但我不确定性能。我想这是一个更优雅的解决方案,但可能效率不高。
答案 1 :(得分:3)
根据您的操作,这些线程可能有一些用处:
GLSL:在一个浮点数中打包法线 link
将多个浮点数打包为单个浮点值 link
将浮动包装到各种位深度目标 (必须搜索OpenGL.org论坛,因为Stack溢出不允许新用户使用2个以上的链接)
答案 2 :(得分:1)
我从未使用OpenGL,但如果您的环境支持,最有效的方法是每种类型的16位查找表。您需要在启动时填充表一次,但这应该非常快。您可以为每种类型或二维表使用单独的表,例如表[65536] [3]。
答案 3 :(得分:1)
从你的问题我不确定,但你可以使用&
(位和),对吧?那么写起来应该很快:
processing(variable & 11111); processing(variable & 1111100000); (...)
当然,这些位掩码应保存为整数常量。