openGLES 2 - Есть ли способ загрузить текстуру с одним альфа-элементом на 1 бит, не расширяясь до байта без знака? - PullRequest
1 голос
/ 02 мая 2019

У меня есть битовая маска, которую я хотел бы установить в качестве текстуры для игры (например, сэмпл из нее, установив альфа в 0 или 1, или использовать ее в качестве теста трафарета).

Нужно ли превращать каждый бит в этой существующей маске в байт и использовать GL_UNSIGNED_BYTE или есть более умный способ использования этой маски?

1 Ответ

0 голосов
/ 06 мая 2019

OpenGLES 2 имеет только один формат текстур с однобитным альфа: GL_UNSIGNED_SHORT_5_5_5_1, 16-битная текстура RGBA. Если вы используете 15-битный RGB, я бы сказал, что это ваш лучший шанс. Использование сжатой текстуры может работать, а может и не работать лучше.

Для однобитового трафарета есть расширение GL_OES_STENCIL1 , однако на самом деле очень просто использовать одну битовую плоскость в 8-битном трафарете (на самом деле очень немногие используют больше, чем одну битовую плоскость за раз ).

Использование трафарета требует от вас создания, рендеринга и проецирования в RenderBuffer, а затем рендеринга этого RenderBuffer на следующую цель (например, кадровый буфер по умолчанию).

Не уверен насчет вашего варианта использования, но я не могу вспомнить ни одного, где это стоило бы усилий по сравнению с простым броском с 8-битным альфа-каналом, установленным на [0.0,1.0] до конца. Если вам не хватает производительности, придерживайтесь общепринятых решений и позвольте драйверу творить чудеса.

...