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. 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 (OpenGL ES SL), which is different from OpenGL SL.
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:
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 (rather than alpha border fragments); ARB_Image pixel class operations, bitmaps, and 3D textures are not supported; several of the more technical drawing modes are eliminated, including frontbuffer and accumulation buffer; bitmap operations for copying pixels individually, evaluators, and user selection operations are not allowed; display lists and feedback are removed, as are push and pop operations for state attributes; and some material parameters were removed, including back-face parameters and user-defined clip planes.
The actual version is 1.0.0.2.
Extension Name Sort #Number DetailsOES_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. Actual Version is 1.1.12.
Extension Name Sort #NumberOES_draw_textureOpenGL ES Extension #7 OES_matrix_get OpenGL ES Extension #11OES_point_size_arrayOpenGL ES Extension #14OES_point_spriteOpenGL ES Extension #15optional Mesa (all drivers)OES_framebuffer_objectOpenGL ES Extension #10 (became core in ES 2.0)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. 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.Edward Angel, Dave Shreiner, Interactive Computer Graphics: A Top-Down Approach with Shader-Based OpenGL, 6th Edition, p. xxi-xxii, 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. 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 #NumberOES_texture_cube_mapOpenGL ES Extension #20OES_texture_npotOpenGL ES Extension #37OES_depth24OpenGL ES Extension #24OES_depth_textureOpenGL ES Extension #44OES_element_index_uintOpenGL ES Extension #26 OES_fbo_render_mipmapOpenGL ES Extension #27OES_get_program_binaryOpenGL ES Extension #47OES_mapbufferOpenGL ES Extension #29OES_packed_depth_stencilOpenGL ES Extension #43OES_rgb8_rgba8OpenGL ES Extension #30OES_stencil8OpenGL ES Extension #33OES_vertex_half_floatOpenGL ES Extension #38additionalin 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)OES_texture_float_linear OES_texture_half_float_linearOpenGL ES Extension #35, extended in ES 3.0 and 3.1OES_texture_float OES_texture_half_floatOpenGL ES Extension #36, extended in ES 3.0 and 3.1OES_standard_derivativesOpenGL ES Extension #45OES_vertex_array_objectOpenGL ES Extension #71 (became core in ES 3.0)OES_surfaceless_contextOpenGL ES Extension #116OES_depth_texture_cube_mapOpenGL ES Extension #136 EXT_texture_filter_anisotropicOpenGL ES Extension #41EXT_texture_type_2_10_10_10_REVOpenGL ES Extension #42EXT_texture_compression_dxt1OpenGL ES Extension #49EXT_texture_format_BGRA8888OpenGL ES Extension #51EXT_discard_framebufferOpenGL ES Extension #64EXT_blend_minmaxOpenGL ES Extension #65EXT_read_format_bgraOpenGL ES Extension #66EXT_multi_draw_arraysOpenGL ES Extension #69EXT_frag_depthOpenGL ES Extension #86EXT_unpack_subimageOpenGL ES Extension #90EXT_texture_rgOpenGL ES Extension #103EXT_draw_buffersOpenGL ES Extension #151EXT_compressed_ETC1_RGB8_sub_textureOpenGL ES Extension #188NV_draw_buffersOpenGL ES Extension #91NV_fbo_color_attachmentsOpenGL ES Extension #92NV_read_bufferOpenGL ES Extension #93NV_read_depth_stencilOpenGL ES Extension #94ANGLE_texture_compression_dxtOpenGL ES Extension #111
OpenGL ES 3.0 The OpenGL ES 3.0 specification was publicly released in August 2012. It is backwards compatible with OpenGL ES 2.0, and partially compatible with WebGL 2.0, as WebGL 2.0 was designed to have a high degree of interoperability with OpenGL ES 3.0. The current version of the OpenGL ES 3.0 standard is 3.0.6, released in November 2019.
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 DetailsKHR_context_flush_controlOpenGL ES Extension #191 (for GL_KHR_context_flush_control only) additional in MESA (all drivers)OES_texture_compression_astcOpenGL ES Extension #162EXT_texture_border_clampOpenGL ES Extension #182EXT_draw_elements_base_vertexOpenGL ES Extension #204OES_EGL_image_external_essl3OpenGL ES Extension #220MESA_shader_integer_functionsOpenGL 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
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).
Extension Name Sort #NumberARB_arrays_of_arraysARB Extension #120ARB_compute_shaderARB Extension #122ARB_explicit_uniform_locationARB Extension #128ARB_framebuffer_no_attachmentsARB Extension #130 ARB_program_interface_queryARB Extension #134ARB_shader_atomic_countersARB Extension #114ARB_shader_image_load_storeARB Extension #115ARB_shader_storage_buffer_objectARB Extension #137ARB_separate_shader_objectsARB Extension #97ARB_stencil_texturingARB Extension #138ARB_vertex_attrib_bindingARB Extension #125ARB_draw_indirect ARB Extension #87ARB_shading_language_packing ARB Extension #116ARB_shader_image_size ARB Extension #136ARB_texture_storage_multisample ARB Extension #141ARB_texture_multisample ARB Extension #67EXT_shader_integer_mix OpenGL ES Extension #161optional Mesa (all drivers OpenGL ES 3.1+)ARB_sample_locationsARB Extension #181OES_texture_viewOpenGL ES Extension #218NV_image_formatsOpenGL ES Extension #200EXT_render_snormOpenGL ES Extension #206EXT_texture_norm16OpenGL 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.
Actual State is 3.2.6 July 2019.