OpenGL ES explained

OpenGL ES
Logo Size:220px
Logo Alt:OpenGL ES logo
Author:ARB
Developer:Khronos Group
Latest Release Version:3.2[1]
Operating System:Cross-platform
Platform:Cross-platform
Replaced By:Vulkan
Genre:API
License:Free of charge, royalty or licensing

OpenGL for Embedded Systems (OpenGL ES or GLES) is a subset[2] 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.[3]

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 (OpenGL ES SL), which is different from OpenGL SL.[4]

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

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:

The actual version is 1.0.0.2.[5]

Extension NameSort #NumberDetails
OES_byte_coordinates OpenGL ES Extension #4 (formerly OpenGL Extension #291)
OES_compressed_paletted_textureOpenGL ES Extension #6 (formerly OpenGL Extension #294)
OES_fixed_pointOpenGL ES Extension #9 (formerly OpenGL Extension #292)
OES_query_matrixOpenGL ES Extension #16 (formerly OpenGL Extension #296)
OES_read_formatOpenGL ES Extension #17 (formerly OpenGL Extension #295)
OES_single_precisionOpenGL ES Extension #18 (formerly OpenGL Extension #293)
optional Mesa (most drivers)
OES_compressed_ETC1_RGB8_textureOpenGL ES Extension #5

OpenGL ES 1.1

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.[6] Actual Version is 1.1.12.[7]

Extension NameSort #Number
OES_draw_textureOpenGL ES Extension #7
OES_matrix_get OpenGL ES Extension #11
OES_point_size_arrayOpenGL ES Extension #14
OES_point_spriteOpenGL ES Extension #15
optionalMesa (all drivers)
OES_framebuffer_objectOpenGL ES Extension #10 (became core in ES 2.0)[8]
OES_EGL_imageOpenGL ES Extension #23
OES_EGL_image_externalOpenGL ES Extension #87
OES_required_internalformatOpenGL ES Extension # TBD

OpenGL ES 2.0

OpenGL ES 2.0 was publicly released in March 2007.[9] 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.[10] 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.[11] 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.[12] Actual version is 2.0.25.[13]

The Khronos Group has written a document describing the differences between OpenGL ES 2.0 and ordinary OpenGL 2.0.[14]

Extension NameSort #Number
OES_texture_cube_mapOpenGL ES Extension #20
OES_texture_npotOpenGL ES Extension #37
OES_depth24OpenGL ES Extension #24
OES_depth_textureOpenGL ES Extension #44
OES_element_index_uintOpenGL ES Extension #26
OES_fbo_render_mipmapOpenGL ES Extension #27
OES_get_program_binaryOpenGL ES Extension #47
OES_mapbufferOpenGL ES Extension #29
OES_packed_depth_stencilOpenGL ES Extension #43
OES_rgb8_rgba8OpenGL ES Extension #30
OES_stencil8OpenGL ES Extension #33
OES_vertex_half_floatOpenGL ES Extension #38
additionalin MESA (all drivers)
OES_EGL_imageOpenGL ES Extension #23 (different for 1.1)
OES_EGL_image_externalOpenGL ES Extension #87 (different for 1.1)
OES_texture_3DOpenGL ES Extension #34 (became core in ES 3.0)[15]
OES_texture_float_linear OES_texture_half_float_linearOpenGL ES Extension #35, extended in ES 3.0 and 3.1
OES_texture_float OES_texture_half_floatOpenGL ES Extension #36, extended in ES 3.0 and 3.1
OES_standard_derivativesOpenGL ES Extension #45
OES_vertex_array_objectOpenGL ES Extension #71 (became core in ES 3.0)
OES_surfaceless_contextOpenGL ES Extension #116
OES_depth_texture_cube_mapOpenGL ES Extension #136
EXT_texture_filter_anisotropicOpenGL ES Extension #41
EXT_texture_type_2_10_10_10_REVOpenGL ES Extension #42
EXT_texture_compression_dxt1OpenGL ES Extension #49
EXT_texture_format_BGRA8888OpenGL ES Extension #51
EXT_discard_framebufferOpenGL ES Extension #64
EXT_blend_minmaxOpenGL ES Extension #65
EXT_read_format_bgraOpenGL ES Extension #66
EXT_multi_draw_arraysOpenGL ES Extension #69
EXT_frag_depthOpenGL ES Extension #86
EXT_unpack_subimageOpenGL ES Extension #90
EXT_texture_rgOpenGL ES Extension #103
EXT_draw_buffersOpenGL ES Extension #151
EXT_compressed_ETC1_RGB8_sub_textureOpenGL ES Extension #188
NV_draw_buffersOpenGL ES Extension #91
NV_fbo_color_attachmentsOpenGL ES Extension #92
NV_read_bufferOpenGL ES Extension #93
NV_read_depth_stencilOpenGL ES Extension #94
ANGLE_texture_compression_dxtOpenGL ES Extension #111

OpenGL ES 3.0

The OpenGL ES 3.0 specification[16] was publicly released in August 2012.[17] It is backwards compatible with OpenGL ES 2.0, and partially compatible with WebGL 2.0,[18] as WebGL 2.0 was designed to have a high degree of interoperability with OpenGL ES 3.0.[19] The current version of the OpenGL ES 3.0 standard is 3.0.6, released in November 2019.[20]

New functionality in the OpenGL ES 3.0 specification includes:

Extension NameSort #NumberDetails
KHR_context_flush_controlOpenGL ES Extension #191(for GL_KHR_context_flush_control only)
additionalin MESA (all drivers)
OES_texture_compression_astcOpenGL ES Extension #162
EXT_texture_border_clampOpenGL ES Extension #182
EXT_draw_elements_base_vertexOpenGL ES Extension #204
OES_EGL_image_external_essl3OpenGL ES Extension #220
MESA_shader_integer_functionsOpenGL ES Extension #495

OpenGL ES 3.1

The OpenGL ES 3.1 specification[22] was publicly released in March 2014.New functionality in OpenGL ES 3.1 includes:[23]

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).[24]

Extension NameSort #Number
ARB_arrays_of_arraysARB Extension #120
ARB_compute_shaderARB Extension #122
ARB_explicit_uniform_locationARB Extension #128
ARB_framebuffer_no_attachmentsARB Extension #130
ARB_program_interface_queryARB Extension #134
ARB_shader_atomic_countersARB Extension #114
ARB_shader_image_load_storeARB Extension #115
ARB_shader_storage_buffer_objectARB Extension #137
ARB_separate_shader_objectsARB Extension #97
ARB_stencil_texturingARB Extension #138
ARB_vertex_attrib_bindingARB Extension #125
ARB_draw_indirectARB Extension #87
ARB_shading_language_packing ARB Extension #116
ARB_shader_image_sizeARB Extension #136
ARB_texture_storage_multisampleARB Extension #141
ARB_texture_multisampleARB Extension #67
EXT_shader_integer_mixOpenGL ES Extension #161
optionalMesa (all drivers OpenGL ES 3.1+)
ARB_sample_locationsARB Extension #181
OES_texture_viewOpenGL ES Extension #218
NV_image_formatsOpenGL ES Extension #200
EXT_render_snormOpenGL ES Extension #206
EXT_texture_norm16OpenGL ES Extension #207

OpenGL ES 3.2

The OpenGL ES 3.2 specification[25] was publicly released in August 2015.New capabilities in OpenGL ES 3.2 include:

Actual State is 3.2.6 July 2019.[26] [27]

Extension NameSort #Number
KHR_blend_equation_advancedOpenGL ES Extension #168
EXT_color_buffer_floatOpenGL ES Extension #137
KHR_debugOpenGL ES Extension #118
KHR_robustnessOpenGL ES Extension #190
OES_copy_imageOpenGL ES Extension #208
OES_draw_buffers_indexedOpenGL ES Extension #209
OES_draw_elements_base_vertexOpenGL ES Extension #219
OES_geometry_shaderOpenGL ES Extension #210
OES_gpu_shader5OpenGL ES Extension #211
OES_sample_shadingOpenGL ES Extension #169
OES_sample_variablesOpenGL ES Extension #170
OES_shader_image_atomicOpenGL ES Extension #171
OES_shader_io_blocksOpenGL ES Extension #213
OES_shader_multisample_interpolationOpenGL ES Extension #172
OES_tessellation_shaderOpenGL ES Extension #214
OES_texture_border_clampOpenGL ES Extension #215
OES_texture_bufferOpenGL ES Extension #216
OES_texture_cube_map_arrayOpenGL ES Extension #217
OES_texture_stencil8OpenGL ES Extension #173
OES_texture_storage_multisample_2d_arrayOpenGL ES Extension #174
KHR_texture_compression_astc_ldrOpenGL ES Extension #117 (LDR only)
OES_primitive_bounding_boxOpenGL ES Extension #212
optionalMesa (all drivers OpenGL ES 3.2+)
KHR_texture_compression_astc_hdrOpenGL ES Extension #117 (LDR included), ARB Extension #118
KHR_blend_equation_advanced_coherentOpenGL ES Extension #168
KHR_texture_compression_astc_sliced_3dOpenGL ES Extension #249 (ARB Extension #189)
OES_viewport_arrayOpenGL 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.[28]

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[29] and Symbian OS v8.0a[30] [31] operating systems, as well as by QNX[32] It is also supported by the PlayStation 3 as one of its official graphics APIs[33] (the other one being low level libgcm library) with Nvidia's Cg in lieu of GLSL.[34] 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:

OpenGL ES 2.0

Supported by:

OpenGL ES 3.0

Supported by:

Supported by some recent versions of these GPUs:[45] [46]

OpenGL ES 3.1

Supported by Windows, Linux, Android (since version 5.0) on devices with appropriate hardware and drivers,[47] including:

Android Extension Pack

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.[52]

OpenGL ES 3.2

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."[53] [54]

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:

Deprecation in Apple platforms

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.[56]

The future

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.[57]

OpenGL compatibility

A few libraries have been created to emulate OpenGL calls using GL ES:

See also

Further reading

External links

Notes and References

  1. Web site: Khronos Expands Scope of 3D Open Standard Ecosystem. 10 August 2015 .
  2. Web site: OpenGL ES Overview. 19 July 2011 . Khronos Group.
  3. Web site: Not dead yet: AMD's Mantle powers new Vulkan API, VR efforts. Hruska. Joel. 4 March 2015. ExtremeTech. Ziff Davis.
  4. Web site: What versions of GLSL can I use in OpenGL ES 2.0?. Stack Overflow.
  5. https://www.khronos.org/registry/OpenGL/specs/es/1.0/opengles_spec_1_0.pdf
  6. http://developer.amd.com/wordpress/media/2012/10/GDC06-GLES_Tutorial_Day-Munshi-OpenGLES_Overview.pdf
  7. https://www.khronos.org/registry/OpenGL/specs/es/1.1/es_full_spec_1.1.pdf
  8. Web site: stack overflow: glGenFramebuffersOES vs glGenFramebuffers?. 2022-04-19.
  9. Web site: Khronos Press Releases - OpenGL ES 2.0 . Khronos.org . 2007-03-05 . 2010-12-23 . https://web.archive.org/web/20101228111715/http://www.khronos.org/news/press/releases/finalized_opengl_es_20_specification/ . 2010-12-28 .
  10. Edward Angel, Dave Shreiner, Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL, 6th Edition, p. xxi-xxii,
  11. Web site: The OpenGL® ES Shading Language. Khronos.org. 2013-02-16.
  12. Web site: The OpenGL(R)Graphics System: A Specification (Version 4.1 (Core Profile). July 25, 2010.
  13. https://www.khronos.org/registry/OpenGL/specs/es/2.0/es_full_spec_2.0.pdf
  14. Web site: OpenGL© ES – Common Profile Specification 2.0.25 (Difference Specification). November 2, 2010.
  15. Web site: OpenGL ES 3.0 Programming Guide. Pearson Education, Inc.. 2022-04-18.
  16. Web site: Khronos OpenGL ES Registry - The Khronos Group Inc. registry.khronos.org.
  17. Web site: Khronos Releases OpenGL ES 3.0 Specification to Bring Mobile 3D Graphics to the Next Level . Khronos . 2012-08-06 . 2012-08-06.
  18. Web site: WebGL: 2D and 3D graphics for the web. Mozilla. 2023-06-30.
  19. Web site: WebGL 2.0 Specification. registry.khronos.org.
  20. https://www.khronos.org/registry/OpenGL/specs/es/3.0/es_spec_3.0.pdf
  21. Web site: GLSL ES 3.0 Specification. Khronos. 2023-06-30.
  22. Web site: Khronos OpenGL ES Registry - The Khronos Group Inc. registry.khronos.org.
  23. Web site: Khronos Releases OpenGL ES 3.1 Specification . Khronos.org . 2014-03-17 . 2014-03-17.
  24. https://www.khronos.org/registry/OpenGL/specs/es/3.1/es_spec_3.1.pdf
  25. Web site: Khronos OpenGL ES Registry - The Khronos Group Inc. registry.khronos.org.
  26. https://www.khronos.org/registry/OpenGL/specs/es/3.2/es_spec_3.2.pdf
  27. https://www.khronos.org/registry/OpenGL/specs/es/3.2/GLSL_ES_Specification_3.20.pdf
  28. Web site: Next Generation OpenGL Becomes Vulkan: Additional Details Released.
  29. Web site: Android Platform. Android Developers.
  30. Web site: 2008-03-30 . Symbian OS Version 8.0 Product sheet . https://web.archive.org/web/20080330065954/http://www.symbian.com/symbianos/releases/v80/productsheet.html . 2008-03-30 . 2008-03-30 .
  31. Web site: Dueder . Janelle . 2022-12-09 . OpenGL ES - Symbian Games Development . 2023-01-14 . 25 Years of Programming . en.
  32. Web site: Using OpenGL ES . QNX Software Development Platform (v6.5.0) . . 2011-01-08.
  33. Web site: OpenGL ES demo in PPT format. 21 November 2021.
  34. Web site: OpenGL ES/PSGL Presentation in PPT format. Sony. 21 November 2021. Khronos.
  35. Web site: 2004-09-22 . OpenGL ES SDK available for Nokia 6630 . 2023-01-14 . Khronos Forums . en.
  36. Web site: New in this beta release . Release Notes - BlackBerry Java Application . . 2009-12-08 . https://web.archive.org/web/20091202054102/http://docs.blackberry.com/en/developers/deliverables/11953/New_in_this_beta_release_895185_11.jsp . 2009-12-02 .
  37. News: What to expect for BlackBerry smartphones . Damian . Koh . . 2009-11-29 . 2009-12-08 . https://web.archive.org/web/20091213042524/http://asia.cnet.com/reviews/mobilephones/0,39050603,62059292,00.htm . 2009-12-13 .
  38. Web site: PDK - Overview . HP Palm Developer Center . 2010-12-23 . https://web.archive.org/web/20110101222701/http://developer.palm.com/index.php?option=com_content&view=article&id=1989&Itemid=370#CoreTechnologies . 2011-01-01 .
  39. Web site: DMP announces OpenGL ES 1.1 conformant PICA 200 adopted by Nintendo . 2010-06-21 . 2013-06-02.
  40. News: Android 2.2 specifications . 2010-07-01 . https://web.archive.org/web/20101011134355/http://developer.android.com/sdk/android-2.2.html . 2010-10-11 .
  41. Web site: Mesa OpenGL Extensions and Capabilities. people.freedesktop.org.
  42. Web site: Mesa OpenGL Extensions and Capabilities. people.freedesktop.org.
  43. Web site: Maemo software - Nokia > Nokia N900 mobile computer > Technical specifications. Nokia Corporation. 12 January 2010. https://web.archive.org/web/20091029005250/http://maemo.nokia.com/n900/specifications/. 29 October 2009.
  44. Web site: iOS 8 for Developers. Apple Developer.
  45. Web site: Khronos Conformant Products. 21 November 2021.
  46. Web site: The State of OpenGL ES 3.0: Who's Got What . Sag . Anshel . Bright Side of News . 2013-04-11 . live . https://web.archive.org/web/20130615000704/http://www.brightsideofnews.com/news/2013/4/11/the-state-of-opengl-es-30-whos-got-what.aspx . 2013-06-15 . 2015-12-22 .
  47. Web site: OpenGL ES3.1 Conformant Products . 2014-08-11.
  48. Web site: Adreno™ Graphics Processing Units . Qualcomm . 2014-08-11.
  49. Web site: GL ES 3.1 on Adreno 3xx? . 2014-08-11.
  50. Web site: ARM's Mali Midgard Architecture Explored . AnandTech . 2014-08-11.
  51. Web site: Vivante Vega Cores for 3D . Vivante . 2014-12-10.
  52. Web site: Khronos Debuts OpenGL ES 3.2 & New GL Extensions, But No Vulkan This Week. August 10, 2015. August 11, 2015.
  53. Web site: OpenGL ES 3.2 and Vulkan – everything you need to know . Android Authority . 2015-08-15 . 2015-12-22 .
  54. Web site: 3D Graphics API State of the Union: SIGGRAPH 2015 . Khronos . Industry will ship >1.7 billion devices in 2015.
  55. Web site: NVIDIA Releases 358.50 Game Ready Drivers For Star Wars Battlefront . AnandTech . 2015-10-07.
  56. Web site: What's New in iOS - Apple Developer. Apps built using OpenGL ES will continue to run in iOS 12, but OpenGL ES is deprecated in iOS 13.. Apple Inc.. developer.apple.com. en. 2018-08-07.
  57. Web site: Vulkan, OpenGL, and OpenGL ES.. Khronos.. www.khronos.org. en. 2020-04-24.
  58. Web site: p3/regal: Regal for OpenGL. 18 October 2021. GitHub.
  59. Web site: In-depth: Bringing Regal OpenGL to Native Client. McCutchan. John. 7 September 2012. Gamasutra.
  60. Web site: GL4ES - The OpenGL driver for GLES Hardware . GitHub.