有没有办法在AGAL中进行按位移位操作?

时间:2012-01-18 20:07:58

标签: flash bit-manipulation gpu bit-shift agal

如果我将所有颜色编码为一个浮点值(RGB):

//Each Channels are from 0 - 255
red << 16 | green << 8 | blue;

如何在AGAL中检索这些颜色通道?似乎没有任何按位运算符。

2 个答案:

答案 0 :(得分:4)

你不应该这样做。在顶点流中使用BYTES_4输入,您的打包颜色将自动解压缩!纹理做同样的事情。无论如何,常量寄存器总是4个浮点数。您应该开始将颜色视为4个向量,在[0..1]范围内有4个值。

那就是说,记住一点移位只是一个除法和截断。 x&gt;&gt; 1与trunc(x / 2.0)相同。 AGAL没有截断而是小数部分,而trunc(x)与正x的x-frac(x)相同。

答案 1 :(得分:1)

这是一个描述的情况,我发现AGAL中的按位操作在从RGB颜色通道解包东西时很有用。它假设您已经知道了逐位运算的算术等价物: http://forum.alternativaplatform.com/posts/list/10343.page#78542

模量可以在AGAL中完成,其中%b = frc(a / b)* b。例如,由于位掩码&amp; 1,&amp; 3 oeprations分别只是2和4的模数运算(即&amp;(modDivisor-1)),你可以使用它们。向左/向右移动简单地乘以2除以2(2 ^ n)的幂,其中n是移位的位数。或者'|'在转移左边的数字之后,操作只是添加,当然..