OpenGL ES
OpenGL for Embedded Systems is a subset of the OpenGL computer graphics rendering application programming interface for rendering 2D and 3D computer graphics such as those used by video games, typically hardware-accelerated using a graphics processing unit. 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".
The API is cross-language and multi-platform. The libraries GLUT and GLU are not available for OpenGL ES. OpenGL ES is managed by the non-profit technology consortium Khronos Group. Vulkan, a next-generation API from Khronos, is made for simpler high performance drivers for mobile and desktop devices.
Versions
Several versions of the OpenGL ES specification now exist. OpenGL ES 1.0 is drawn up against the OpenGL 1.3 specification, OpenGL ES 1.1 is defined relative to the OpenGL 1.5 specification and OpenGL ES 2.0 is defined relative to the OpenGL 2.0 specification. This means that, for example, an application written for OpenGL ES 1.0 should be easily portable to the desktop OpenGL 1.3; as the OpenGL ES is a stripped-down version of the API, the reverse may or may not be true, depending on the particular features used.OpenGL ES comes with its own version of shading language, which is different from OpenGL SL.
Version 1.0 and 1.1 both have common and common lite profiles, the difference being that the common lite profile only supports fixed-point instead of floating point data type support, whereas common supports both.
OpenGL ES 1.0
OpenGL ES 1.0 was released publicly July 28, 2003. OpenGL ES 1.0 is based on the original OpenGL 1.3 API, with much functionality removed and a little bit added. One significant difference between OpenGL and OpenGL ES is that OpenGL ES removed the need to bracket OpenGL library calls withglBegin
and glEnd
. Other significant differences are that the calling semantics for primitive rendering functions were changed in favor of vertex arrays, and fixed-point data types were introduced for vertex coordinates. Attributes were also added to better support the computational abilities of embedded processors, which often lack a floating point unit. Many other functions and rendering primitives were removed in version 1.0 to produce a lightweight interface, including:- quad and polygon rendering primitives,
- texgen, line and polygon stipple,
- polygon mode and antialiased polygon rendering are not supported, although rendering using multisample is still possible,
-
ARB_Image
pixel class operation are not supported, nor are bitmaps or 3D textures, - several of the more technical drawing modes are eliminated, including frontbuffer and accumulation buffer. Bitmap operations, specifically copying pixels is not allowed, nor are evaluators, nor selection operations,
- display lists and feedback are removed, as are push and pop operations for state attributes,
- some material parameters were removed, including back-face parameters and user defined clip planes.
Extension Name | Sort #Number | Details |
OpenGL ES Extension #4 | ||
OpenGL ES Extension #6 | ||
OpenGL ES Extension #9 | ||
OpenGL ES Extension #16 | ||
OpenGL ES Extension #17 | ||
OpenGL ES Extension #18 | ||
optional | Mesa | |
OpenGL ES Extension #5 |
OpenGL ES 1.1
OpenGL ES 1.1 added features such as mandatory support for multitexture, better multitexture support, automatic mipmap generation, vertex buffer objects, state queries, user clip planes, and greater control over point rendering.Actual Version is 1.1.12.
Extension Name | Sort #Number |
OpenGL ES Extension #7 | |
OpenGL ES Extension #11 | |
OpenGL ES Extension #14 | |
OpenGL ES Extension #15 | |
optional | Mesa |
OpenGL ES Extension #23 | |
OpenGL ES Extension #87 | |
OpenGL ES Extension # TBD |
OpenGL ES 2.0
OpenGL ES 2.0 was publicly released in March 2007. It is roughly based on OpenGL 2.0, but it eliminates most of the fixed-function rendering pipeline in favor of a programmable one in a move similar to the transition from OpenGL 3.0 to 3.1. Control flow in shaders is generally limited to forward branching and to loops where the maximum number of iterations can easily be determined at compile time. Almost all rendering features of the transform and lighting stage, such as the specification of materials and light parameters formerly specified by the fixed-function API, are replaced by shaders written by the graphics programmer. As a result, OpenGL ES 2.0 is not backward compatible with OpenGL ES 1.1. Some incompatibilities between the desktop version of OpenGL and OpenGL ES 2.0 persisted until OpenGL 4.1, which added theGL_ARB_ES2_compatibility
extension.Actual version is 2.0.25.
The Khronos Group has written a document describing the differences between OpenGL ES 2.0 and ordinary OpenGL 2.0.
Extension Name | Sort #Number |
OpenGL ES Extension #20 | |
OpenGL ES Extension #37 | |
OpenGL ES Extension #24 | |
OpenGL ES Extension #44 | |
OpenGL ES Extension #26 | |
OpenGL ES Extension #27 | |
OpenGL ES Extension #47 | |
OpenGL ES Extension #29 | |
OpenGL ES Extension #43 | |
OpenGL ES Extension #30 | |
OpenGL ES Extension #33 | |
OpenGL ES Extension #38 | |
additional | in MESA |
OpenGL ES Extension #23 | |
OpenGL ES Extension #87 | |
OpenGL ES Extension #35, extended in ES 3.0 and 3.1 | |
OpenGL ES Extension #36, extended in ES 3.0 and 3.1 | |
OpenGL ES Extension #45 | |
OpenGL ES Extension #116 | |
OpenGL ES Extension #136 | |
OpenGL ES Extension #41 | |
OpenGL ES Extension #42 | |
OpenGL ES Extension #49 | |
OpenGL ES Extension #51 | |
OpenGL ES Extension #64 | |
OpenGL ES Extension #65 | |
OpenGL ES Extension #66 | |
OpenGL ES Extension #69 | |
OpenGL ES Extension #86 | |
OpenGL ES Extension #90 | |
OpenGL ES Extension #103 | |
OpenGL ES Extension #151 | |
OpenGL ES Extension #188 | |
OpenGL ES Extension #91 | |
OpenGL ES Extension #92 | |
OpenGL ES Extension #93 | |
OpenGL ES Extension #94 | |
OpenGL ES Extension #111 |
OpenGL ES 3.0
The OpenGL ES 3.0 specification was publicly released in August 2012. OpenGL ES 3.0 is backwards compatible with OpenGL ES 2.0, enabling applications to incrementally add new visual features to applications. OpenGL 4.3 provides full compatibility with OpenGL ES 3.0. Version 3.0 is also the basis for WebGL 2.0.Actual is version 3.0.6.
New functionality in the OpenGL ES 3.0 specification includes:
- multiple enhancements to the rendering pipeline to enable acceleration of advanced visual effects including: occlusion queries, transform feedback, instanced rendering and support for four or more rendering targets,
- high quality ETC2 / EAC texture compression as a standard feature, eliminating the need for a different set of textures for each platform,
- a new version of the GLSL ES shading language with full support for integer and 32-bit floating point operations;
- greatly enhanced texturing functionality including guaranteed support for floating point textures, 3D textures, depth textures, vertex textures, NPOT textures, R/RG textures, immutable textures, 2D array textures, swizzles, LOD and mip level clamps, seamless cube maps and sampler objects,
- an extensive set of required, explicitly sized texture and render-buffer formats, reducing implementation variability and making it much easier to write portable applications.
Extension Name | Sort #Number | Details |
OpenGL ES Extension #71 | ||
OpenGL ES Extension #191 | ||
additional | in MESA | |
OpenGL ES Extension #162 | ||
OpenGL ES Extension #182 | ||
OpenGL ES Extension #204 | ||
OpenGL ES Extension #220 | ||
OpenGL ES Extension #495 |
OpenGL ES 3.1
The OpenGL ES 3.1 specification was publicly released in March 2014.New functionality in OpenGL ES 3.1 includes:
- Compute shaders
- Independent vertex and fragment shaders
- Indirect draw commands
Extension Name | Sort #Number |
ARB Extension #120 | |
ARB Extension #122 | |
ARB Extension #128 | |
ARB Extension #130 | |
ARB Extension #134 | |
ARB Extension #114 | |
ARB Extension #115 | |
ARB Extension #137 | |
ARB Extension #97 | |
ARB Extension #138 | |
ARB Extension #125 | |
ARB Extension #87 | |
ARB Extension #116 | |
ARB Extension #136 | |
ARB Extension #141 | |
ARB Extension #67 | |
OpenGL ES Extension #161 | |
optional | Mesa |
ARB Extension #181 | |
OpenGL ES Extension #218 | |
OpenGL ES Extension #200 | |
OpenGL ES Extension #206 | |
OpenGL ES Extension #207 |
OpenGL ES 3.2
The OpenGL ES 3.2 specification was publicly released in August 2015.New capabilities in OpenGL ES 3.2 include:
- 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.
Extension Name | Sort #Number |
OpenGL ES Extension #168 | |
OpenGL ES Extension #137 | |
OpenGL ES Extension #118 | |
OpenGL ES Extension #190 | |
OpenGL ES Extension #208 | |
OpenGL ES Extension #209 | |
OpenGL ES Extension #219 | |
OpenGL ES Extension #210 | |
OpenGL ES Extension #211 | |
OpenGL ES Extension #169 | |
OpenGL ES Extension #170 | |
OpenGL ES Extension #171 | |
OpenGL ES Extension #213 | |
OpenGL ES Extension #172 | |
OpenGL ES Extension #214 | |
OpenGL ES Extension #215 | |
OpenGL ES Extension #216 | |
OpenGL ES Extension #217 | |
OpenGL ES Extension #173 | |
OpenGL ES Extension #174 | |
OpenGL ES Extension #117 | |
OpenGL ES Extension #212 | |
optional | Mesa |
OpenGL ES Extension #117, ARB Extension #118 | |
OpenGL ES Extension #168 | |
OpenGL ES Extension #249 | |
OpenGL ES Extension #267 |
Some more extensions are developed or in Development in Mesa for next OpenGL ES Version.
Next generation API is Vulkan.
Platform usage
For complete list of companies and their conformant products, viewOpenGL ES 1.0
OpenGL ES 1.0 added an official 3D graphics API to the Android and Symbian operating systems, as well as by QNX It is also supported by the PlayStation 3 as one of its official graphics APIs with Nvidia's Cg in lieu of GLSL. The PlayStation 3 also includes several features of the 2.0 version of OpenGL ES.OpenGL ES 1.1
The 1.1 version of OpenGL ES is supported by:- Android 1.6
- Apple iOS for iPad, iPhone, and iPod Touch
- RIM's BlackBerry 5.0 operating system series
- BlackBerry PlayBook
- BlackBerry BB10
- Various Nokia phones such as Nokia N95, N93, N93i, and N82.
- The Palm webOS, using the Plug-in Development Kit
- Nintendo 3DS
OpenGL ES 2.0
- The Android platform since Android 2.0 through NDK and Android 2.2 through Java
- AmigaOS on AmigaOne with Warp3D Nova and compatible RadeonHD graphics card.
- Apple iOS 5 or later in iPad, iPad Mini, iPhone 3GS or later, and iPod Touch 3rd generation or later
- BlackBerry devices with BlackBerry OS 7.0 and Blackberry 10, as well as the BlackBerry PlayBook
- Google Native Client
- Intel HD Graphics 965G / X3000 and higher
- Nvidia, Curie NV40+: Linux, Windows
- Various Nokia phones
- Palm webOS, using the Plug-in Development Kit
- The Pandora console
- The Raspberry Pi
- The Odroid
- Various Samsung mobile phones
- Web browsers
- The GCW Zero console
- The PlayStation Vita portable console
- The PlayStation 4 console
OpenGL ES 3.0
- Android since version 4.3, on devices with appropriate hardware and drivers, including:
- * Nexus 7
- * Nexus 4
- * Nexus 5
- * Nexus 10
- * HTC Butterfly S
- * HTC One/One Max
- * LG G2
- * LG G Pad 8.3
- * The Raspberry Pi 4
- * Samsung Galaxy J5
- * Samsung Galaxy J5
- * Samsung Galaxy S4
- * Samsung Galaxy S5
- * Samsung Galaxy Note 3
- * Samsung Galaxy Note 10.1
- * Sony Xperia M
- * Sony Xperia Z/ZL
- * Sony Xperia Z1
- * Sony Xperia Z Ultra
- * Sony Xperia Tablet Z
- iOS since version 7, on devices including:
- * iPhone 5S
- * iPad Air
- * iPad mini with Retina display
- BlackBerry 10 OS since version 10.2, on devices including:
- * BlackBerry Z3
- * BlackBerry Z30
- * BlackBerry Passport
- Adreno 300 and 400 series
- Mali T600 series onwards
- PowerVR Series6
- Vivante
- Nvidia, Tesla G80+: Linux, Windows 7+
- Intel HD Graphics Sandy Bridge and higher
- AMD Terascale and actual GCN-architecture
- LLVMpipe and Softpipe: soft drivers in Mesa
- VIRGL: virtual Driver for virtual machines in 2018 with Mesa 18.1
OpenGL ES 3.1
- Adreno 400 series
- Adreno 500 series
- AMD Terascale and actual GCN-architecture
- Intel HD Graphics for Intel Atom Z3700 series
- Intel HD Graphics for Intel Celeron N and J series
- Intel HD Graphics for Intel Pentium N and J series
- Intel HD Graphics Haswell and higher
- Mali T6xx series onwards
- Nvidia GeForce 400 series onwards
- Nvidia Tegra K1
- Nvidia Tegra X1
- PowerVR Series 6, 6XE, 6XT, 7XE and 7XT
- Vivante GC2000 series onwards
- VIRGL: virtual Driver for virtual machines in 2018 with Mesa 18.1
[|Android Extension Pack]
OpenGL ES 3.2
OpenGL ES 3.2, incorporating the Android Extension Pack, "boasts a small number of improvements over last year’s OpenGL ES 3.1. Both make use of similar features from the AEP. From the AEP, OpenGL ES 3.2 compliant hardware will support Tessellation for additional geometry detail, new geometry shaders, ASTC texture compression for a smaller memory bandwidth footprint, floating point render targets for high accuracy compute processes, and new debugging features for developers. These high-end features are already found in the group’s full OpenGL 4 specification."Supported by Windows, Linux, Android on devices with appropriate hardware and drivers, including:
- Adreno 420 and newer
- AMD GCN-architecture
- Intel HD Graphics Skylake and higher
- Mali-T760 and newer
- Nvidia GeForce 400 series and newer
- VIRGL: virtual Driver for virtual machines in 2018 with Mesa 18.1
Deprecation in Apple devices
The Future
No plan for new core version, because Vulkan's momentum is displacing itOpenGL compatibility
A few libraries have been created to emulate OpenGL calls using GL ES:- Nvidia offers a 2-clause BSD licensed library called Regal, originally started by Cass Everitt. It was last updated in 2016. Regal is used for example by Google's NaCl.
- The MIT licensed GL4ES emulates OpenGL 2.1/1.5 using GL ES 2.0/1.1. It is based on glshim.