OpenGL ES - OpenGL ES

OpenGL ES
Логотип OpenGL ES
Логотип
Автор (ы) оригинала ARB
Разработчики) Группа Хронос
изначальный выпуск 28 июля 2003 г . ; 18 лет назад ( 2003-07-28 )
Стабильный выпуск
3.2 / 10 августа 2015 г . ; 6 лет назад ( 2015-08-10 )
Операционная система Кроссплатформенность
Платформа Кроссплатформенность
Тип API
Лицензия Бесплатно, роялти или лицензирование
Интернет сайт www .khronos .org / opengles

OpenGL для встраиваемых систем ( OpenGL ES или GLES ) - это подмножество интерфейса программирования приложений (API) для рендеринга компьютерной графики OpenGL для рендеринга 2D и 3D компьютерной графики, например, используемой в видеоиграх , обычно с аппаратным ускорением с использованием графического процессора ( GPU). Он разработан для встраиваемых систем, таких как смартфоны , планшетные компьютеры , игровые приставки и КПК . OpenGL ES - это «самый широко применяемый API трехмерной графики в истории».

API является кросс-языковым и многоплатформенным . Библиотеки GLUT и GLU недоступны для OpenGL ES. OpenGL ES управляется некоммерческим технологическим консорциумом Khronos Group . Vulkan , API нового поколения от Khronos, предназначен для более простых высокопроизводительных драйверов для мобильных и настольных устройств.

Версии

Сейчас существует несколько версий спецификации OpenGL ES. OpenGL ES 1.0 разработан в соответствии со спецификацией OpenGL 1.3, OpenGL ES 1.1 определен в соответствии со спецификацией OpenGL 1.5, а OpenGL ES 2.0 определен в соответствии со спецификацией OpenGL 2.0. Это означает, что, например, приложение, написанное для OpenGL ES 1.0, должно легко переноситься на настольную версию OpenGL 1.3; поскольку OpenGL ES представляет собой урезанную версию API, обратное может быть, а может и нет, в зависимости от конкретных используемых функций.

OpenGL ES поставляется с собственной версией языка затенения (OpenGL ES SL), которая отличается от OpenGL SL .

Версия 1.0 и 1.1 имеют общий (CM) и общий облегченный (CL) профили, разница в том, что общий облегченный профиль поддерживает только фиксированную точку, а не поддержку типа данных с плавающей запятой , тогда как common поддерживает оба.

OpenGL ES 1.0

OpenGL ES 1.0 был выпущен публично 28 июля 2003 года. OpenGL ES 1.0 основан на исходном API OpenGL 1.3, при этом большая часть функций удалена и немного добавлена. Одно существенное различие между OpenGL и OpenGL ES заключается в том, что OpenGL ES устраняет необходимость заключать вызовы библиотеки OpenGL в скобки с помощью glBeginи glEnd. Другие существенные отличия заключаются в том, что семантика вызова для примитивных функций рендеринга была изменена в пользу массивов вершин, а для координат вершин были введены типы данных с фиксированной точкой . Также были добавлены атрибуты для лучшей поддержки вычислительных возможностей встроенных процессоров, в которых часто отсутствует модуль с плавающей запятой (FPU). Многие другие функции и примитивы рендеринга были удалены в версии 1.0 для создания облегченного интерфейса, в том числе:

  • четырехугольные и многоугольные примитивы рендеринга,
  • тексген, пунктирная линия и многоугольник,
  • режим многоугольника и рендеринг полигонов со сглаживанием не поддерживаются, хотя рендеринг с использованием мультисэмпла по-прежнему возможен (вместо фрагментов альфа-границы),
  • ARB_Image не поддерживаются операции класса пикселей, а также растровые изображения или 3D-текстуры,
  • Некоторые из наиболее технических режимов рисования исключены, в том числе передний буфер и буфер накопления. Операции с растровыми изображениями, в частности копирование пикселей (по отдельности), не разрешены, равно как и оценщики, или (пользовательские) операции выбора,
  • списки отображения и отзывы удаляются, как и операции push и pop для атрибутов состояния,
  • некоторые параметры материала были удалены, включая параметры задней поверхности и определяемые пользователем плоскости отсечения.

Актуальная версия 1.0.0.2.

Имя расширения Сортировать # Число Подробности
OES_byte_coordinates Расширение OpenGL ES №4 (ранее OpenGL Extension # 291)
OES_compressed_paletted_texture Расширение OpenGL ES №6 (ранее OpenGL Extension # 294)
OES_fixed_point Расширение OpenGL ES №9 (ранее OpenGL Extension # 292)
OES_query_matrix Расширение OpenGL ES №16 (ранее OpenGL Extension # 296)
OES_read_format Расширение OpenGL ES № 17 (ранее OpenGL Extension # 295)
OES_single_precision Расширение OpenGL ES № 18 (ранее OpenGL Extension # 293)
по желанию Меса (большинство водителей)
OES_compressed_ETC1_RGB8_texture Расширение OpenGL ES №5

OpenGL ES 1.1

В OpenGL ES 1.1 добавлены такие функции, как обязательная поддержка мультитекстур, улучшенная поддержка мультитекстур (включая комбайнеры и операции с точечным произведением текстур), автоматическое создание MIP-карты , объекты буфера вершин , запросы состояния, плоскости пользовательских клипов и больший контроль над рендерингом точек. Актуальная версия - 1.1.12.

Имя расширения Сортировать # Число
OES_draw_texture Расширение OpenGL ES №7
OES_matrix_get Расширение OpenGL ES №11
OES_point_size_array Расширение OpenGL ES №14
OES_point_sprite Расширение OpenGL ES №15
по желанию Mesa (все драйверы)
OES_EGL_image Расширение OpenGL ES №23
OES_EGL_image_external Расширение OpenGL ES № 87
OES_required_internalformat Расширение OpenGL ES № TBD

OpenGL ES 2.0

OpenGL ES 2.0 был публично выпущен в марте 2007 года. Он примерно основан на OpenGL 2.0, но устраняет большую часть конвейера рендеринга с фиксированными функциями в пользу программируемого, аналогично переходу с OpenGL 3.0 на 3.1. Поток управления в шейдерах обычно ограничивается прямым ветвлением и циклами, где максимальное количество итераций может быть легко определено во время компиляции. Почти все функции рендеринга на этапе преобразования и освещения, такие как спецификация материалов и параметров освещения, ранее задававшаяся API фиксированных функций, заменены шейдерами, написанными графическим программистом. В результате OpenGL ES 2.0 не имеет обратной совместимости с OpenGL ES 1.1. Некоторые несовместимости между настольной версией OpenGL и OpenGL ES 2.0 сохранялись до OpenGL 4.1, в котором было добавлено GL_ARB_ES2_compatibilityрасширение. Актуальная версия 2.0.25.

Группа Khronos написала документ, описывающий различия между OpenGL ES 2.0 и обычным OpenGL 2.0.

Имя расширения Сортировать # Число
OES_texture_cube_map Расширение OpenGL ES №20
OES_texture_npot Расширение OpenGL ES №37
OES_depth24 Расширение OpenGL ES № 24
OES_depth_texture Расширение OpenGL ES №44
OES_element_index_uint Расширение OpenGL ES №26
OES_fbo_render_mipmap Расширение OpenGL ES № 27
OES_get_program_binary Расширение OpenGL ES # 47
OES_mapbuffer Расширение OpenGL ES №29
OES_packed_depth_stencil Расширение OpenGL ES №43
OES_rgb8_rgba8 Расширение OpenGL ES №30
OES_stencil8 Расширение OpenGL ES №33
OES_vertex_array_object Расширение OpenGL ES №71
OES_vertex_half_float Расширение OpenGL ES №38
дополнительный в MESA (все драйверы)
OES_EGL_image Расширение OpenGL ES №23 (отличается для версии 1.1)
OES_EGL_image_external OpenGL ES Extension # 87 (отличается для версии 1.1)
OES_texture_float_linear OES_texture_half_float_linear OpenGL ES Extension # 35, расширенный в ES 3.0 и 3.1
OES_texture_float OES_texture_half_float OpenGL ES Extension # 36, расширенный в ES 3.0 и 3.1
OES_standard_derivatives Расширение OpenGL ES №45
OES_surfaceless_context Расширение OpenGL ES № 116
OES_depth_texture_cube_map Расширение OpenGL ES №136
EXT_texture_filter_anisotropic Расширение OpenGL ES №41
EXT_texture_type_2_10_10_10_REV Расширение OpenGL ES №42
EXT_texture_compression_dxt1 Расширение OpenGL ES №49
EXT_texture_format_BGRA8888 Расширение OpenGL ES №51
EXT_discard_framebuffer Расширение OpenGL ES №64
EXT_blend_minmax Расширение OpenGL ES №65
EXT_read_format_bgra Расширение OpenGL ES №66
EXT_multi_draw_arrays Расширение OpenGL ES №69
EXT_frag_depth Расширение OpenGL ES №86
EXT_unpack_subimage Расширение OpenGL ES №90
EXT_texture_rg Расширение OpenGL ES №103
EXT_draw_buffers Расширение OpenGL ES № 151
EXT_compressed_ETC1_RGB8_sub_texture Расширение OpenGL ES № 188
NV_draw_buffers Расширение OpenGL ES №91
NV_fbo_color_attachments Расширение OpenGL ES №92
NV_read_buffer Расширение OpenGL ES № 93
NV_read_depth_stencil Расширение OpenGL ES №94
ANGLE_texture_compression_dxt Расширение OpenGL ES № 111

OpenGL ES 3.0

Спецификация OpenGL ES 3.0 была публично выпущена в августе 2012 года. OpenGL ES 3.0 обратно совместим с OpenGL ES 2.0, что позволяет приложениям постепенно добавлять новые визуальные функции в приложения. OpenGL 4.3 обеспечивает полную совместимость с OpenGL ES 3.0. Версия 3.0 также является основой для WebGL 2.0. Актуальна версия 3.0.6.

Новые функции в спецификации OpenGL ES 3.0 включают:

Имя расширения Сортировать # Число Подробности
KHR_context_flush_control Расширение OpenGL ES №191 (только для GL_KHR_context_flush_control)
дополнительный в MESA (все драйверы)
OES_texture_compression_astc Расширение OpenGL ES №162
EXT_texture_border_clamp Расширение OpenGL ES № 182
EXT_draw_elements_base_vertex Расширение OpenGL ES №204
OES_EGL_image_external_essl3 Расширение OpenGL ES № 220
MESA_shader_integer_functions Расширение OpenGL ES № 495

OpenGL ES 3.1

Спецификация OpenGL ES 3.1 была публично выпущена в марте 2014 года. Новые функции в OpenGL ES 3.1 включают:

  • Вычислить шейдеры
  • Независимые вершинные и фрагментные шейдеры
  • Косвенные команды рисования

OpenGL ES 3.1 обратно совместим с OpenGL ES 2.0 и 3.0, что позволяет приложениям постепенно включать новые функции. Актуальная версия - 3.1- (ноябрь 2016 г.).

Имя расширения Сортировать # Число
ARB_arrays_of_arrays ARB добавочный номер 120
ARB_compute_shader ARB добавочный номер 122
ARB_explicit_uniform_location ARB добавочный номер 128
ARB_framebuffer_no_attachments ARB добавочный номер 130
ARB_program_interface_query ARB добавочный номер 134
ARB_shader_atomic_counters ARB добавочный номер 114
ARB_shader_image_load_store ARB добавочный номер 115
ARB_shader_storage_buffer_object ARB добавочный номер 137
ARB_separate_shader_objects ARB добавочный номер 97
ARB_stencil_texturing ARB добавочный номер 138
ARB_vertex_attrib_binding ARB добавочный номер 125
ARB_draw_indirect ARB добавочный номер 87
ARB_shading_language_packing ARB добавочный номер 116
ARB_shader_image_size ARB добавочный номер 136
ARB_texture_storage_multisample ARB добавочный номер 141
ARB_texture_multisample ARB добавочный номер 67
EXT_shader_integer_mix Расширение OpenGL ES # 161
по желанию Mesa (все драйверы OpenGL ES 3.1+)
ARB_sample_locations Внутренний номер ARB № 181
OES_texture_view Расширение OpenGL ES № 218
NV_image_formats Расширение OpenGL ES №200
EXT_render_snorm Расширение OpenGL ES №206
EXT_texture_norm16 Расширение OpenGL ES №207

OpenGL ES 3.2

Спецификация OpenGL ES 3.2 была публично выпущена в августе 2015 года. Новые возможности OpenGL ES 3.2 включают:

  • Шейдеры геометрии и тесселяции для эффективной обработки сложных сцен на графическом процессоре.
  • Цели рендеринга с плавающей запятой для повышения гибкости в высокоточных вычислительных операциях.
  • Сжатие ASTC для уменьшения объема памяти и полосы пропускания, используемой для обработки текстур.
  • Улучшенное смешивание для сложной композиции и обработки нескольких цветов.
  • Расширенные целевые объекты текстуры, такие как буферы текстуры, мультидискретный 2D-массив и массивы кубических карт.
  • Функции отладки и надежности для упрощения разработки кода и безопасного выполнения.

Фактическое состояние: 3.2.6 июля 2019 года.

Имя расширения Сортировать # Число
KHR_blend_equation_advanced Расширение OpenGL ES # 168
EXT_color_buffer_float Расширение OpenGL ES №137
KHR_debug Расширение OpenGL ES №118
KHR_robustness Расширение OpenGL ES №190
OES_copy_image Расширение OpenGL ES №208
OES_draw_buffers_indexed Расширение OpenGL ES №209
OES_draw_elements_base_vertex Расширение OpenGL ES № 219
OES_geometry_shader Расширение OpenGL ES № 210
OES_gpu_shader5 Расширение OpenGL ES № 211
OES_sample_shading Расширение OpenGL ES # 169
OES_sample_variables Расширение OpenGL ES # 170
OES_shader_image_atomic Расширение OpenGL ES № 171
OES_shader_io_blocks Расширение OpenGL ES № 213
OES_shader_multisample_interpolation Расширение OpenGL ES № 172
OES_tessellation_shader Расширение OpenGL ES № 214
OES_texture_border_clamp Расширение OpenGL ES № 215
OES_texture_buffer Расширение OpenGL ES № 216
OES_texture_cube_map_array Расширение OpenGL ES № 217
OES_texture_stencil8 Расширение OpenGL ES № 173
OES_texture_storage_multisample_2d_array Расширение OpenGL ES № 174
KHR_texture_compression_astc_ldr Расширение OpenGL ES # 117 (только LDR)
OES_primitive_bounding_box Расширение OpenGL ES № 212
по желанию Mesa (все драйверы OpenGL ES 3.2+)
KHR_texture_compression_astc_hdr OpenGL ES Extension # 117 (LDR включен), ARB Extension # 118
KHR_blend_equation_advanced_coherent Расширение OpenGL ES # 168
KHR_texture_compression_astc_sliced_3d Расширение OpenGL ES № 249 (Расширение ARB № 189)

OES_viewport_array

Расширение OpenGL ES № 267

Еще несколько расширений разрабатываются или находятся в разработке в Mesa для следующей версии OpenGL ES (см. Mesamatrix).

API следующего поколения - Vulkan.

Использование платформы

Полный список компаний и соответствующих им продуктов можно найти здесь

OpenGL ES 1.0

OpenGL ES 1.0 добавил официальный API 3D-графики в операционные системы Android и Symbian , а также в QNX. Он также поддерживается PlayStation 3 в качестве одного из официальных графических API-интерфейсов (другой является библиотекой libgcm низкого уровня ) с помощью Nvidia Cg. вместо GLSL. PlayStation 3 также включает несколько функций версии 2.0 OpenGL ES.

OpenGL ES 1.1

Версия 1.1 OpenGL ES поддерживается:

OpenGL ES 2.0

Поддерживается:

OpenGL ES 3.0

Поддерживается:

Поддерживается некоторыми последними версиями этих графических процессоров:

  • Adreno 300 и 400 серий ( Android , BlackBerry 10 , Windows10 Windows RT )
  • Серия Mali T600 и новее (Android, Linux , Windows 7)
  • PowerVR Series6 ( iOS , Linux)
  • Vivante (Android, OS X 10.8.3, Windows 7)
  • Nvidia (Android), Tesla G80 +: Linux, Windows 7+
  • Intel HD Graphics Sandy Bridge и выше (Linux)
  • AMD Terascale и актуальная GCN-архитектура (Windows, Linux)
  • LLVMpipe и Softpipe: программные драйверы в Mesa
  • VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)

OpenGL ES 3.1

Поддерживается Windows, Linux, Android (начиная с версии 5.0) на устройствах с соответствующим оборудованием и драйверами, включая:

  • Adreno 400 серии
  • Серия Adreno 500 (Mesa 18.1 для Linux и Android)
  • AMD Terascale и актуальная GCN-архитектура (Windows, Linux (r600, radeonSI))
  • Intel HD Graphics для серии Intel Atom Z3700 (Android)
  • Intel HD Graphics для Intel Celeron серий N и J (Android)
  • Intel HD Graphics для Intel Pentium серий N и J (Android)
  • Intel HD Graphics Haswell и выше (Linux Mesa: предыдущая версия Ivy Bridge почти без текстурирования трафарета)
  • Серия Mali T6xx (midgard) и далее (Android, Linux)
  • Nvidia GeForce 400 серии и новее (Windows, Linux)
  • Nvidia Tegra K1 (Android, Linux)
  • Nvidia Tegra X1 (Android)
  • PowerVR Series 6, 6XE, 6XT, 7XE и 7XT (Linux, Android)
  • Vivante серии GC2000 и далее (опционально с GC800 и GC1000)
  • v3d: Драйвер для Broadcom ARM raspberry в Mesa (Linux)
  • VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)
  • LLVMpipe: программный драйвер в Mesa 20.2 (Linux)
  • softpipe: программный драйвер в Mesa 20.3 (Linux)
  • Zink: драйвер эмуляции в Mesa 21.1 (Linux)

Пакет расширений Android

Android Extension Pack (AEP) - это набор расширений OpenGL ES 3.1, объединенных в одно расширение, представленное Google в 2014 году. Это позволяет приложениям использовать все функции набора расширений, при этом проверяя только наличие одинокий. AEP был официально добавлен в Android Lollipop для предоставления дополнительных функций, таких как тесселяция, по сравнению с тем, что было официально в версии GLES 3.1. Обновление OpenGL ES 3.2 в значительной степени состоит из дополнений AEP, которые уже присутствуют в настольном OpenGL.

OpenGL ES 3.2

OpenGL ES 3.2, включающий Android Extension Pack (AEP), "может похвастаться небольшим количеством улучшений по сравнению с прошлогодним OpenGL ES 3.1. Оба используют аналогичные функции из AEP. Из AEP совместимое с OpenGL ES 3.2 оборудование будет поддерживать тесселяцию для дополнительная детализация геометрии, новые геометрические шейдеры, сжатие текстур ASTC для меньшего использования полосы пропускания памяти, целевые объекты рендеринга с плавающей запятой для высокоточных вычислительных процессов и новые функции отладки для разработчиков. Эти высокопроизводительные функции уже присутствуют в полной спецификации OpenGL 4 группы. . "

Поддерживается Windows, Linux, Android (начиная с версии 6.0 возможна версия 7.0+, требуется Vulkan 1.0 и OpenGL ES 3.2) на устройствах с соответствующим оборудованием и драйверами, включая:

  • Adreno 420 и новее (Android, Linux (freedreno))
  • AMD GCN-архитектура (Windows, Linux (Mesa 18.2 с radeonSI))
  • Intel HD Graphics Skylake и выше (Linux)
  • Mali-T760 и новее (Android, Linux)
  • Nvidia GeForce серии 400 (Fermi) и новее (Windows, Linux)
  • VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)
  • LLVMpipe: программный драйвер в Mesa 20 (Linux)

Прекращение поддержки в устройствах Apple

OpenGL ES (и OpenGL) не рекомендуется в операционных системах Apple, но по-прежнему работает как минимум в iOS 12.

Будущее

В настоящее время нет планов по выпуску новой базовой версии OpenGL ES, поскольку считается , что принятие Vulkan вытеснит его во встроенных и мобильных приложениях. Разработка расширений для OpenGL ES продолжается по состоянию на 2017 год.

Совместимость с OpenGL

Было создано несколько библиотек для имитации вызовов OpenGL с использованием GL ES:

  • Nvidia предлагает лицензионную библиотеку BSD с двумя пунктами под названием Regal, первоначально созданную Кассом Эвериттом. Последний раз он обновлялся в 2016 году. Regal используется, например, в Google NaCl .
  • MIT лицензию GL4ES эмулирует OpenGL 2.1 / 1.5 с помощью GL ES 2.0 / 1.1. Он основан на glshim.

Смотрите также

  • Direct3D - Windows API для высокопроизводительной 3D-графики с аппаратной поддержкой 3D-ускорения
  • DirectX - Windows API для обработки задач, связанных с графикой и видео
  • Metal - низкоуровневая высокопроизводительная графическая библиотека с 3D-ускорением для устройств Apple.
  • OpenSL ES - API для звука во встроенных системах, разработанный Khronos Group
  • ANGLE (программное обеспечение) - разработанная Google библиотека для преобразования вызовов OpenGL ES в вызовы DirectX или Vulkan.

использованная литература

дальнейшее чтение

  • Гинзбург, Дэн; Пурномо, Будириджанто; Шрейнер, Дэйв; Мунши, Афтаб (2014). Руководство по программированию OpenGL ES 3.0 . Эддисон-Уэсли Профессионал. ISBN 978-0-321-93388-1.
  • Пулли, Кари; Аарнио, Томи; Миеттинен, Вилле; Роймела, Киммо и Ваарала, Яни (2007). Мобильная 3D-графика с OpenGL ES и M3G . Морган Кауфманн. ISBN 978-0-12-373727-4.
  • Астл, Дэйв и Дурнил, Дэвид (2004). Разработка игр OpenGL ES . Курс Технологии PTR. ISBN 1-59200-370-2.
  • Пулли, Кари; Аарнио, Томи; Роймела, Киммо и Ваарала, Яни. Разработка графических программных интерфейсов для мобильных устройств . IEEE CG&A 2005 . DOI : 10,1109 / MCG.2005.129 .

внешние ссылки