Введение
OpenGL для встраиваемых систем (OpenGL ES или GLES) — это подмножество графического API OpenGL, предназначенное для рендеринга двухмерной и трехмерной компьютерной графики, например, используемой в видеоиграх, и обычно аппаратно ускоренное с помощью графического процессора (GPU). Он разработан для встраиваемых систем, таких как смартфоны, планшетные компьютеры, игровые консоли и карманные персональные цифровые помощники (ПКА). OpenGL ES является "наиболее широко используемым 3D графическим API в истории".
OpenGL for Embedded Systems (OpenGL ES or GLES) is a subset of the OpenGL computer graphics rendering application programming interface (API) for rendering 2D and 3D computer graphics such as those used by video games, typically hardware accelerated using a graphics processing unit (GPU). It is designed for embedded systems like smartphones, tablet computers, video game consoles and PDAs. OpenGL ES is the "most widely deployed 3D graphics API in history".
Версии
В настоящее время существует несколько версий спецификации 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
Geometry and tessellation shaders to efficiently process complex scenes on the GPU. Floating point render targets for increased flexibility in higher precision compute operations. ASTC compression to reduce the memory footprint and bandwidth used to process textures. Enhanced blending for sophisticated compositing and handling of multiple color attachments. Advanced texture targets such as texture buffers, multisample 2D array and cube map arrays. Debug and robustness features for easier code development and secure execution. Actual State is 3.2.6 July 2019. Extension 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 год.