Мне нужен быстрый совет.Формат текстуры для клеточных автоматов в OpenGL ES 2.0
Я хотел бы моделировать клеточные автоматы (от A Simple, Efficient Method for Realistic Animation of Clouds) на графическом процессоре. Однако я ограничен шейдерами 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 бит.
Это звучит как умная идея, спасибо. Я попробую! –