В этой статье используются пустые URL-адреса , которые неинформативны и уязвимы для ссылочной порчи . ( Июнь 2022 г. ) |
Оригинальный автор(ы) | АРБ |
---|---|
Разработчик(и) | Группа компаний «Хронос» |
Первоначальный выпуск | 28 июля 2003 г. ( 2003-07-28 ) |
Стабильный релиз | 3.2 [1] / 10 августа 2015 г. ( 2015-08-10 ) |
Операционная система | Кроссплатформенный |
Платформа | Кроссплатформенный |
Преемник | Вулкан |
Тип | API |
Лицензия | Бесплатно, без роялти или лицензирования |
Веб-сайт | www.khronos.org/opengles |
OpenGL для встраиваемых систем ( OpenGL ES или GLES ) — это подмножество [2] интерфейса прикладного программирования (API) компьютерной графики OpenGL для рендеринга 2D и 3D компьютерной графики , например, той, что используется в видеоиграх , обычно с аппаратным ускорением с использованием графического процессора (GPU). Он разработан для встраиваемых систем, таких как смартфоны , планшетные компьютеры , игровые консоли и КПК . OpenGL ES — это «наиболее широко используемый API 3D-графики в истории». [3]
API является кросс-языковым и многоплатформенным . Библиотека GLU и оригинальный GLUT недоступны для OpenGL ES, однако freeglut поддерживает их. OpenGL ES управляется некоммерческим технологическим консорциумом Khronos Group . Vulkan , API следующего поколения от Khronos, создан для более простых высокопроизводительных драйверов для мобильных и настольных устройств. [4]
В настоящее время существует несколько версий спецификации 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 . [5]
Версии 1.0 и 1.1 имеют общие профили (CM) и общие профили lite (CL), разница в том, что общие профили lite поддерживают только типы данных с фиксированной точкой вместо поддержки типов данных с плавающей точкой , тогда как общие профили поддерживают оба типа.
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-текстуры не поддерживаются;Текущая версия — 1.0.0.2. [6]
Имя расширения | Сортировать #Номер | Подробности |
---|---|---|
OES_байт_координаты | Расширение OpenGL ES №4 | (ранее расширение OpenGL #291) |
OES_compressed_paletted_texture | Расширение OpenGL ES №6 | (ранее расширение OpenGL #294) |
OES_фиксированная_точка | Расширение OpenGL ES №9 | (ранее расширение OpenGL #292) |
OES_query_matrix | Расширение OpenGL ES №16 | (ранее расширение OpenGL #296) |
OES_read_format | Расширение OpenGL ES №17 | (ранее расширение OpenGL #295) |
OES_одинарная_точность | Расширение OpenGL ES №18 | (ранее расширение OpenGL #293) |
необязательный | Меса (большинство водителей) | |
OES_compressed_ETC1_RGB8_texture | Расширение OpenGL ES №5 |
OpenGL ES 1.1 добавил такие функции, как обязательная поддержка мультитекстурирования, улучшенная поддержка мультитекстурирования (включая комбинаторы и операции скалярного произведения текстур), автоматическая генерация MIP-карт , объекты буфера вершин , запросы состояний, пользовательские плоскости отсечения и улучшенный контроль над рендерингом точек. [7] Текущая версия — 1.1.12. [8]
Имя расширения | Сортировать #Номер |
---|---|
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 |
необязательный | Меса (все водители) |
OES_framebuffer_object | OpenGL ES Extension #10 (стал основным в ES 2.0) [9] |
OES_EGL_image | Расширение OpenGL ES №23 |
OES_EGL_image_external | Расширение OpenGL ES №87 |
OES_required_internalformat | Расширение OpenGL ES # будет определено |
OpenGL ES 2.0 был публично выпущен в марте 2007 года. [10] Он примерно основан на OpenGL 2.0, но он устраняет большую часть конвейера рендеринга с фиксированными функциями в пользу программируемого в ходе перехода, аналогичного переходу от OpenGL 3.0 к 3.1. [11] Поток управления в шейдерах, как правило, ограничен прямым ветвлением и циклами, где максимальное количество итераций можно легко определить во время компиляции. [12] Почти все функции рендеринга на этапе преобразования и освещения, такие как спецификация материалов и параметров освещения, ранее заданных API с фиксированными функциями, заменены шейдерами , написанными графическим программистом. В результате OpenGL ES 2.0 не имеет обратной совместимости с OpenGL ES 1.1. Некоторые несовместимости между настольной версией OpenGL и OpenGL ES 2.0 сохранялись до OpenGL 4.1, в которой было добавлено GL_ARB_ES2_compatibility
расширение. [13]
Текущая версия — 2.0.25. [14]
Группа Khronos написала документ, описывающий различия между OpenGL ES 2.0 и обычным OpenGL 2.0. [15]
Имя расширения | Сортировать #Номер |
---|---|
OES_текстура_куб_карта | Расширение OpenGL ES №20 |
OES_texture_npot | Расширение OpenGL ES №37 |
OES_глубина24 | Расширение OpenGL ES №24 |
OES_глубина_текстуры | Расширение 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_трафарет | Расширение OpenGL ES №43 |
OES_rgb8_rgba8 | Расширение OpenGL ES №30 |
OES_stencil8 | Расширение OpenGL ES №33 |
OES_vertex_half_float | Расширение OpenGL ES №38 |
дополнительный | в MESA (все водители) |
OES_EGL_image | Расширение OpenGL ES №23 (отличается от версии 1.1) |
OES_EGL_image_external | Расширение OpenGL ES #87 (отличается от 1.1) |
OES_текстура_3D | Расширение OpenGL ES #34 (стало основным в ES 3.0) [16] |
OES_texture_float_linear OES_texture_half_float_linear | Расширение OpenGL ES №35, расширено в ES 3.0 и 3.1 |
OES_texture_float OES_texture_half_float | Расширение OpenGL ES №36, расширено в ES 3.0 и 3.1 |
OES_стандартные_производные | Расширение OpenGL ES №45 |
OES_vertex_array_object | Расширение OpenGL ES #71 (стало основным в ES 3.0) [16] |
OES_surfaceless_context | Расширение OpenGL ES №116 |
OES_глубина_текстуры_куба_карта | Расширение 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_трафарет | Расширение OpenGL ES №94 |
УГОЛ_сжатия_текстуры_dxt | Расширение OpenGL ES №111 |
Спецификация OpenGL ES 3.0 [17] была публично выпущена в августе 2012 года. [18] Она обратно совместима с OpenGL ES 2.0 и частично совместима с WebGL 2.0, [19] поскольку WebGL 2.0 был разработан для обеспечения высокой степени взаимодействия с OpenGL ES 3.0. [20] Текущая версия стандарта OpenGL ES 3.0 — 3.0.6, выпущенная в ноябре 2019 года. [21]
Новые функциональные возможности спецификации 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_текстура_граница_зажим | Расширение 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 [23] была публично выпущена в марте 2014 года. Новые функциональные возможности OpenGL ES 3.1 включают в себя: [24]
OpenGL ES 3.1 обратно совместим с OpenGL ES 2.0 и 3.0, что позволяет приложениям постепенно включать новые функции. Текущая версия — 3.1 (ноябрь 2016 г.). [25]
Имя расширения | Сортировать #Номер |
---|---|
ARB_массивы_массивов | Расширение 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_отдельные_шейдерные_объекты | Расширение ARB № 97 |
ARB_трафарет_текстурирование | Расширение ARB № 138 |
ARB_vertex_attrib_binding | Расширение ARB № 125 |
ARB_draw_indirect | Расширение ARB №87 |
Упаковка_языка_затенения_ARB | Расширение 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_текстура_вид | Расширение OpenGL ES №218 |
Форматы_изображений_NV | Расширение OpenGL ES №200 |
EXT_render_snorm | Расширение OpenGL ES №206 |
EXT_texture_norm16 | Расширение OpenGL ES №207 |
Спецификация OpenGL ES 3.2 [26] была публично выпущена в августе 2015 года. Новые возможности OpenGL ES 3.2 включают в себя:
Фактическое состояние — 3.2.6 июля 2019 г. [27] [28]
Имя расширения | Сортировать #Номер |
---|---|
KHR_blend_equation_advanced | Расширение OpenGL ES №168 |
EXT_color_buffer_float | Расширение OpenGL ES №137 |
KHR_отладка | Расширение OpenGL ES №118 |
KHR_прочность | Расширение OpenGL ES №190 |
OES_копия_изображения | Расширение 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_текстура_граница_зажим | Расширение OpenGL ES №215 |
OES_текстурный_буфер | Расширение OpenGL ES №216 |
OES_текстурный_куб_карта_массив | Расширение OpenGL ES №217 |
OES_texture_stencil8 | Расширение OpenGL ES №173 |
OES_texture_storage_multisample_2d_array | Расширение OpenGL ES №174 |
KHR_текстурное_сжатие_astc_ldr | Расширение OpenGL ES №117 (только LDR) |
OES_primitive_bounding_box | Расширение OpenGL ES №212 |
необязательный | Mesa (все драйверы OpenGL ES 3.2+) |
KHR_текстурное_сжатие_astc_hdr | Расширение OpenGL ES № 117 (включая LDR), расширение ARB № 118 |
KHR_blend_equation_advanced_coherent | Расширение OpenGL ES №168 |
KHR_текстурное_сжатие_astc_sliced_3d | Расширение OpenGL ES №249 (Расширение ARB №189) |
OES_viewport_array | Расширение OpenGL ES №267 |
Еще несколько расширений разрабатываются или находятся в разработке в Mesa для следующей версии OpenGL ES (см. Mesamatrix).
API следующего поколения — Vulkan. [29]
Полный список компаний и их соответствующей продукции можно посмотреть здесь.
OpenGL ES 1.0 добавил официальный API 3D-графики в операционные системы Android [30] и Symbian OS v8.0a [31] [32] , а также в QNX [33]. Он также поддерживается PlayStation 3 как один из ее официальных графических API [34] (другой — низкоуровневая библиотека libgcm ) с Cg от Nvidia вместо GLSL. [35] PlayStation 3 также включает в себя несколько функций версии 2.0 OpenGL ES.
Версию OpenGL ES 1.1 поддерживают:
При поддержке:
При поддержке:
Поддерживается некоторыми последними версиями этих графических процессоров: [46] [47]
Поддерживается Windows, Linux, Android (начиная с версии 5.0) на устройствах с соответствующим оборудованием и драйверами, [48] включая:
Android Extension Pack (AEP) — это набор расширений OpenGL ES 3.1, все из которых объединены в одно расширение, представленное Google в 2014 году. Это позволяет приложениям использовать все функции набора расширений, при этом проверяя наличие только одного из них. AEP был официально добавлен в Android Lollipop для предоставления дополнительных функций, таких как тесселяция, по сравнению с тем, что официально было в редакции GLES 3.1. Обновление OpenGL ES 3.2 в значительной степени состоит из дополнений AEP, которые уже присутствуют в настольном OpenGL. [53]
OpenGL ES 3.2, включающий Android Extension Pack (AEP), «может похвастаться небольшим количеством улучшений по сравнению с прошлогодним OpenGL ES 3.1. Оба используют схожие функции из AEP. Из AEP, совместимое с OpenGL ES 3.2 оборудование будет поддерживать тесселяцию для дополнительной детализации геометрии, новые геометрические шейдеры, сжатие текстур ASTC для меньшего объема памяти, цели визуализации с плавающей точкой для высокоточных вычислительных процессов и новые функции отладки для разработчиков. Эти высококлассные функции уже присутствуют в полной спецификации OpenGL 4 группы». [54] [3]
Поддерживается Windows, Linux, Android (возможно, начиная с версии 6.0, требуются версии 7.0+ Vulkan 1.0 и OpenGL ES 3.2) на устройствах с соответствующим оборудованием и драйверами, включая:
OpenGL ES (и OpenGL) был объявлен устаревшим в операционных системах Apple в пользу собственного графического API Metal , но всё ещё работал по крайней мере до iOS 12. [ 56]
В настоящее время нет плана для новой базовой версии OpenGL ES, поскольку принятие Vulkan , как считается, заменит его во встроенных и мобильных приложениях. Разработка расширений OpenGL ES продолжается по состоянию на 2017 год. [57]
Этот раздел нуждается в расширении . Вы можете помочь, дополнив его. ( Сентябрь 2014 ) |
Для эмуляции вызовов OpenGL с использованием GL ES создано несколько библиотек:
Промышленность поставит >1,7 млрд устройств в 2015 году
Приложения, созданные с использованием OpenGL ES, продолжат работать в iOS 12, но OpenGL ES устарел в iOS 13.