Подтвердить что ты не робот

Какие форматы текстур OpenGL ES 2.0 имеют цветную, глубинную или трафаретную визуализацию?

Из Спецификация OpenGL ES 2.0 в разделе 4.4.5:

"Форматы, не перечисленные в таблице 4.5, включая сжатые внутренние форматы. цвета, глубины или трафаретов, независимо от того, какие компоненты они содержат."

Table 4.5

Затем существуют расширения, расширяющие эту таблицу, такие как:

Если я правильно понял спецификацию, таблица 4.5 затрагивает как форматы текстур, так и renderbuffer. И в этом случае, например, текстуры RGB и RGBA с 8 бит на компонент не являются рендерируемыми цветом, если не поддерживается расширение OES_rgb8_rgba8 (или ARM_rgba8 для RGBA).

На тестовом устройстве, которое поддерживает OES_rgb8_rgba8, допустимы следующие форматы текстур, то есть фреймбуфер завершается при присоединении к FBO в качестве привязки цвета:

  • RGB 565
  • RGB 888
  • RGBA 4444
  • RGBA 5551
  • RGBA 8888

И это не так:

  • Alpha 8
  • Яркость 8
  • LuminanceAlpha 88

Результаты соответствуют моим предположениям (по крайней мере, на 1 устройстве), но я хотел бы знать, правильно ли я понял спецификацию или это работает случайно?

4b9b3361

Ответ 1

Да, ваши предположения верны.

Список форматов рендеринга в официальной спецификации - это то, что требуется для поддержки OpenGL ES 2.0. Большинство поддерживают гораздо больше, чем указано там.

Однако реализация OpenGL/OpenGL ES не поддерживает альфа-или яркостные текстуры как цветные. Вы можете реплицировать поведение с помощью расширений swizzle для текстур и/или запуска GLSL-swizzling. Расширение: EXT_texture_rg добавляет красные и красные/зеленые форматы изображений, которые можно использовать текстурами и рендерингбуферами. Эти два формата очень полезны, если вы хотите сделать односторонний или двухканальный формат изображения с помощью FBO (поскольку GL_LUMINANCE, GL_ALPHA и GL_LUMINANCE_ALPHA не являются цветными форматами).

Вообще говоря, набор форматов изображений renderbuffer является подмножеством форматов графических изображений. Вы можете использовать сжатые форматы изображений (необязательно в ES 2.0), яркости и форматы альфа-изображений для операций текстурирования и переноса пикселей, но они не поддерживаются рендерингбуферами. Это означает, что, хотя вы можете рисовать с использованием этих текстур, вы не можете рисовать их, присоединяя их к FBO. Чтобы рисовать в текстуре, он должен иметь формат изображения и формат рендеринга и формат текстуры.

В исторической заметке существуют форматы renderbuffer, которые/не могут использоваться в качестве текстур. В качестве примера можно привести многопроцессорные форматы, после создания исходной спецификации FBO была добавлена ​​многопроцессорная текстура.