Подмножество API OpenGL для встраиваемых систем
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 поддерживают только типы данных с фиксированной точкой вместо поддержки типов данных с плавающей точкой , тогда как общие профили поддерживают оба типа.
OpenGLES 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 для создания легкого интерфейса, включая:
- примитивы рендеринга четырехугольников и полигонов;
- texgen, линия и полигональный пунктир;
- полигональный режим и рендеринг сглаженных полигонов не поддерживаются, хотя рендеринг с использованием мультисэмпла по-прежнему возможен (вместо фрагментов альфа-границы);
ARB_Image
Операции с классами пикселей, растровые изображения и 3D-текстуры не поддерживаются;- исключены несколько более технических режимов рисования, включая передний буфер и буфер накопления;
- операции с растровыми изображениями для копирования пикселей по отдельности, оценщики и операции выбора пользователя не допускаются;
- списки отображения и обратная связь удалены, как и операции push и pop для атрибутов состояния;
- и некоторые параметры материала были удалены, включая параметры задней поверхности и определяемые пользователем плоскости отсечения.
Текущая версия — 1.0.0.2. [6]
OpenGLES 1.1
OpenGL ES 1.1 добавил такие функции, как обязательная поддержка мультитекстурирования, улучшенная поддержка мультитекстурирования (включая комбинаторы и операции скалярного произведения текстур), автоматическая генерация MIP-карт , объекты буфера вершин , запросы состояний, пользовательские плоскости отсечения и улучшенный контроль над рендерингом точек. [7]
Текущая версия — 1.1.12. [8]
OpenGLES 2.0
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]
OpenGLES 3.0
Спецификация 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 включают:
- многочисленные усовершенствования конвейера рендеринга для ускорения расширенных визуальных эффектов, включая: запросы окклюзии , обратную связь по преобразованию , инстансированный рендеринг и поддержку четырех или более целей рендеринга ;
- высококачественное сжатие текстур ETC2/EAC в качестве стандартной функции, устраняющее необходимость в отдельном наборе текстур для каждой платформы;
- новая версия языка шейдеров GLSL ES [22] с полной поддержкой целочисленных и 32-битных операций с плавающей точкой ;
- значительно улучшенная функциональность текстурирования , включая гарантированную поддержку текстур с плавающей точкой , 3D-текстур, текстур глубины, вершинных текстур, текстур NPOT, текстур R/RG, неизменяемых текстур, текстур 2D-массивов, swizzles , зажимов уровней LOD и MIP, бесшовных кубических карт и объектов-сэмплеров;
- обширный набор требуемых, явно заданных по размеру форматов текстур и буферов рендеринга, что снижает вариативность реализации и значительно упрощает написание переносимых приложений.
OpenGLES 3.1
Спецификация 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]
OpenGLES 3.2
Спецификация OpenGL ES 3.2 [26] была публично выпущена в августе 2015 года. Новые возможности OpenGL ES 3.2 включают в себя:
- Геометрические и тесселяционные шейдеры для эффективной обработки сложных сцен на графическом процессоре.
- Цели рендеринга с плавающей точкой для повышения гибкости при высокоточных вычислительных операциях.
- Сжатие ASTC для уменьшения объема памяти и полосы пропускания, используемых для обработки текстур.
- Улучшенное смешивание для сложного композитинга и обработки нескольких цветовых присоединений.
- Расширенные целевые объекты текстур, такие как буферы текстур, многовыборочные двумерные массивы и массивы кубических карт.
- Функции отладки и обеспечения надежности для упрощения разработки кода и безопасного выполнения.
Фактическое состояние — 3.2.6 июля 2019 г. [27] [28]
Еще несколько расширений разрабатываются или находятся в разработке в Mesa для следующей версии OpenGL ES (см. Mesamatrix).
API следующего поколения — Vulkan. [29]
Использование платформы
Полный список компаний и их соответствующей продукции можно посмотреть здесь.
OpenGLES 1.0
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.
OpenGLES 1.1
Версию OpenGL ES 1.1 поддерживают:
OpenGLES 2.0
При поддержке:
OpenGLES 3.0
При поддержке:
- Android, начиная с версии 4.3, на устройствах с соответствующим оборудованием и драйверами, включая:
- iOS начиная с версии 7 на следующих устройствах:
- BlackBerry 10 OS, начиная с версии 10.2, на следующих устройствах:
Поддерживается некоторыми последними версиями этих графических процессоров: [46] [47]
- Adreno 300 и 400 серии ( Android , BlackBerry 10 , Windows10 Windows RT )
- Серия Mali T600 и более поздние версии (Android, Linux , Windows 7)
- PowerVR Series6 ( iOS , Linux)
- Виванте (Android, OS X 10.8.3, Windows 7)
- Nvidia (Android), Tesla G80+: Linux, Windows 7+
- Intel HD Graphics Sandy Bridge и выше (Linux) [42]
- AMD Terascale и актуальная GCN-архитектура (Windows, Linux)
- LLVMpipe и Softpipe: программные драйверы в Mesa [43]
- VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)
OpenGLES 3.1
Поддерживается Windows, Linux, Android (начиная с версии 5.0) на устройствах с соответствующим оборудованием и драйверами, [48] включая:
- Серия Adreno 400 [49] [50]
- Серия 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 почти без трафаретного текстурирования) [42]
- Mali T6xx (midgard) серии и далее [51] (Android, Linux)
- Nvidia GeForce серии 400 и выше (Windows, Linux)
- Nvidia Tegra K1 (Android, Linux)
- Nvidia Tegra X1 (Android)
- PowerVR серии 6, 6XE, 6XT, 7XE и 7XT (Linux, Android)
- Vivante серии GC2000 и далее (опционально для GC800 и GC1000) [52]
- panfrost: поддержка ARM panfrost (Linux Mesa 22.0)
- v3d: Драйвер для Broadcom VideoCore в Mesa (Linux)
- VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)
- LLVMpipe: программный драйвер в Mesa 20.2 (Linux)
- softpipe: программный драйвер в Mesa 20.3 (Linux)
- Zink: драйвер эмуляции в Mesa 21.1 (Linux)
- d3d12: драйвер WSL2 Linux для Microsoft 10+ (Mesa 22.0)
- Графика Apple M1 и M2 в Fedora Asahi Remix (Linux)
Пакет расширений Android
Android Extension Pack (AEP) — это набор расширений OpenGL ES 3.1, все из которых объединены в одно расширение, представленное Google в 2014 году. Это позволяет приложениям использовать все функции набора расширений, при этом проверяя наличие только одного из них. AEP был официально добавлен в Android Lollipop для предоставления дополнительных функций, таких как тесселяция, по сравнению с тем, что официально было в редакции GLES 3.1. Обновление OpenGL ES 3.2 в значительной степени состоит из дополнений AEP, которые уже присутствуют в настольном OpenGL. [53]
OpenGLES 3.2
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) на устройствах с соответствующим оборудованием и драйверами, включая:
- Adreno 420 и новее (Android, Linux (freedreno))
- Архитектура AMD GCN (Windows, Linux (Mesa 18.2 с radeonSI))
- Intel HD Graphics Skylake и выше (Linux) [42]
- Mali-T760 и новее (Android, Linux)
- Серия Nvidia GeForce 400 (Fermi) и более новые (Windows, Linux) [55]
- VIRGL: виртуальный драйвер для виртуальных машин в 2018 году с Mesa 18.1 (см. Mesamatrix.net)
- LLVMpipe: программный драйвер в Mesa 20 (Linux)
- Zink: Драйвер эмуляции Vulkan в Mesa 21.2 (Linux)
Устаревание на платформах Apple
OpenGL ES (и OpenGL) был объявлен устаревшим в операционных системах Apple в пользу собственного графического API Metal , но всё ещё работал по крайней мере до iOS 12. [ 56]
Будущее
В настоящее время нет плана для новой базовой версии OpenGL ES, поскольку принятие Vulkan , как считается, заменит его во встроенных и мобильных приложениях. Разработка расширений OpenGL ES продолжается по состоянию на 2017 год. [57]
Совместимость с OpenGL
Для эмуляции вызовов OpenGL с использованием GL ES создано несколько библиотек:
Смотрите также
Ссылки
- ^ «Khronos расширяет сферу применения экосистемы 3D Open Standard». 10 августа 2015 г.
- ^ "Обзор OpenGL ES - The Khronos Group Inc". The Khronos Group . 2011-07-19. Архивировано из оригинала 2024-09-14.
- ^ ab "3D Graphics API State of the Union: SIGGRAPH 2015" (PDF) . Khronos .
Промышленность поставит >1,7 млрд устройств в 2015 году
- ^ Hruska, Joel (4 марта 2015 г.). «Еще не умер: Mantle от AMD поддерживает новый API Vulkan и усилия в области виртуальной реальности». ExtremeTech . Ziff Davis.
- ^ «Какие версии GLSL можно использовать в OpenGL ES 2.0?». Stack Overflow.
- ^ https://www.khronos.org/registry/OpenGL/specs/es/1.0/opengles_spec_1_0.pdf [ пустой URL-адрес PDF ]
- ^ http://developer.amd.com/wordpress/media/2012/10/GDC06-GLES_Tutorial_Day-Munshi-OpenGLES_Overview.pdf [ пустой URL-адрес PDF ]
- ^ https://www.khronos.org/registry/OpenGL/specs/es/1.1/es_full_spec_1.1.pdf [ пустой URL-адрес PDF ]
- ^ "переполнение стека: glGenFramebuffersOES против glGenFramebuffers?" . Получено 2022-04-19 .
- ^ "Khronos Press Releases - OpenGL ES 2.0". Khronos.org. 2007-03-05. Архивировано из оригинала 2010-12-28 . Получено 2010-12-23 .
- ^ Эдвард Энджел, Дэйв Шрайнер, Интерактивная компьютерная графика: подход сверху вниз с использованием OpenGL на основе шейдеров , 6-е издание, стр. xxi-xxii, ISBN 978-0-13-254523-5
- ^ "Язык шейдеров OpenGL® ES" (PDF) . Khronos.org . Получено 16.02.2013 .
- ^ «Графическая система OpenGL(R): спецификация (версия 4.1 (основной профиль)» (PDF) . 25 июля 2010 г.
- ^ https://www.khronos.org/registry/OpenGL/specs/es/2.0/es_full_spec_2.0.pdf [ пустой URL-адрес PDF ]
- ^ "OpenGL© ES – Common Profile Specification 2.0.25 (Difference Specification)" (PDF) . 2 ноября 2010 г.
- ^ ab "Руководство по программированию OpenGL ES 3.0" (PDF) . Pearson Education, Inc . Получено 2022-04-18 .
- ^ "Реестр Khronos OpenGL ES - The Khronos Group Inc" . Реестр.khronos.org .
- ^ "Khronos выпускает спецификацию OpenGL ES 3.0, чтобы вывести мобильную 3D-графику на новый уровень". Khronos. 2012-08-06 . Получено 2012-08-06 .
- ^ "WebGL: 2D и 3D графика для веба". Mozilla . Получено 2023-06-30 .
- ^ "Спецификация WebGL 2.0". registry.khronos.org .
- ^ https://www.khronos.org/registry/OpenGL/specs/es/3.0/es_spec_3.0.pdf [ пустой URL-адрес PDF ]
- ^ "GLSL ES 3.0 Specification" (PDF) . Khronos . Получено 2023-06-30 .
- ^ "Реестр Khronos OpenGL ES - The Khronos Group Inc" . Реестр.khronos.org .
- ^ "Khronos выпускает спецификацию OpenGL ES 3.1". Khronos.org. 2014-03-17 . Получено 2014-03-17 .
- ^ https://www.khronos.org/registry/OpenGL/specs/es/3.1/es_spec_3.1.pdf [ пустой URL-адрес PDF ]
- ^ "Реестр Khronos OpenGL ES - The Khronos Group Inc" . Реестр.khronos.org .
- ^ https://www.khronos.org/registry/OpenGL/specs/es/3.2/es_spec_3.2.pdf [ пустой URL-адрес PDF ]
- ^ https://www.khronos.org/registry/OpenGL/specs/es/3.2/GLSL_ES_Specification_3.20.pdf [ пустой URL-адрес PDF ]
- ^ «Следующее поколение OpenGL становится Vulkan: опубликованы дополнительные подробности».
- ^ "Платформа Android". Разработчики Android .
- ^ "Symbian OS Version 8.0 Product sheet". 2008-03-30. Архивировано из оригинала 2008-03-30 . Получено 2008-03-30 .
- ^ Дьюдер, Джанель (2022-12-09). "OpenGL ES - Разработка игр для Symbian". 25 лет программирования . Получено 2023-01-14 .
- ^ "Использование OpenGL ES". Платформа разработки программного обеспечения QNX (v6.5.0) . QNX . Получено 2011-01-08 .
- ^ "Демонстрация OpenGL ES в формате PPT". 21 ноября 2021 г.
- ^ "Презентация OpenGL ES/PSGL в формате PPT". Sony . Khronos. 21 ноября 2021 г.
- ^ "OpenGL ES SDK доступен для Nokia 6630". Форумы Khronos . 2004-09-22 . Получено 2023-01-14 .
- ^ "Новое в этой бета-версии". Заметки о выпуске - Приложение BlackBerry Java . Research in Motion . Архивировано из оригинала 2009-12-02 . Получено 2009-12-08 .
- ^ Кох, Дамиан (29.11.2009). «Чего ожидать от смартфонов BlackBerry». CNET Asia . Архивировано из оригинала 13.12.2009 . Получено 08.12.2009 .
- ^ ab "PDK - Обзор". HP Palm Developer Center. Архивировано из оригинала 2011-01-01 . Получено 2010-12-23 .
- ^ "DMP объявляет о принятии Nintendo PICA 200, совместимого с OpenGL ES 1.1". 2010-06-21 . Получено 2013-06-02 .
- ^ "Спецификации Android 2.2". 2010-07-01. Архивировано из оригинала 2010-10-11.
- ^ abcd "Расширения и возможности Mesa OpenGL". people.freedesktop.org .
- ^ ab "Расширения и возможности Mesa OpenGL". people.freedesktop.org .
- ^ "Программное обеспечение Maemo - Nokia > Мобильный компьютер Nokia N900 > Технические характеристики". Nokia Corporation. Архивировано из оригинала 29 октября 2009 года . Получено 12 января 2010 года .
- ^ "iOS 8 для разработчиков". Разработчик Apple.
- ^ "Продукты, соответствующие Khronos" . 21 ноября 2021 г.
- ^ Саг, Аншель (2013-04-11). "Состояние OpenGL ES 3.0: кто что получил". Bright Side of News . Архивировано из оригинала 2013-06-15 . Получено 2015-12-22 .
- ^ "Продукты, совместимые с OpenGL ES3.1" . Получено 2014-08-11 .
- ^ "Графические процессоры Adreno™". Qualcomm . Получено 2014-08-11 .
- ^ "GL ES 3.1 на Adreno 3xx?" . Получено 2014-08-11 .
- ^ "Исследована архитектура Mali Midgard от ARM". AnandTech . Получено 11 августа 2014 г.
- ^ «Ядра Vivante Vega для 3D» . Виванте . Проверено 10 декабря 2014 г.
- ^ "Khronos представляет OpenGL ES 3.2 и новые расширения GL, но на этой неделе нет Vulkan". 10 августа 2015 г. Получено 11 августа 2015 г.
- ^ "OpenGL ES 3.2 и Vulkan – все, что вам нужно знать". Android Authority . 2015-08-15 . Получено 2015-12-22 .
- ^ "NVIDIA выпускает драйверы Game Ready 358.50 для Star Wars Battlefront". AnandTech . Получено 2015-10-07 .
- ^ Apple Inc. "Что нового в iOS - Apple Developer". developer.apple.com . Получено 2018-08-07 .
Приложения, созданные с использованием OpenGL ES, продолжат работать в iOS 12, но OpenGL ES устарел в iOS 13.
- ^ Khronos. "Vulkan, OpenGL и OpenGL ES" (PDF) . www.khronos.org . Получено 24.04.2020 .
- ^ "p3/regal: Regal для OpenGL". GitHub. 18 октября 2021 г.
- ^ Маккатчан, Джон (7 сентября 2012 г.). «Подробнее: внедрение Regal OpenGL в собственный клиент». Gamasutra.
- ^ "GL4ES - Драйвер OpenGL для оборудования GLES". GitHub .
Дальнейшее чтение
- Гинзбург, Дэн; Пурномо, Будириджанто; Шрейнер, Дэйв; Мунши, Аафтаб (2014). Руководство по программированию OpenGL ES 3.0 . Аддисон-Уэсли Профессионал. ISBN 978-0-321-93388-1.
- Пулли, Кари; Аарнио, Томи; Миеттинен, Вилле; Роймела, Киммо и Ваарала, Яни (2007). Мобильная 3D-графика с OpenGL ES и M3G . Морган Кауфманн. ISBN 978-0-12-373727-4.
- Astle, Dave & Durnil, David (2004). Разработка игр OpenGL ES . Технология курса PTR. ISBN 1-59200-370-2.
- Пулли, Кари; Аарнио, Томи; Роймела, Киммо и Ваарала, Яни (2005). «Проектирование интерфейсов графического программирования для мобильных устройств». IEEE Computer Graphics and Applications . 25 (6). IEEE CG&A 2005: 66–75. doi :10.1109/MCG.2005.129. PMID 16315479. S2CID 8177273.
Внешние ссылки
В Wikibooks есть книга по теме: Программирование OpenGL/Обзор OpenGL ES
- Официальный сайт
- Публичное отслеживание ошибок
- Компании, соответствующие OpenGL ES
- Публичные форумы
- Список устройств, совместимых с OpenGL ES
- Домашняя страница OpenGL
- Эмулятор OpenGL ES 1.1 и 2.0 от ARM Ссылка непригодна для использования. Не нажимайте.
- Эмулятор OpenGL ES 3.0 от ARM Ссылка непригодна для использования. Не нажимайте.