Support state
List of (un)supported OpenGL features and extensions.
OpenGL implementation state
The extension implementation is considered complete if all its defined types, functions and enum values are exposed through the API, except for features listed below in Unsupported features.
All extensions from the below lists are available in the GL::
OpenGL 2.1
The core subset of OpenGL 2.1 should be fully implemented, except for the following:
- Proxy textures
- Some forgotten limit queries
OpenGL 3.0
Extension | Status |
---|---|
GLSL 1.30 | done |
glClearBuffer() functions | done |
ARB_ | done |
ARB_ | |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
EXT_ | done |
EXT_ | done |
EXT_ | done |
EXT_ | done |
EXT_ | done |
EXT_ | done (GL 3.0 subset) |
EXT_ | done (GL 3.0 subset) |
EXT_ | done |
MAGNUM_shader_vertex_id Pseudo-extension denoting support for the gl_VertexID GLSL builtin. | done |
NV_ | done |
NV_ | done |
OpenGL 3.1
Extension | Status |
---|---|
GLSL 1.40 | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done except for data layout queries |
ARB_ | done |
EXT_ | done |
NV_ |
OpenGL 3.2
Extension | Status |
---|---|
GLSL 1.50 | done |
ARB_ | missing some limit queries |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | done |
ARB_ | |
ARB_ | missing sample location queries and sample mask |
ARB_ | done |
OpenGL 3.3
Extension | Status |
---|---|
GLSL 3.30 | done |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | done |
ARB_ | missing direct query |
ARB_ | done |
OpenGL 4.0
Extension | Status |
---|---|
GLSL 4.00 | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | missing limit queries |
ARB_ | done (shading language only) |
ARB_ | |
ARB_ | missing limit queries |
ARB_ | done |
ARB_ | |
ARB_ | done except for MAX_TESS_GEN_LEVEL and MAX_TESS_PATCH_COMPONENTS queries |
ARB_ | done |
ARB_ | done |
ARB_ | missing indexed properties query |
OpenGL 4.1
Extension | Status |
---|---|
GLSL 4.10 | done |
ARB_ | only float depth clear |
ARB_ | |
ARB_ | only direct uniform binding |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ |
OpenGL 4.2
Extension | Status |
---|---|
GLSL 4.20 | done |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
OpenGL 4.3
Extension | Status |
---|---|
GLSL 4.30 | done |
ARB_ | done (shading language only) |
ARB_ | only conservative sample query and compression formats |
ARB_ | |
ARB_ | done except for indirect dispatch |
ARB_ | |
KHR_ | missing log retrieval, sync, pipeline and sampler label |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | only compressed texture block queries |
ARB_ | done |
ARB_ | |
ARB_ | |
ARB_ | done (nothing to do) |
ARB_ | done (shading language only) |
ARB_ | missing (unneeded) block binding |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | done |
ARB_ |
OpenGL 4.4
Extension | Status |
---|---|
GLSL 4.40 | done |
GL_MAX_VERTEX_ATTRIB_STRIDE | |
ARB_ | done |
ARB_ | |
ARB_ | done (shading language only) |
ARB_ | missing sampler and vertex buffer binding |
ARB_ | |
ARB_ | done |
ARB_ | done |
ARB_ | done |
OpenGL 4.5
Extension | Status |
---|---|
GLSL 4.50 | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done for implemented functionality |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | done |
KHR_ | |
KHR_ |
OpenGL 4.6
Extension | Status |
---|---|
GLSL 4.60 | done |
ARB_ | |
ARB_ | done (shading language only) |
ARB_ | done (shading language only) |
ARB_ | done |
ARB_ | done |
ARB_ | done (shading language only) |
ARB_ | |
ARB_ | |
ARB_ | |
ARB_ | done |
KHR_ | done |
ARB / Khronos OpenGL extensions
Extension | Status |
---|---|
ARB_ | done |
KHR_ | done |
ARB_ | done |
ARB_ | |
ARB_ | |
ARB_ | |
ARB_ | |
ARB_ | |
ARB_ | |
ARB_ | |
KHR_ | done |
KHR_ | done (nothing to do) |
KHR_ | done |
KHR_ | done |
KHR_ | done (nothing to do) |
KHR_ | missing thread count setting |
Vendor OpenGL extensions
Extension | Status |
---|---|
AMD_ | done (nothing to do) |
AMD_ | |
AMD_ | done (shading language only) |
AMD_ | done (shading language only) |
AMD_ | done (shading language only) |
ATI_ | done (GL 4.4 subset) |
EXT_ | done |
EXT_ | done |
EXT_ | only GL 4.4 subset |
EXT_ | done |
EXT_ | done |
EXT_ | done (shading language only) |
EXT_ | missing pipeline and sampler label |
EXT_ | done |
EXT_ | done |
EXT_ | done |
GREMEDY_ | done |
INTEL_ | done |
NV_ | done (shading language only) |
NV_ | |
NV_ | done (shading language only) |
OVR_ | |
OVR_ |
OpenGL ES 2.0
Features that have their equivalents implemented in desktop version are supported. ESSL 1.00 is supported.
OpenGL ES 3.0
Features that have their equivalents implemented in desktop version are supported. ESSL 3.00 is supported.
OpenGL ES 3.1
Features that have their equivalents implemented in desktop version are supported. ESSL 3.10 is supported.
OpenGL ES 3.2
Features that have their equivalents implemented in desktop version are supported. ESSL 3.20 is supported.
Extension | Status |
---|---|
EXT_ | |
EXT_ | |
EXT_ | |
EXT_ | done |
EXT_ | missing some ES-specific limit queries |
EXT_ | done (shading language only) |
EXT_ | done (shading language only) |
EXT_ | done except for MAX_TESS_GEN_LEVEL and MAX_TESS_PATCH_COMPONENTS queries |
EXT_ | done |
EXT_ | done |
EXT_ | done |
EXT_ | |
KHR_ | done |
KHR_ | see above |
KHR_ | done |
KHR_ | |
KHR_ | done (nothing to do) |
OES_ | done |
OES_ | done (shading language only) |
OES_ | done (shading language only) |
OES_ | |
OES_ | done |
OES_ | done |
OpenGL ES 2.0 extensions to match ES 3.0 functionality
Unless said otherwise, these are not exposed in the GL::
OpenGL ES extensions
WebGL 1.0
Features that have their equivalents implemented in OpenGL ES 2.0 are supported.
WebGL 2.0
Features that have their equivalents implemented in OpenGL ES 3.0 are supported.
WebGL 1.0 extensions to match WebGL 2.0 functionality
Unless said otherwise, these are not available in the GL::
Extension | Status |
---|---|
ANGLE_ | done |
EXT_ | done (shading language only) |
EXT_ | done |
EXT_ | done |
EXT_ | done (shading language only) |
MAGNUM_shader_vertex_id Pseudo-extension denoting support for the gl_VertexID GLSL builtin. Exposed on WebGL 2 builds only. | done |
OES_ | done |
OES_ | done |
OES_ | done |
OES_ | done |
OES_ | done |
OES_ | done |
OES_ | done |
WEBGL_ | done |
WEBGL_ | |
WEBGL_ | done |
WebGL extensions
Unsupported OpenGL features
Some functionality, which is either soon-to-be deprecated or isn't proven to add any performance gains, is not supported in Magnum. See also Deprecated OpenGL API list.
Unsupported features
- API that is not part of core profile or is marked as deprecated (but still supported in core profile) in the latest version of OpenGL specification is not supported. The only exception are features that are needed for some OpenGL ES 2.0 implementations (such as luminance texture formats).
- State queries (various
glIs*()
,glGet*()
functions) are not supported. Magnum API is designed to prevent the need for majority of them, many of them are tracked internally to avoid redundant state changes and in many cases it is easier to set the state to some value rather than query it and then decide on the result. For detailed state introspection please use external debugger (such as ApiTrace), which is more convenient to use than manual queries. Queries of implementation-defined values (various limits etc.) and queries of generated values (buffer data, texture data) are supported. - Line and polygon smoothing (
GL_LINE_SMOOTH
,GL_POLYGON_SMOOTH
) and related functions are not supported, as the driver might do it in software with serious performance drops. Multisampling is far superior solution. - Fixed precision data types (
GL_FIXED
in OpenGL ES) are not supported, as they occupy the same memory as floats and they aren't faster than floats on current hardware anymore. They are also not available in WebGL or desktop GL. - Shader compiler is assumed to be present (
GL_SHADER_COMPILER
returning true), as all desktop GL implementations and also ES3 are required to support it. - Querying shader attribute locations using glGetAttribLocation() and other resources using glGetProgramResource(), glGetProgramResourceIndex(), glGetProgramResourceLocation(), glGetProgramResourceLocationIndex() or glGetProgramResourceName() (as opposed to setting them) is not supported, as newer GL versions encourage setting them explicitly in shader code.
- Direct vertex data specification (as opposed to using buffers) is not supported, as it encourages bad practices.
- glPixelStore() with
GL_PACK_SWAP_BYTES
/GL_UNPACK_SWAP_BYTES
. Too much burden imposed on every API that deals with pixel storage. Use Corrade::Utility:: Endianness instead. Note that this state is also not tracked, so it won't get reset in case a 3rd party code enables it.
Unsupported ARB / Khronos extensions
- ARB_
shading_ language_ include is overly complicated and supported exclusively by NVidia. However, see the GlslangShaderConverter plugin for shader preprocessing/compilation that does support #include
directives. - ARB_
cl_ event seems to be not supported anywhere - ARB_
shader_ stencil_ export is supported exclusively by AMD - EXT_
texture_ compression_ latc is superseded by EXT_ texture_ compression_ rgtc, available in OpenGL 3.0.
Unsupported vendor extensions
- INTEL_
map_ texture negatively affects texture access performance. Combination of buffer mapping and pixel buffers might be of the same or better performance, without affecting texture access speed. - NV_
draw_ texture can be done with framebuffer blitting and doesn't make any full-screen postprocessing easier, as shaders are excluded. - IMG_
texture_ compression_ pvrtc2 OpenGL ES extension is not supported as there is no equivalent in WebGL nor Metal and all hardware having support for it suppors other formats as well.