Мне нужен быстрый совет.
Я бы хотел смоделировать клеточный автомат (из Простой, эффективный метод реалистичной анимации облаков ) на графическом процессоре.Однако я ограничен шейдерами OpenGL ES 2.0 (в WebGL), которые не поддерживают побитовые операции.
Поскольку каждая ячейка в этом клеточном автомате представляет логическое значение, хранение 1 бита на ячейку было бы идеальным,Так какой же самый эффективный способ представления этих данных в форматах текстур OpenGL?Есть какие-нибудь хитрости или я должен просто придерживаться прямой RGBA-текстуры?
РЕДАКТИРОВАТЬ: Вот мои мысли до сих пор ...
В данный момент я 'Я думаю о том, чтобы использовать либо простой GL_RGBA8, GL_RGBA4 или GL_RGB5_A1:
Возможно, я мог бы выбрать GL_RGBA8 и попытаться извлечь исходные биты, используя операции с плавающей запятой.Например, x*255.0
дает приблизительное целочисленное значение.Тем не менее, извлечение отдельных битов немного затруднительно (т.е. деление на 2 и округление пару раз).Также я опасаюсь проблем с точностью.
Если я выберу GL_RGBA4, я мог бы хранить 1,0 или 0,0 для каждого компонента, но тогда я, вероятно, мог бы также попробовать тот же трюк, что и раньше с GL_RGBA8.В данном случае это всего лишь x*15.0
.Не уверен, будет ли это быстрее или не будет видно, так как для извлечения битов должно быть меньше операций, но меньше информации на чтение текстуры.
Используя GL_RGB5_A1, я мог бы попытаться выяснить, могу ли я упаковатьмои ячейки вместе с некоторой дополнительной информацией, такой как цвет на воксел, где альфа-канал хранит состояние ячейки в 1 бит.