Есть ли способ выполнять операции побитового сдвига в AGAL? - PullRequest
1 голос
/ 19 января 2012

Если я закодирую все цвета в одно значение с плавающей точкой (RGB) как:

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

Как я могу получить эти цветные каналы обратно в AGAL? Похоже, что нет побитовых операторов.

Ответы [ 2 ]

4 голосов
/ 01 февраля 2012

Вам не нужно этого делать.Используйте ввод BYTES_4 в потоке вершин, и ваш упакованный цвет будет распакован для вас автоматически!Текстуры делают то же самое.Постоянные регистры в любом случае 4 числа с плавающей запятой.Вы должны начать думать о цветах как о 4 векторах с 4 значениями в диапазоне [0..1].

Тем не менее, помните, что сдвиг битов - это просто деление и усечение.x >> 1 - это то же самое, что trunc (x / 2.0).У AGAL нет усечения, но есть дробная часть, и trunc (x) такой же, как x-frac (x) для положительного x.

1 голос
/ 21 ноября 2012

Вот описанный случай, когда я нашел побитовые операции в AGAL, ​​полезные при распаковке материала из цветовых каналов RGB. Предполагается, что вы уже знаете арифметические эквиваленты побитовых операций: http://forum.alternativaplatform.com/posts/list/10343.page#78542

Модуль можно выполнить в AGAL, ​​где a% b = frc (a / b) * b. Так как, например, операции битовой маски & 1, & 3 являются просто операциями модуля для 2 и 4 соответственно (т.е.. & (ModDivisor-1)), вы можете использовать их. Сдвиг влево / вправо - это просто умножение / деление на степень 2 (2 ^ n), где n - это число сдвинутых битов. Или '|' Операции - это просто сложение, после смещения цифр влево, конечно ..

...