Documentation of OpenGL ES and EGL features, caps and formats and required extensions.
Cap(s) | OpenGL version | OpenGL extension | OpenGL ES version | OpenGL ES extension | Notes |
---|---|---|---|---|---|
GL_MAX_ELEMENT_INDEX | 4.3 | GL_ARB_ES3_compatibility | 3.0 | -- | Seems pretty safe to use an arbitrary limit, all implementations tested return 0xFFFFFFFF. |
GL_MAX_3D_TEXTURE_SIZE | 1.2 | GL_EXT_texture3D | 3.0 | GL_OES_texture_3D | |
GL_MAX_TEXTURE_SIZE | 1.0 | -- | 2.0 | -- | |
GL_MAX_CUBE_MAP_TEXTURE_SIZE | 1.3 | -- | 2.0 | ||
GL_MAX_ARRAY_TEXTURE_LAYERS | 3.0 | GL_EXT_texture_array | 3.0 | -- | |
GL_MAX_TEXTURE_LOD_BIAS | 1.5 | GL_EXT_texture_lod_bias | 3.0 | -- | |
GL_MAX_RENDERBUFFER_SIZE GL_MAX_COLOR_ATTACHMENTS | 3.0 | GL_EXT_framebuffer_object | 2.0 | -- | |
GL_MAX_DRAW_BUFFERS | 2.0? | GL_ARB_draw_buffers or GL_EXT_draw_buffers2 | 3.0 | GL_EXT_draw_buffers | |
GL_MAX_VIEWPORT_DIMS | 1.0 | -- | 2.0 | -- | |
GL_ALIASED_POINT_SIZE_RANGE | 1.0? | -- | 2.0 | -- | |
GL_ALIASED_LINE_WIDTH_RANGE | 1.2 | -- | 2.0 | -- | |
GL_ALIASED_LINE_WIDTH_RANGE | 1.2 | -- | 2.0 | -- | |
GL_MAX_ELEMENTS_INDICES | 1.2 | -- | 3.0 | -- | |
GL_MAX_ELEMENTS_VERTICES | 1.2 | -- | 3.0 | -- | |
Shader format precision (glGetShaderPrecisionFormat) | 4.1 | GL_ARB_ES2_compatibility | 2.0 | -- | Can use reasonable default values (IEEE float and twos complement integer). |
GL_MAX_VERTEX_ATTRIBS | 2.0 | -- | 2.0 | -- | |
GL_MAX_VERTEX_UNIFORM_COMPONENTS | 2.0 | -- | 2.0 | -- | |
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS | 2.0 | -- | 2.0 | -- | |
GL_MAX_VERTEX_UNIFORM_VECTORS GL_MAX_FRAGMENT_UNIFORM_VECTORS | 4.1 | GL_ARB_ES2_compatibility | 2.0 | -- | Defined as GL_MAX_VERTEX_UNIFORM_COMPONENTS / 4 and GL_MAX_FRAGMENT_UNIFORM_COMPONENTS / 4. Can simply use those values when the cap is not available. |
GL_MAX_VERTEX_UNIFORM_BLOCKS GL_MAX_FRAGMENT_UNIFORM_BLOCKS GL_MAX_UNIFORM_BUFFER_BINDINGS GL_MAX_UNIFORM_BLOCK_SIZE GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT GL_MAX_COMBINED_UNIFORM_BLOCKS GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS | 3.1 | GL_ARB_uniform_buffer_object | 3.0 | -- | |
GL_MAX_VERTEX_OUTPUT_COMPONENTS | 3.2 | -- | 3.0 | -- | Doesn't seem to be a desktop extension for this cap, it may be possible to use the minimum ES3 value (64) if lower than GL 3.2. |
GL_MAX_FRAGMENT_UNIFORM_COMPONENTS | 2.0 | -- | 2.0 | -- | |
GL_MAX_TEXTURE_IMAGE_UNITS | 2.0 | -- | 2.0 | -- | |
GL_MAX_FRAGMENT_INPUT_COMPONENTS | 3.2 | -- | 3.0 | -- | Doesn't seem to be a desktop extension for this cap either, it may be possible to use the minimum ES3 value (60) if lower than GL 3.2. |
GL_MIN_PROGRAM_TEXEL_OFFSET GL_MAX_PROGRAM_TEXEL_OFFSET | 3.0 | -- | 3.0 | -- | Could potentially be emulated in the shader by adding the offsets in normalized texture coordinates before sampling. |
GL_MAX_VARYING_COMPONENTS | 3.0 | GL_ARB_ES3_compatibility | 3.0 | -- | Was depricated in the OpenGL core spec but re-added in GL_ARB_ES3_compatibility |
GL_MAX_VARYING_VECTORS | 4.1 | GL_ARB_ES2_compatibility | 2.0 | -- | Defined as GL_MAX_VARYING_COMPONENTS / 4. |
GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS | 3.0 | GL_EXT_transform_feedback or GL_EXT_transform_feedback2 or GL_ARB_transform_feedback3 | 3.0 | -- | |
GL_MAX_SAMPLES | 3.0 | GL_EXT_framebuffer_multisample | 3.0 | GL_EXT_multisampled_render_to_texture or GL_ANGLE_framebuffer_multisample | |
GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT | -- | GL_EXT_texture_filter_anisotropic | -- | GL_EXT_texture_filter_anisotropic | Ubiquitous extension. |
IMPLEMENTATION_COLOR_READ_FORMAT IMPLEMENTATION_COLOR_READ_TYPE | -- | GL_ARB_ES2_compatibility | 2.0 | -- | Desktop GL doesn't as many limitations as ES for ReadPixels, can either always return GL_RGBA/GL_UNSIGNED_BYTE or return the format and type of the read buffer. |
##OpenGL ES Formats (TODO) |Format|OpenGL version|OpenGL extension|OpenGL ES version|OpenGL ES extension|Notes| |---|---|---|---|---|---| |GL_RGBA8
GL_RGB8 |1.0|--|3.0|GL_OES_rgb8_rgba8||
Feature | GLSL version | Notes |
---|---|---|
Unsigned integers | 1.30 | |
Pack layout std140 | 1.40 |
Builtins that are added going from ESSL1 to ESSL3.
Function | GLSL version | Extension | Notes |
---|---|---|---|
sinh cosh tanh asinh acosh | 1.30 | ||
atanh | 1.10 | ||
abs (genIType) | 1.30 | GL_EXT_gpu_shader4 | |
sign (genIType) | 1.50 | GL_EXT_gpu_shader4 | Can be emulated easily. |
trunc | 1.30 | ||
round roundEven | 1.30 | ||
min (genIType, genUType) max (genIType, genUType) clamp (genIType, genUType) | 1.30 | ||
mix (genBType) | 4.50 | GL_EXT_shader_integer_mix | Should be possible to emulate with a ternery operation. |
modf | 1.30 | ||
isnan | 1.30 | ||
isinf | 1.10 | ||
floatBitsToInt floatBitsToUint intBitsToFloat uintBitsToFloat | 3.30 | GL_ARB_shader_bit_encoding or ARB_gpu_shader5 | |
packSnorm2x16 packHalf2x16 unpackSnorm2x16 unpackHalf2x16 | 4.20 | GL_ARB_shading_language_packing | Can be emulated using bit casting functions. |
packUnorm2x16 unpackUnorm2x16 | 4.10 | GL_ARB_shading_language_packing | Can be emulated using bit casting functions. |
matrixCompMult (NxM matrices) | 1.10 | ||
outerProduct | 1.20 | ||
transpose | 1.20 | ||
determinant | 1.50 | Can be emulated. | |
inverse | 1.40 | Can be emulated. | |
lessThan (uvec) lessThanEqual (uvec) greaterThan (uvec) greaterThanEqual (uvec) equal (uvec) notEqual (uvec) | 1.30 | ||
texture textureProj textureLod textureOffset textureProjOffset textureLodOffset textureProjLod textureProjLodOffset texelFetch texelFetchOffset textureGrad textureGradOffset textureProjGrad textureProjGradOffset textureSize | 1.30 | Equivalent to texture2D, textureCube, etc | |
dFdx dFdy fwidth | 1.10 |
Feature | EGL version | EGL extension | WGL core | WGL extension | GLX version | GLX extensions | Notes |
---|---|---|---|---|---|---|---|
Pbuffers | No | WGL_ARB_pbuffer | |||||
BindTexImage | No | WGL_ARB_render_texture | Possibly to emulate with OpenGL textures but not strictly required, it is possible only export EGL configs without EGL_BIND_TO_TEXTURE_RGB and EGL_BIND_TO_TEXTURE_RGBA. Bindable pbuffers may be required by Chrome though. | ||||
Pixmaps | |||||||
Swap control | No | WGL_EXT_swap_control | No | GLX_EXT_swap_control |