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, computer tablets, video game consoles
and PDAs. Open GL 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 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 with glBegin 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. = 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. = OpenGL ES 2.0 =
OpenGL ES 2.0 was publicly released in March 2007. It is based roughly 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 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 the
GL_ARB_ES2_compatibility extension. = 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. 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. = 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
OpenGL ES 3.1 is backward compatible with OpenGL ES 2.0 and 3.0, thus
enabling applications to incrementally incorporate new features.
= 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. Platform usage
For complete list of companies and their conformant products, view here
= OpenGL 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 =
Supported by: The Android platform since Android 2.0
through NDK and Android 2.2 through Java 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
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 = OpenGL ES 3.0 =
Supported by: 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
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 Supported by some recent versions of
these GPUs: Adreno 300 and 400 series
Mali T600 series onwards PowerVR Series6
Vivante Nvidia
Intel = OpenGL ES 3.1 =
Supported by Windows, Linux, Android on devices with appropriate hardware and
drivers, including: Adreno 400 series
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
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
Android Extension Pack Android Extension Pack is a superset of
OpenGL ES 3.1 introduced by Google in 2014. The AEP was officially added to
Android Lollipop to provide extra features like tessellation over what was
officially in the GLES 3.1 revision. The OpenGL ES 3.2 update is largely made up
of the AEP additions, which are already present in desktop OpenGL.
= OpenGL ES 3.2 = OpenGL ES 3.2 works on the same hardware
as OpenGL 3.1. It incorporates Android Extension Pack into it: "OpenGL ES 3.2
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: Nvidia GeForce 400 series and newer
Open GL SC 2.0 and Vulkan/SPIR will converge in a "New Generation API for
safety certifiable graphics AND compute".
OpenGL compatibility For full compatibility with OpenGL on
ES-only devices, Nvidia offers a BSD licensed library called Regal,
originally started by Cass Everitt. Regal is used for example by Google's
NaCl. References
See also OpenGL – original cross-language,
multi-platform API for rendering 2D and 3D vector graphics
OpenSL ES – API for audio on embedded systems, developed by the Khronos Group
Vulkan – low-level, cross-platform 2D and 3D graphics API, the "next
generation OpenGL initiative" Further reading
Ginsburg, Dan; Purnomo, Budirijanto; Shreiner, Dave; Munshi, Aaftab. OpenGL
ES 3.0 Programming Guide. Addison-Wesley Professional. ISBN 0-321-93388-5.
Pulli, Kari; Aarnio, Tomi; Miettinen, Ville; Roimela, Kimmo & Vaarala, Jani.
Mobile 3D Graphics with OpenGL ES and M3G. Morgan Kaufmann. ISBN
0-12-373727-3. Astle, Dave & Durnil, David. OpenGL ES
Game Development. Course Technology PTR. ISBN 1-59200-370-2.
Pulli, Kari; Aarnio, Tomi; Roimela, Kimmo & Vaarala, Jani. Designing
graphics programming interfaces for mobile devices. IEEE CG&A 2005.
External links Official website
Public bug tracking OpenGL ES Conformant companies
Public forums List of OpenGL ES compatible devices
OpenGL home page ANGLE: Almost Native Graphics Layer
Engine, OpenGL ES 2.0 implementation on top of Direct3D 9/11
OpenGL ES 1.1 & 2.0 Emulator from ARM OpenGL ES 3.0 Emulator from ARM