Палитра текстур с 8-битным альфа-каналом в OpenGL ES - PullRequest
1 голос
/ 11 января 2009

Могу ли я получить палитровые текстуры с палитрой RGB и 8-битным альфа-каналом в OpenGL ES? (Я нацеливаюсь на реализацию iPhone OpenGL ES.) После просмотра документации OpenGL мне кажется, что в палитре есть поддержка текстур с палитрой, то есть альфа. текстура содержит 8-битные индексы в палитре с 256 цветами RGBA. Я хотел бы, чтобы текстура, содержащая 8-битные индексы, в палитру RGB и автономный 8-битный альфа-канал. (Я пытаюсь сэкономить память, а 32-битные RGBA-текстуры - это роскошь.) Или это должно быть сделано вручную, т.е. создав две независимые текстуры, одну для цветов и одну для альфа-карты, и комбинируя их вручную?

Ответы [ 3 ]

2 голосов
/ 12 января 2009

Нет. В общем, графическим чипам действительно не нравятся паллетизированные текстуры (почему? Потому что чтение любого текселя из него требует двух операций чтения из памяти, одного из индекса и другого в палитру. Удвоенная задержка обычного чтения).

Если вы только после сохранения памяти, посмотрите в сжатые форматы текстур. В частности, в iPhone он поддерживает сжатые форматы PVRTC с 2 битами на пиксель и 4 битами на пиксель. Сжатие с потерями (так же, как сжатие палитры часто с потерями), но экономия памяти и полосы пропускания существенна.

1 голос
/ 22 сентября 2009

Текстуры палитры будут расширены при загрузке для графического процессора в iPhone, поэтому вы не получите никакого преимущества, используя их, кроме размера хранилища. Лучше всего для игры в мультяшном стиле исследовать использование сжатых текстур PVRTC (как говорит NeARAZ) и 16-битных текстур (RGBA4444 для альфы, RGBA5551 для пробивки, RGB565 для непрозрачных текстур). Использование их обоих - мой собственный подход.

1 голос
/ 12 января 2009

Отказ от ответственности: Эта информация основана на официальной спецификации OpenGL | ES. Я понятия не имею, реализация OpenGL | ES на iphone поддерживает сжатые текстуры или нет. Теоретически это должно, по крайней мере, имитировать сжатые текстуры, но теперь вы никогда этого не сделаете.

Вы можете загрузить 8 бит / пиксельные текстуры с помощью вызова glCompressedTexImage2D. Тип сжатия, который вам больше всего нравится использовать: GL_PALETTE8_RGBA8_OES.

Сохранение дополнительного альфа-канала вместе с палитрой напрямую невозможно. Либо вы используете второй текстурный блок для альфа-компонента, либо вы учитываете альфу во время квантования цветов и используете формат палитры, содержащий альфа.

В сети есть инструмент для цветового квантования командной строки BRIGHT. Это делает невероятную работу по квантованию изображений с альфа. Возможно, вы захотите попробовать ...

...