Введение

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

Версии

В настоящее время существует несколько версий спецификации 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 имеют профили Common (CM) и Common Lite (CL), при этом профиль Common Lite поддерживает только данные с фиксированной точкой, а не с плавающей точкой, в то время как профиль Common поддерживает оба типа данных.

OpenGL ES 1.1 (вводится в действие с 1 января 2013)

OpenGL ES 1.1 добавил такие функции, как обязательная поддержка мультитекстур, улучшенная поддержка мультитекстур (включая комбинаторы и операции с текстурой, использующие скалярное произведение), автоматическую генерацию MIP-карт, объекты буфера вершин, запросы состояния, плоскости отсечения, задаваемые пользователем, и больший контроль над рендерингом точек. Текущая версия – 1.1.12. Название расширения Сортировка #НомерOES отрисовка текстуры OpenGL ES Расширение #7 OES матрица получения OpenGL ES Расширение #11OES размер точек OpenGL ES Расширение #14OES точечные спрайты OpenGL ES Расширение #15 Опционально Mesa (все драйверы)OES объект кадрового буфера OpenGL ES Расширение #10 (стал основным в ES 2.0) OES изображение EGL OpenGL ES Расширение #23 OES внешнее изображение EGL OpenGL ES Расширение #87 OES требуемый внутренний формат OpenGL ES Расширение # TBD

OpenGL ES 3.2 (англ.) (англ.) (англ.)

Спецификация OpenGL ES 3.2 была опубликована в августе 2015 года. Новые возможности OpenGL ES 3.2 включают:
Геометрические и тесселяционные шейдеры для эффективной обработки сложных сцен на GPU. Буферы кадра с плавающей точкой для повышения гибкости при выполнении вычислительных операций с повышенной точностью. Сжатие ASTC для уменьшения объема используемой памяти и пропускной способности при обработке текстур. Улучшенные режимы смешивания для сложного композитинга и обработки нескольких цветовых буферов. Расширенные типы текстурных целей, такие как буферы текстур, многовыборочные 2D массивы и массивы кубических карт. Функции отладки и повышения надежности для упрощения разработки кода и безопасного выполнения. Актуальная версия – 3.2.6 от июля 2019 года. Расширение Name Sort #NumberKHR blend equation advancedOpenGL ES Extension #168EXT color buffer floatOpenGL ES Extension #137KHR debugOpenGL ES Extension #118KHR robustnessOpenGL ES Extension #190OES copy imageOpenGL ES Extension #208OES draw buffers indexedOpenGL ES Extension #209OES draw elements base vertexOpenGL ES Extension #219OES geometry shaderOpenGL ES Extension #210 OES gpu shader5OpenGL ES Extension #211 OES sample shadingOpenGL ES Extension #169OES sample variablesOpenGL ES Extension #170OES shader image atomicOpenGL ES Extension #171OES shader io blocksOpenGL ES Extension #213OES shader multisample interpolationOpenGL ES Extension #172OES tessellation shaderOpenGL ES Extension #214OES texture border clampOpenGL ES Extension #215OES texture bufferOpenGL ES Extension #216OES texture cube map arrayOpenGL ES Extension #217OES texture stencil8OpenGL ES Extension #173OES texture storage multisample 2d arrayOpenGL ES Extension #174KHR texture compression astc ldrOpenGL ES Extension #117 (LDR only)OES primitive bounding boxOpenGL ES Extension #212optional Mesa (all drivers OpenGL ES 3.2+)KHR texture compression astc hdrOpenGL ES Extension #117 (LDR included), ARB Extension #118KHR blend equation advanced coherentOpenGL ES Extension #168KHR texture compression astc sliced 3dOpenGL ES Extension #249 (ARB Extension #189)OES viewport arrayOpenGL ES Extension #267

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

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

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

Оценка в устройствах Apple

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

Будущее

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