Мне нужен быстрый совет.
Я хотел бы смоделировать клеточный автомат (из A Simple, Эффективный метод реалистичной анимации облаков) на графическом процессоре. Однако я ограничен шейдерами OpenGL ES 2.0 (в WebGL), которые не поддерживают никаких побитовых операций.
Поскольку каждая ячейка в этом клеточном автомате представляет логическое значение, идеальным было бы хранение 1 бита на ячейку. Итак, каков наиболее эффективный способ представления этих данных в форматах текстур OpenGL? Есть ли какие-то хитрости или я должен просто придерживаться простой текстуры RGBA?
EDIT: Вот что я думаю на данный момент...
На данный момент я думаю использовать либо обычный 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-битной ячейки.