Какой формат текстур OpenGL ES я должен использовать для лучшего динамического диапазона на iPad? - PullRequest
2 голосов
/ 18 апреля 2011

Я занимаюсь разработкой программного обеспечения, которое использует карту текстуры для хранения геометрии.Использование GL_RGB для внутреннего формата дает много псевдонимов, я полагаю, потому что текстура сжимается до GL_RGB4 по умолчанию.

На рабочем столе я могу использовать GL_RGB16 или GL_RGB32F (и т. Д.), Чтобы установить внутренний формат, но в OpenGL ES 2.0, похоже, нет ни одного из этих форматов.Есть ли альтернатива или расширение, доступное под IOS, которое я могу использовать?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Согласно Apple (и моему собственному опыту) GL_RGB и GL_UNSIGNED_BYTE используют хранилище 8: 8: 8.Чтобы снизить точность цветопередачи, вам нужно указать тип GL_UNSIGNED_SHORT_5_6_5 или один из других типов, который объединяет несколько каналов в одно короткое.расширения GL_OES_texture_float и GL_OES_texture_half_float .Вы ограничены фильтрацией GL_NEAREST, но я ожидаю, что это то, что вы используете в любом случае, поскольку это упражнение по хранению данных, и вы можете загружать исходные каналы с 16 или 32 битами на пиксель.Пример использования, извлеченный непосредственно из проекта (который загружает 1-канальное / пиксельное изображение, но вы поняли идею):

GLfloat *integralImage;

/* <lots of stuff to allocate storage and fill integralImage here> */

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_LUMINANCE,
    256, 256, 0,
    GL_LUMINANCE, GL_FLOAT, 
    integralImage);
1 голос
/ 19 апреля 2011

Итак, после небольшого исследования, вы можете получить плавающие текстуры (как упомянуто @Tommy).Чего вы не можете сделать, так это получить доступ к ним из вершинного шейдера под IOS, что делает невозможным их использование для хранения геометрии.

...