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".
The API is cross-language and multi-platform. The GLU library and the original GLUT are not available for OpenGL ES, freeglut however, supports it. 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.
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 (OpenGL ES SL), which is different from OpenGL SL. [1]
Version 1.0 and 1.1 both have common (CM) and common lite (CL) 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 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 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 (FPU). Many other functions and rendering primitives were removed in version 1.0 to produce a lightweight interface, including:
ARB_Image
pixel class operations, bitmaps, and 3D textures are not supported;The actual version is 1.0.0.2. [2]
Extension Name | Sort #Number | Details |
---|---|---|
OES_byte_coordinates | OpenGL ES Extension #4 | (formerly OpenGL Extension #291) |
OES_compressed_paletted_texture | OpenGL ES Extension #6 | (formerly OpenGL Extension #294) |
OES_fixed_point | OpenGL ES Extension #9 | (formerly OpenGL Extension #292) |
OES_query_matrix | OpenGL ES Extension #16 | (formerly OpenGL Extension #296) |
OES_read_format | OpenGL ES Extension #17 | (formerly OpenGL Extension #295) |
OES_single_precision | OpenGL ES Extension #18 | (formerly OpenGL Extension #293) |
optional | Mesa (most drivers) | |
OES_compressed_ETC1_RGB8_texture | OpenGL ES Extension #5 |
OpenGL ES 1.1 added features such as mandatory support for multitexture, better multitexture support (including combiners and dot product texture operations), automatic mipmap generation, vertex buffer objects, state queries, user clip planes, and greater control over point rendering. [3] Actual Version is 1.1.12. [4]
Extension Name | Sort #Number |
---|---|
OES_draw_texture | OpenGL ES Extension #7 |
OES_matrix_get | OpenGL ES Extension #11 |
OES_point_size_array | OpenGL ES Extension #14 |
OES_point_sprite | OpenGL ES Extension #15 |
optional | Mesa (all drivers) |
OES_framebuffer_object | OpenGL ES Extension #10 (became core in ES 2.0) [5] |
OES_EGL_image | OpenGL ES Extension #23 |
OES_EGL_image_external | OpenGL ES Extension #87 |
OES_required_internalformat | OpenGL ES Extension # TBD |
OpenGL ES 2.0 was publicly released in March 2007. [6] 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. [7] 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. [8] 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. [9] Actual version is 2.0.25. [10]
The Khronos Group has written a document describing the differences between OpenGL ES 2.0 and ordinary OpenGL 2.0. [11]
Extension Name | Sort #Number |
---|---|
OES_texture_cube_map | OpenGL ES Extension #20 |
OES_texture_npot | OpenGL ES Extension #37 |
OES_depth24 | OpenGL ES Extension #24 |
OES_depth_texture | OpenGL ES Extension #44 |
OES_element_index_uint | OpenGL ES Extension #26 |
OES_fbo_render_mipmap | OpenGL ES Extension #27 |
OES_get_program_binary | OpenGL ES Extension #47 |
OES_mapbuffer | OpenGL ES Extension #29 |
OES_packed_depth_stencil | OpenGL ES Extension #43 |
OES_rgb8_rgba8 | OpenGL ES Extension #30 |
OES_stencil8 | OpenGL ES Extension #33 |
OES_vertex_half_float | OpenGL ES Extension #38 |
additional | in MESA (all drivers) |
OES_EGL_image | OpenGL ES Extension #23 (different for 1.1) |
OES_EGL_image_external | OpenGL ES Extension #87 (different for 1.1) |
OES_texture_3D | OpenGL ES Extension #34 (became core in ES 3.0) [12] |
OES_texture_float_linear OES_texture_half_float_linear | OpenGL ES Extension #35, extended in ES 3.0 and 3.1 |
OES_texture_float OES_texture_half_float | OpenGL ES Extension #36, extended in ES 3.0 and 3.1 |
OES_standard_derivatives | OpenGL ES Extension #45 |
OES_vertex_array_object | OpenGL ES Extension #71 (became core in ES 3.0) [12] |
OES_surfaceless_context | OpenGL ES Extension #116 |
OES_depth_texture_cube_map | OpenGL ES Extension #136 |
EXT_texture_filter_anisotropic | OpenGL ES Extension #41 |
EXT_texture_type_2_10_10_10_REV | OpenGL ES Extension #42 |
EXT_texture_compression_dxt1 | OpenGL ES Extension #49 |
EXT_texture_format_BGRA8888 | OpenGL ES Extension #51 |
EXT_discard_framebuffer | OpenGL ES Extension #64 |
EXT_blend_minmax | OpenGL ES Extension #65 |
EXT_read_format_bgra | OpenGL ES Extension #66 |
EXT_multi_draw_arrays | OpenGL ES Extension #69 |
EXT_frag_depth | OpenGL ES Extension #86 |
EXT_unpack_subimage | OpenGL ES Extension #90 |
EXT_texture_rg | OpenGL ES Extension #103 |
EXT_draw_buffers | OpenGL ES Extension #151 |
EXT_compressed_ETC1_RGB8_sub_texture | OpenGL ES Extension #188 |
NV_draw_buffers | OpenGL ES Extension #91 |
NV_fbo_color_attachments | OpenGL ES Extension #92 |
NV_read_buffer | OpenGL ES Extension #93 |
NV_read_depth_stencil | OpenGL ES Extension #94 |
ANGLE_texture_compression_dxt | OpenGL ES Extension #111 |
The OpenGL ES 3.0 specification [13] was publicly released in August 2012. [14] It is backwards compatible with OpenGL ES 2.0, and partially compatible with WebGL 2.0, [15] as WebGL 2.0 was designed to have a high degree of interoperability with OpenGL ES 3.0. [16] The current version of the OpenGL ES 3.0 standard is 3.0.6, released in November 2019. [17]
New functionality in the OpenGL ES 3.0 specification includes:
Extension Name | Sort #Number | Details |
---|---|---|
KHR_context_flush_control | OpenGL ES Extension #191 | (for GL_KHR_context_flush_control only) |
additional | in MESA (all drivers) | |
OES_texture_compression_astc | OpenGL ES Extension #162 | |
EXT_texture_border_clamp | OpenGL ES Extension #182 | |
EXT_draw_elements_base_vertex | OpenGL ES Extension #204 | |
OES_EGL_image_external_essl3 | OpenGL ES Extension #220 | |
MESA_shader_integer_functions | OpenGL ES Extension #495 |
The OpenGL ES 3.1 specification [19] was publicly released in March 2014. New functionality in OpenGL ES 3.1 includes: [20]
OpenGL ES 3.1 is backward compatible with OpenGL ES 2.0 and 3.0, thus enabling applications to incrementally incorporate new features. Actual Version is 3.1-(November 2016). [21]
Extension Name | Sort #Number |
---|---|
ARB_arrays_of_arrays | ARB Extension #120 |
ARB_compute_shader | ARB Extension #122 |
ARB_explicit_uniform_location | ARB Extension #128 |
ARB_framebuffer_no_attachments | ARB Extension #130 |
ARB_program_interface_query | ARB Extension #134 |
ARB_shader_atomic_counters | ARB Extension #114 |
ARB_shader_image_load_store | ARB Extension #115 |
ARB_shader_storage_buffer_object | ARB Extension #137 |
ARB_separate_shader_objects | ARB Extension #97 |
ARB_stencil_texturing | ARB Extension #138 |
ARB_vertex_attrib_binding | ARB Extension #125 |
ARB_draw_indirect | ARB Extension #87 |
ARB_shading_language_packing | ARB Extension #116 |
ARB_shader_image_size | ARB Extension #136 |
ARB_texture_storage_multisample | ARB Extension #141 |
ARB_texture_multisample | ARB Extension #67 |
EXT_shader_integer_mix | OpenGL ES Extension #161 |
optional | Mesa (all drivers OpenGL ES 3.1+) |
ARB_sample_locations | ARB Extension #181 |
OES_texture_view | OpenGL ES Extension #218 |
NV_image_formats | OpenGL ES Extension #200 |
EXT_render_snorm | OpenGL ES Extension #206 |
EXT_texture_norm16 | OpenGL ES Extension #207 |
The OpenGL ES 3.2 specification [22] was publicly released in August 2015. New capabilities in OpenGL ES 3.2 include:
Actual State is 3.2.6 July 2019. [23] [24]
Extension Name | Sort #Number |
---|---|
KHR_blend_equation_advanced | OpenGL ES Extension #168 |
EXT_color_buffer_float | OpenGL ES Extension #137 |
KHR_debug | OpenGL ES Extension #118 |
KHR_robustness | OpenGL ES Extension #190 |
OES_copy_image | OpenGL ES Extension #208 |
OES_draw_buffers_indexed | OpenGL ES Extension #209 |
OES_draw_elements_base_vertex | OpenGL ES Extension #219 |
OES_geometry_shader | OpenGL ES Extension #210 |
OES_gpu_shader5 | OpenGL ES Extension #211 |
OES_sample_shading | OpenGL ES Extension #169 |
OES_sample_variables | OpenGL ES Extension #170 |
OES_shader_image_atomic | OpenGL ES Extension #171 |
OES_shader_io_blocks | OpenGL ES Extension #213 |
OES_shader_multisample_interpolation | OpenGL ES Extension #172 |
OES_tessellation_shader | OpenGL ES Extension #214 |
OES_texture_border_clamp | OpenGL ES Extension #215 |
OES_texture_buffer | OpenGL ES Extension #216 |
OES_texture_cube_map_array | OpenGL ES Extension #217 |
OES_texture_stencil8 | OpenGL ES Extension #173 |
OES_texture_storage_multisample_2d_array | OpenGL ES Extension #174 |
KHR_texture_compression_astc_ldr | OpenGL ES Extension #117 (LDR only) |
OES_primitive_bounding_box | OpenGL ES Extension #212 |
optional | Mesa (all drivers OpenGL ES 3.2+) |
KHR_texture_compression_astc_hdr | OpenGL ES Extension #117 (LDR included), ARB Extension #118 |
KHR_blend_equation_advanced_coherent | OpenGL ES Extension #168 |
KHR_texture_compression_astc_sliced_3d | OpenGL ES Extension #249 (ARB Extension #189) |
OpenGL ES Extension #267 |
Some more extensions are developed or in Development in Mesa for next OpenGL ES Version (see Mesamatrix).
Next generation API is Vulkan. [25]
For complete list of companies and their conformant products, view here
OpenGL ES 1.0 added an official 3D graphics API to the Android [26] and Symbian OS v8.0a [27] [28] operating systems, as well as by QNX [29] It is also supported by the PlayStation 3 as one of its official graphics APIs [30] (the other one being low level libgcm library) with Nvidia's Cg in lieu of GLSL. [31] The PlayStation 3 also includes several features of the 2.0 version of OpenGL ES.
The 1.1 version of OpenGL ES is supported by:
Supported by:
Supported by:
Supported by some recent versions of these GPUs: [42] [43]
Supported by Windows, Linux, Android (since version 5.0) on devices with appropriate hardware and drivers, [44] including:
Android Extension Pack (AEP) is a set of OpenGL ES 3.1 extensions, all bundled into a single extension introduced by Google in 2014. This allows applications to use all of the features of the set of extensions, while only testing for the presence of a single one. The AEP was officially added to Android Lollipop to provide extra features like tessellation over what was officially in the GLES 3.1 revision. OpenGL ES 3.2 update is largely made up of the AEP additions, which are already present in desktop OpenGL. [49]
OpenGL ES 3.2, incorporating the Android Extension Pack (AEP), "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." [50] [51]
Supported by Windows, Linux, Android (since version 6.0 possible, 7.0+ Vulkan 1.0 and OpenGL ES 3.2 needed) on devices with appropriate hardware and drivers, including:
OpenGL ES (and OpenGL) was deprecated in Apple's operating systems in favour of its own proprietary Metal graphics API, but still worked in up to at least iOS 12. [53]
There is currently no plan for a new core version of OpenGL ES, as adoption of Vulkan has been deemed to displace it in embedded and mobile applications. Development of extensions to OpenGL ES continues as of 2017. [54]
This section needs expansion. You can help by adding to it. (September 2014) |
A few libraries have been created to emulate OpenGL calls using GL ES:
OpenGL is a cross-language, cross-platform application programming interface (API) for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve hardware-accelerated rendering.
Radeon is a brand of computer products, including graphics processing units, random-access memory, RAM disk software, and solid-state drives, produced by Radeon Technologies Group, a division of AMD. The brand was launched in 2000 by ATI Technologies, which was acquired by AMD in 2006 for US$5.4 billion.
GLX is an extension to the X Window System core protocol providing an interface between OpenGL and the X Window System as well as extensions to OpenGL itself. It enables programs wishing to use OpenGL to do so within a window provided by the X Window System. GLX distinguishes two "states": indirect state and direct state.
OpenVG is an API designed for hardware-accelerated 2D vector graphics. Its primary platforms are mobile phones, gaming & media consoles and consumer electronic devices. It was designed to help manufacturers create more attractive user interfaces by offloading computationally intensive graphics processing from the CPU onto a GPU to save energy. The OpenGL ES library provides similar functionality for 3D graphics. OpenVG is managed by the non-profit technology consortium Khronos Group.
OpenMAX, often shortened as "OMX", is a non-proprietary and royalty-free cross-platform set of C-language programming interfaces. It provides abstractions for routines that are especially useful for processing of audio, video, and still images. It is intended for low power and embedded system devices that need to efficiently process large amounts of multimedia data in predictable ways, such as video codecs, graphics libraries, and other functions for video, image, audio, voice and speech.
The Khronos Group, Inc. is an open, non-profit, member-driven consortium of 170 organizations developing, publishing and maintaining royalty-free interoperability standards for 3D graphics, virtual reality, augmented reality, parallel computation, vision acceleration and machine learning. The open standards and associated conformance tests enable software applications and middleware to effectively harness authoring and accelerated playback of dynamic media across a wide variety of platforms and devices. The group is based in Beaverton, Oregon.
Mesa, also called Mesa3D and The Mesa 3D Graphics Library, is an open source implementation of OpenGL, Vulkan, and other graphics API specifications. Mesa translates these specifications to vendor-specific graphics hardware drivers.
OpenGL Shading Language (GLSL) is a high-level shading language with a syntax based on the C programming language. It was created by the OpenGL ARB to give developers more direct control of the graphics pipeline without having to use ARB assembly language or hardware-specific languages.
A free and open-source graphics device driver is a software stack which controls computer-graphics hardware and supports graphics-rendering application programming interfaces (APIs) and is released under a free and open-source software license. Graphics device drivers are written for specific hardware to work within a specific operating system kernel and to support a range of APIs used by applications to access the graphics hardware. They may also control output to the display if the display driver is part of the graphics hardware. Most free and open-source graphics device drivers are developed by the Mesa project. The driver is made up of a compiler, a rendering API, and software which manages access to the graphics hardware.
Adreno is a series of graphics processing unit (GPU) semiconductor intellectual property cores developed by Qualcomm and used in many of their SoCs.
OpenCL is a framework for writing programs that execute across heterogeneous platforms consisting of central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), field-programmable gate arrays (FPGAs) and other processors or hardware accelerators. OpenCL specifies a programming language for programming these devices and application programming interfaces (APIs) to control the platform and execute programs on the compute devices. OpenCL provides a standard interface for parallel computing using task- and data-based parallelism.
WebGL is a JavaScript API for rendering interactive 2D and 3D graphics within any compatible web browser without the use of plug-ins. WebGL is fully integrated with other web standards, allowing GPU-accelerated usage of physics, image processing, and effects in the HTML canvas. WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.
EGL is an interface between Khronos rendering APIs and the underlying native platform windowing system. EGL handles graphics context management, surface/buffer binding, rendering synchronization, and enables "high-performance, accelerated, mixed-mode 2D and 3D rendering using other Khronos APIs." EGL is managed by the non-profit technology consortium Khronos Group.
The Radeon HD 7000 series, codenamed "Southern Islands", is a family of GPUs developed by AMD, and manufactured on TSMC's 28 nm process.
Adaptive scalable texture compression (ASTC) is a lossy block-based texture compression algorithm developed by Jørn Nystad et al. of ARM Ltd. and AMD.
The Radeon HD 8000 series is a family of computer GPUs developed by AMD. AMD was initially rumored to release the family in the second quarter of 2013, with the cards manufactured on a 28 nm process and making use of the improved Graphics Core Next architecture. However the 8000 series turned out to be an OEM rebadge of the 7000 series.
ANGLE is an open source, cross-platform graphics engine abstraction layer developed by Google. ANGLE translates OpenGL ES 2/3 calls to DirectX 9, 11, OpenGL or Vulkan API calls. It is a portable version of OpenGL but with limitations of OpenGL ES standard.
The Radeon 300 series is a series of graphics processors developed by AMD. All of the GPUs of the series are produced in 28 nm format and use the Graphics Core Next (GCN) micro-architecture.
Vulkan is a low-level, low-overhead cross-platform API and open standard for 3D graphics and computing. It was intended to address the shortcomings of OpenGL, and allow developers more control over the GPU. It is designed to support a wide variety of GPUs, CPUs and operating systems, and it is also designed to work with modern multi-core CPUs.
LunarG is a software company specializing in device driver development for video cards.
Industry will ship >1.7 billion devices in 2015
Apps built using OpenGL ES will continue to run in iOS 12, but OpenGL ES is deprecated in iOS 13.