History of OpenGL: Difference between revisions
→OpenGL 4.1 (2010): link to separate article |
m EXT_copy_buffer doesn't seem to exist, it's ARB_copy_buffer |
||
(56 intermediate revisions by 5 users not shown) | |||
Line 8: | Line 8: | ||
OpenGL 3.0 adds the concept of deprecation: marking certain features as subject to removal in later versions. GL 3.1 removed most deprecated features, and GL 3.2 created the notion of [[Core And Compatibility in Contexts|core and compatibility]] OpenGL contexts. | OpenGL 3.0 adds the concept of deprecation: marking certain features as subject to removal in later versions. GL 3.1 removed most deprecated features, and GL 3.2 created the notion of [[Core And Compatibility in Contexts|core and compatibility]] OpenGL contexts. | ||
Official versions of OpenGL released to date are 1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2. | Official versions of OpenGL released to date are 1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6. | ||
== Summary of version changes == | == Summary of version changes == | ||
This is summary of all changes made in OpenGL specifications through its development. More information about changes may be obtained in OpenGL specification for the version. (In appendix.) | This is summary of all changes made in OpenGL specifications through its development. More information about changes may be obtained in OpenGL specification for the version. (In appendix.) | ||
Most functionality added to OpenGL these days is either promoted from one or more [[OpenGL Extension|extensions]], or is provided by a [[Extension#Core Extensions|Core Extension]]. The latter method means that the extension is identical to the core functionality, even in the naming of enumerators and functions. When functionality is promoted from an extension, it can undergo modifications, and the functions/enumerators have their suffix's removed. | |||
=== OpenGL 1. | === OpenGL 4.6 (2017) === | ||
{| class="wikitable" | |||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |||
|The [[SPIR-V]] language can be used to define shaders. | |||
|{{extref|gl_spirv}}, {{extref|spirv_extensions}} | |||
|- | |||
|[[Vertex Shader#Other inputs|Vertex shaders]] can get the draw ID and base vertex/instance values from rendering commands. | |||
|{{extref|shader_draw_parameters}} | |||
|- | |||
|Multi-draw indirect rendering commands that can fetch the number of draws from a buffer. | |||
|{{extref|indirect_parameters}} | |||
|- | |||
|Statistics and transform feedback overflow queries. | |||
|{{extref|pipeline_statistics_query}}, {{extref|transform_feedback_overflow_query}} | |||
|- | |||
|[[Anisotropic Filtering]] | |||
|{{extref|texture_filter_anisotropic}} | |||
|- | |||
|Clamping polygon offsets | |||
|{{extref|polygon_offset_clamp}} | |||
|- | |||
|[[OpenGL Context]]s can be created that [[OpenGL Error#No error contexts|do not report errors]] of any kind. | |||
|{{extref|no_error|KHR}} | |||
|- | |||
|More operations for [[Atomic Counter]]s. | |||
|{{extref|shader_atomic_counter_ops}} | |||
|- | |||
|Avoiding divergent shader invocations, where they are unnecessary. | |||
|{{extref|shader_group_vote}} | |||
|} | |||
Links: | |||
*[https://khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf OpenGL 4.6 Core Profile Specification] | |||
*[https://khronos.org/registry/OpenGL/specs/gl/glspec46.compatibility.pdf OpenGL 4.6 Compatibility Profile Specification] | |||
*[https://khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf OpenGL Shading Language 4.60 Specification] | |||
=== OpenGL 4.5 (2014) === | |||
{| class="wikitable" | |||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |||
|Additional clip control modes to configure how clip space is mapped to window space. | |||
|{{extref|clip_control}} | |||
|- | |||
|Adds a new GLSL gl_CullDistance shader output, similar to gl_ClipDistance, but used for whole primitive culling. | |||
|{{extref|cull_distance}} | |||
|- | |||
|Compatibility with OpenGL ES 3.1 | |||
|{{extref|ES3_1_compatibility}} | |||
|- | |||
|Adds new modes to {{apifunc|glBeginConditionalRender}} which invert condition used to determine whether to draw or not. | |||
|{{extref|conditional_render_inverted}} | |||
|- | |||
|Provides control over the spacial granularity at which the underlying implementation computes derivatives. | |||
|{{extref|derivative_control}} | |||
|- | |||
|Allows [[Direct State Access|modifying and querying object state without binding objects]]. | |||
|{{extref|direct_state_access}} | |||
|- | |||
|Adds a new function to get sub-regions of texture images. | |||
|{{extref|get_texture_sub_image}} | |||
|- | |||
|Upgrades the {{extref|robustness}} functionality to meet ES 3.1 standards. | |||
|{{extref|robustness|KHR}} | |||
|- | |||
|Provides GLSL built-in functions allowing shaders to query the number of samples of a texture. | |||
|{{extref|shader_texture_image_samples}} | |||
|- | |||
|Relaxes the restrictions on rendering to a currently bound texture and [[Texture Barrier|provides a mechanism to avoid read-after-write hazards]]. | |||
|{{extref|texture_barrier}} | |||
|} | |||
Links: | |||
*[http://www.opengl.org/registry/doc/glspec45.core.pdf OpenGL 4.5 Core Profile Specification] | |||
*[http://www.opengl.org/registry/doc/glspec45.compatibility.pdf OpenGL 4.5 Compatibility Profile Specification] | |||
*[http://www.opengl.org/registry/doc/GLSLangSpec.4.50.pdf OpenGL Shading Language 4.50 Specification] | |||
=== OpenGL 4.4 (2013) === | |||
{| class="wikitable" | |||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |||
|[[Immutable Buffer Storage|Immutable storage for buffer objects,]] including the ability to use buffers while they are mapped. | |||
|{{extref|buffer_storage}} | |||
|- | |||
|[[Clear Texture|Direct clearing of a texture image.]] | |||
|{{extref|clear_texture}} | |||
|- | |||
|[[Layout Qualifier (GLSL)|A number of enhancements to layout qualifiers:]] | |||
* Integer layout qualifiers can take any [[Constant Expression|constant expression]], not just integer literals. | |||
* [[Buffer Backed Interface Block|Explicit layout requests for buffer-backed interface blocks.]] | |||
* [[Layout Component|Tight packing of disparate input/output variables]]. | |||
* [[Feedback In Shader Binding|In-shader specification of transform feedback parameters.]] | |||
* [[Layout Block Member Location|Locations can be set on input/output interface blocks]], for packing purposes. | |||
|{{extref|enhanced_layouts}} | |||
|- | |||
|Bind an [[Multibind|array of objects of the same type to a sequential range of indexed binding targets]] in one call. | |||
|{{extref|multi_bind}} | |||
|- | |||
|Values from Query Objects values can be written to a [[Query Buffer Object|buffer object instead of directly to client memory.]] | |||
|{{extref|query_buffer_object}} | |||
|- | |||
|A [[Edge Sampling|special clamping mode]] that doubles the size of the texture in each dimension,</br>mirroring it exactly once in the negative texture coordinate directions. | |||
|{{extref|texture_mirror_clamp_to_edge}} | |||
|- | |||
|One of the [[Stencil Image Format|stencil-only image formats]] can be used for textures, and 8-bit stencil is a [[Required Image Format|required format]]. | |||
|{{extref|texture_stencil8}} | |||
|- | |||
|Provides a packed, 3-component 11F/11F/10F format for [[Vertex Format Type|vertex attributes]]. | |||
|{{extref|vertex_type_10f_11f_11f_rev}} | |||
|} | |||
While a number of features made it into core OpenGL, a number of other features were left to specific extensions. These offer certainly functionality that lesser 4.x hardware would be unable to handle. | |||
Links: | |||
*[http://www.opengl.org/registry/doc/glspec44.core.pdf OpenGL 4.4 Core Profile Specification] | |||
*[http://www.opengl.org/registry/doc/glspec44.compatibility.pdf OpenGL 4.4 Compatibility Profile Specification] | |||
*[http://www.opengl.org/registry/doc/GLSLangSpec.4.40.pdf OpenGL Shading Language 4.40 Specification] | |||
=== OpenGL | === OpenGL 4.3 (2012) === | ||
{| | {| class="wikitable" | ||
!Addition | !Addition | ||
! | ![[Extension#Core Extensions|Core Extension]] | ||
|- | |||
|[[Debug Output|Debug messaging]] | |||
|[http://www.opengl.org/registry/specs/KHR/debug.txt KHR_debug] | |||
|- | |||
|[[Arrays Of Arrays|GLSL multidimensional arrays]] | |||
|[http://www.opengl.org/registry/specs/ARB/arrays_of_arrays.txt ARB_arrays_of_arrays] | |||
|- | |- | ||
| | |[[Buffer Clearing|Clear Buffer Objects]] to specific values, ala {{code|memset}} | ||
| | |[http://www.opengl.org/registry/specs/ARB/clear_buffer_object.txt ARB_clear_buffer_object] | ||
|- | |- | ||
| | |Arbitrary [[Compute Shader]]s | ||
| | |[http://www.opengl.org/registry/specs/ARB/compute_shader.txt ARB_compute_shader] | ||
|- | |- | ||
| | |[[Copy Texture|Arbitrary image copying]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/copy_image.txt ARB_copy_image] | ||
|- | |- | ||
| | |Compatibility with OpenGL ES 3.0 | ||
| | |[http://www.opengl.org/registry/specs/ARB/ES3_compatibility.txt ARB_ES3_compatibility] | ||
|- | |- | ||
| | |Specifying [[Layout Uniform Location|uniform locations in a shader]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/explicit_uniform_location.txt ARB_explicit_uniform_location] | ||
|- | |- | ||
| | |[[Fragment_Shader#System_inputs|Layer and viewport indices]] available from the fragment shader | ||
| | |[http://www.opengl.org/registry/specs/ARB/fragment_layer_viewport.txt ARB_fragment_layer_viewport] | ||
|- | |- | ||
| | |Rendering to a [[Framebuffer Object]] that [[Empty Framebuffer|has no attachments]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/framebuffer_no_attachments.txt ARB_framebuffer_no_attachments] | ||
|- | |- | ||
| | |[[Query Image Format|Generalized queries for information]] about [[Image Format]]s | ||
|[http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt ARB_internalformat_query2] | |||
| | |||
|- | |- | ||
| | |[[Texture Invalidation|Texture]], [[Buffer Invalidation|buffer object]], and [[Framebuffer Invalidation|framebuffer]] invalidation. | ||
| | |[http://www.opengl.org/registry/specs/ARB/invalidate_subdata.txt ARB_invalidate_subdata] | ||
|- | |- | ||
| | |Issuing [[Indirect Drawing|multiple indirect rendering commands]] from a single drawing command. | ||
| | |[http://www.opengl.org/registry/specs/ARB/multi_draw_indirect.txt ARB_multi_draw_indirect] | ||
|- | |- | ||
| | |Improved API for [[Program Interface Query|getting info about program object interfaces]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/program_interface_query.txt ARB_program_interface_query] | ||
|- | |- | ||
| | |[[Image_Load_Store#Image_size|Get size]] of [[Image Load Store|images]] from GLSL | ||
| | |[http://www.opengl.org/registry/specs/ARB/shader_image_size.txt ARB_shader_image_size] | ||
|- | |- | ||
| | |[[Shader Storage Buffer Object|Buffer object read-write access from shader]], via a uniform-block style mechanism | ||
| | |[http://www.opengl.org/registry/specs/ARB/shader_storage_buffer_object.txt ARB_shader_storage_buffer_object] | ||
|- | |- | ||
| | |[[Stencil Texturing|Accessing the stencil values from a depth/stencil texture]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/stencil_texturing.txt ARB_stencil_texturing] | ||
|- | |- | ||
|Texture | |[[Buffer Texture]]s can now be [[Buffer_Texture#Buffer_texture_range|bound to a range of a buffer object]] rather than the whole thing | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_buffer_range.txt ARB_texture_buffer_range] | ||
|- | |- | ||
| | |GLSL can detect the available mipmap pyramid of a [[Sampler_(GLSL)#Texture_mipmap_retrieval|sampler]] or [[Image_Load_Store#Image_mipmap|image]] | ||
|[http://www.opengl.org/registry/specs/ARB/texture_query_levels.txt ARB_texture_query_levels] | |||
|- | |- | ||
| | |Immutable storage for [[Immutable Storage Texture|multisample textures]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_storage_multisample.txt ARB_texture_storage_multisample] | ||
|- | |- | ||
| | |[[View texture|The ability to create a new texture]], with a new internal format, that references an existing texture's storage | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_view.txt ARB_texture_view] | ||
|- | |- | ||
| | |[[Separate Attribute Format|Separation of vertex format from buffer object]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_binding.txt ARB_vertex_attrib_binding] | ||
|- | |- | ||
!Addition | |||
!Promoted from | |||
|- | |- | ||
| | |More robustness of API | ||
| | |[http://www.opengl.org/registry/specs/ARB/robust_buffer_access_behavior.txt ARB_robust_buffer_access_behavior], | ||
[http://www.opengl.org/registry/specs/ARB/robustness_isolation.txt ARB_robustness_isolation], | |||
[http://www.opengl.org/registry/specs/ARB/wgl_robustness_isolation.txt WGL_ARB_robustness_isolation], | |||
[http://www.opengl.org/registry/specs/ARB/glx_robustness_isolation.txt GLX_ARB_robustness_isolation] | |||
|- | |- | ||
| | | EAC and ETC compressed image formats. | ||
| | | | ||
|} | |} | ||
Links: | |||
*[http://www.opengl.org/registry/doc/glspec43.core.20130214.pdf OpenGL 4.3 Core Profile Specification] | |||
*[http://www.opengl.org/registry/doc/glspec43.compatibility.20130214.pdf OpenGL 4.3 Compatibility Profile Specification] | |||
*[http://www.opengl.org/registry/doc/GLSLangSpec.4.30.8.pdf OpenGL Shading Language 4.30 Specification] | |||
=== OpenGL 4.2 (2011) === | |||
{| class="wikitable" | |||
=== OpenGL | |||
{| | |||
!Addition | !Addition | ||
! | ![[Extension#Core Extensions|Core Extension]] | ||
|- | |||
|Allows atomically [[Atomic_Counter|incrementing/decrementing and fetching of buffer object memory locations from shaders]] | |||
|[http://www.opengl.org/registry/specs/ARB/shader_atomic_counters.txt ARB_shader_atomic_counters] | |||
|- | |||
|Allows shaders to [[Image Load Store|read and write images]], with [[Incoherent Memory Access|few but difficult restrictions]] | |||
|[http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt ARB_shader_image_load_store] | |||
|- | |||
|Allows texture objects to have [[Immutable Storage Texture|immutable storage, and allocating all mipmap levels and images in one call]]. The storage becomes immutable, but the contents of the storage are not | |||
|[http://www.opengl.org/registry/specs/ARB/texture_storage.txt ARB_texture_storage] | |||
|- | |||
|Allows [[Draw Transform Feedback|instanced rendering of data written by transform feedback operations]] | |||
|[http://www.opengl.org/registry/specs/ARB/transform_feedback_instanced.txt ARB_transform_feedback_instanced] | |||
|- | |- | ||
| | |Allows the setting of [[In-Shader Uniform Binding|Uniform Buffer Object]] and [[In-Shader Texture Unit|sampler]] binding points directly from GLSL, among [[Qualifier Order|many other]] small changes | ||
| | |[http://www.opengl.org/registry/specs/ARB/shading_language_420pack.txt ARB_shading_language_420pack] | ||
|- | |- | ||
| | |Allows instanced rendering with a [[Instancing|starting instance value]]. | ||
| | |[http://www.opengl.org/registry/specs/ARB/base_instance.txt ARB_base_instance] | ||
|- | |- | ||
| | |Allows the user to [[Query Image Format|detect the maximum number of samples possible]] for a particular [[Image Format|image format]] and [[Texture#Theory|texture type]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/internalformat_query.txt ARB_internalformat_query] | ||
|- | |- | ||
| | |Allows for sub-rectangle selection when transferring compressed texture data. | ||
| | |[http://www.opengl.org/registry/specs/ARB/compressed_texture_pixel_storage.txt ARB_compressed_texture_pixel_storage] | ||
|- | |- | ||
| | |Allows unpacking 16-bit floats from a 32-bit unsigned integer value in shaders. | ||
| | |[http://www.opengl.org/registry/specs/ARB/shading_language_packing.txt ARB_shading_language_packing] | ||
|- | |- | ||
| | |Allows querying of the [[Buffer Object#Alignment|alignment for pointers]] returned from [[Map Buffer Range|buffer object mapping operations]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/map_buffer_alignment.txt ARB_map_buffer_alignment] | ||
|- | |- | ||
| | |Allows explicitly defining how a [[Fragment Shader Output|fragment shader will modify the depth value]], so that the system can optimize these cases better | ||
| | |[http://www.opengl.org/registry/specs/ARB/conservative_depth.txt ARB_conservative_depth] | ||
|- | |- | ||
!Addition | |||
!Promoted from | |||
|- | |- | ||
| | |Allows the use of [[BPTC Texture Compression|BPTC compressed image formats]]. | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt ARB_texture_compression_BPTC] | ||
|} | |} | ||
=== OpenGL 1 | Links: | ||
{| | * [http://www.opengl.org/registry/doc/glspec42.core.20110808.pdf OpenGL 4.2 Core Profile Specification] | ||
* [http://www.opengl.org/registry/doc/glspec42.compatibility.20110808.pdf OpenGL 4.2 Compatibility Profile Specification] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.4.20.6.clean.pdf OpenGL Shading Language 4.20.6 Specification] | |||
=== OpenGL 4.1 (2010) === | |||
{| class="wikitable" | |||
!Addition | !Addition | ||
! | ![[Extension#Core Extensions|Core Extension]] | ||
|- | |||
|[[Program Binary|Query and load a binary blob for program objects]] | |||
|[http://www.opengl.org/registry/specs/ARB/get_program_binary.txt ARB_get_program_binary] | |||
|- | |||
|Ability to [[GLSL_Object#Program separation|bind programs individually to programmable stages]] | |||
|[http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt ARB_separate_shader_objects] | |||
|- | |- | ||
| | |Pulling missing functionality from [[OpenGL ES]] 2.0 into OpenGL | ||
| | |[http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt ARB_ES2_compatibility] | ||
|- | |- | ||
| | |Documents precision requirements for several FP operations | ||
| | |[http://www.opengl.org/registry/specs/ARB/shader_precision.txt ARB_shader_precision] | ||
|- | |- | ||
| | |Provides [[Vertex Format|64-bit floating-point component vertex attributes]] | ||
| | |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt ARB_vertex_attrib_64_bit] | ||
|- | |- | ||
| | |Multiple [[Viewport]]s for the same rendering surface, or one per surface | ||
| | |[http://www.opengl.org/registry/specs/ARB/viewport_array.txt ARB_viewport_array] | ||
|} | |||
Links: | |||
* [http://www.opengl.org/registry/doc/glspec41.core.20100725.pdf OpenGL 4.1 Core Profile Specification] | |||
* [http://www.opengl.org/registry/doc/glspec41.compatibility.20100725.pdf OpenGL 4.1 Compatibility Profile Specification] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.4.10.6.clean.pdf OpenGL Shading Language 4.10.6 Specification] | |||
=== OpenGL 4.0 (2010) === | |||
{| class="wikitable" | |||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |- | ||
| | |Shading language 4.00 | ||
| | |{{extref|texture_query_lod}}, {{extref|gpu_shader5}}, {{extref|gpu_shader_fp64}}, {{extref|shader_subroutine}}, {{extref|texture_gather}} | ||
|- | |- | ||
| | |[[Indirect Drawing]], without multidraw | ||
| | |{{extref|draw_indirect}} | ||
|- | |- | ||
| | |Request minimum number of fragment inputs | ||
| | |{{extref|sample_shading}} | ||
|- | |- | ||
| | |[[Tessellation]], with shader stages | ||
| | |{{extref|tessellation_shader}} | ||
|- | |- | ||
| | |[[Buffer Texture]] formats RGB32F, RGB32I, RGB32UI | ||
| | |{{extref|texture_buffer_object_rgb32}} | ||
|- | |- | ||
|Texture | |[[Cubemap Array Texture]] | ||
| | |{{extref|texture_cube_map_array}} | ||
|- | |- | ||
| | |[[Transform Feedback]] objects and multiple feedback stream output. | ||
| | |{{extref|transform_feedback2}}, {{extref|transform_feedback3}} | ||
|- | |- | ||
!Addition | |||
!Promoted from | |||
|- | |- | ||
| | |[[Draw Buffer Blend|Individual blend equations for each color output]] | ||
| | |{{extref|draw_buffers_blend}} | ||
|} | |} | ||
=== OpenGL | Links: | ||
{| | * [http://www.opengl.org/registry/doc/glspec40.core.20100311.pdf OpenGL 4.0 Core Profile Specification] | ||
* [http://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf OpenGL 4.0 Compatibility Profile Specification] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.4.00.9.clean.pdf OpenGL Shading Language 4.00.9 Specification] | |||
=== OpenGL 3.3 (2010) === | |||
{| class="wikitable" | |||
!Addition | !Addition | ||
! | ![[Extension#Core Extensions|Core Extension]] | ||
|- | |||
|Shading language 3.30 | |||
|{{extref|shader_bit_encoding}} | |||
|- | |||
|[[Dual Source Blending|Dual-source blending]]. | |||
|{{extref|blend_func_extended}} | |||
|- | |||
|Shader-defined locations for [[Layout Vertex Attribute|attributes]] and [[Layout Fragment Output|fragment shader outputs]]. | |||
|{{extref|explicit_attrib_location}} | |||
|- | |||
|Simple boolean [[Occlusion Query]] | |||
|{{extref|occlusion_query2}} | |||
|- | |||
|[[Sampler Object]]s | |||
|{{extref|sampler_objects}} | |||
|- | |||
|A new [[Image Format|image format]] for unsigned 10.10.10.2 colors | |||
|{{extref|texture_rgb10_a2ui}} | |||
|- | |||
|[[Texture Swizzle|Texture swizzle]] | |||
|{{extref|texture_swizzle}} | |||
|- | |- | ||
| | |[[Timer Query|Timer queries]] | ||
| | |{{extref|timer_query}} | ||
|- | |- | ||
| | |[[Instanced Array|Instanced arrays]] | ||
| | |{{extref|instanced_arrays}} | ||
|- | |- | ||
| | |[[Vertex Format Type|Vertex attributes 2.10.10.10]] | ||
| | |{{extref|vertex_type_2_10_10_10_rev}} | ||
|} | |} | ||
=== OpenGL 2 | Links: | ||
{| | * [http://www.opengl.org/registry/doc/glspec33.core.20100311.pdf OpenGL 3.3 Core Profile Specification] | ||
* [http://www.opengl.org/registry/doc/glspec33.compatibility.20100311.pdf OpenGL 3.3 Compatibility Profile Specification] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.3.30.6.clean.pdf OpenGL Shading Language 3.30.9 Specification] | |||
* [http://www.opengl.org/sdk/docs/man3 OpenGL 3.3 Reference Pages] | |||
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=273669#Post273669 Official feedback on OpenGL 3.3 thread] | |||
=== OpenGL 3.2 (2009) === | |||
* Core and compatibility profiles | |||
* Shading language 1.50 | |||
{| class="wikitable" | |||
!Addition | !Addition | ||
! | ![[Extension#Core Extensions|Core Extension]] | ||
|- | |||
|[[D3D Vertex Format Compatibility|D3D compatible color vertex component ordering]] | |||
|{{extref|vertex_array_bgra}} | |||
|- | |||
|[[Draw Base Index|Drawing command allowing modification of the base vertex index]] | |||
|{{extref|draw_elements_base_vertex}} | |||
|- | |||
|[[Fragment_Shader#System_inputs|Shader fragment coordinate convention control]] | |||
|{{extref|fragment_coord_conventions}} | |||
|- | |- | ||
| | |[[Provoking Vertex|Provoking vertex control]] | ||
| | |{{extref|provoking_vertex}} | ||
|- | |- | ||
| | |[[Seamless Cubemap|Seamless cube map filtering]] | ||
| | |{{extref|seamless_cube_map}} | ||
|- | |- | ||
| | |Multisampled textures and texture samplers for specific sample locations | ||
| | |{{extref|texture_multisample}} | ||
|- | |- | ||
| | |Fragment [[Depth Clamp]]ing | ||
| | |{{extref|depth_clamp}} | ||
|- | |- | ||
| | |[[Sync Object|Fence sync objects]] | ||
| | |{{extref|sync}} | ||
|- | |- | ||
!Addition | |||
!Promoted from | |||
|- | |- | ||
| | |[[Geometry Shader]]s, as well as input/output [[Interface Block]]s | ||
| | |{{extref|geometry_shader4}}, heavily modified. | ||
|} | |} | ||
=== OpenGL | Links: | ||
Core | * [http://www.opengl.org/registry/doc/glspec32.core.20091207.pdf OpenGL 3.2 Core Profile Specification] | ||
{| | * [http://www.opengl.org/registry/doc/glspec32.compatibility.20091207.pdf OpenGL 3.2 Compatibility Profile Specification] | ||
* [http://www.opengl.org/registry/doc/GLSLangSpec.1.50.11.pdf OpenGL Shading Language 1.50.11 Specification] | |||
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=261641#Post261641 Official feedback on OpenGL 3.2 thread] | |||
=== OpenGL 3.1 (2009) === | |||
* All features deprecated in OpenGL 3.0 are removed except wide lines | |||
* Shading language 1.40 | |||
* SNORM texture component formats | |||
{| class="wikitable" | |||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |||
|[[Uniform Buffer Object]]s | |||
|{{extref|uniform_buffer_object}} | |||
|- | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |[[Instancing|Instanced rendering with a per instance counter accessible to vertex shaders]] | ||
| | |{{extref|draw_instanced}} | ||
|- | |||
|Data copying between buffer objects | |||
|{{extref|copy_buffer}} | |||
|- | |||
|[[Primitive restart|Primitive restart]] | |||
|{{extref|primitive_restart|NV}} | |||
|- | |||
|[[Buffer Texture]]s | |||
|{{extref|texture_buffer_object}} | |||
|- | |- | ||
| | |[[Rectangle Texture]]s | ||
| | |{{extref|texture_rectangle}} | ||
|} | |} | ||
Links: | Links: | ||
* [http://www.opengl.org/registry/doc/ | * [http://www.opengl.org/registry/doc/glspec31.20090528.pdf OpenGL 3.1 Specification] | ||
* [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1. | * [http://www.opengl.org/registry/doc/glspec31undep.20090528.pdf OpenGL 3.1 Specification with GL_ARB_compatibility extension] | ||
* [http://www.opengl.org/ | * [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.40.08.pdf OpenGL Shading Language 1.40.08 Specification] | ||
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=255002#Post255002 Official feedback on OpenGL 3.1 thread] | |||
=== OpenGL 3.0 (2008) === | === OpenGL 3.0 (2008) === | ||
Line 258: | Line 471: | ||
* Mapping buffer subranges into client space | * Mapping buffer subranges into client space | ||
* Single- and double-channel (R and RG) internal formats for textures and renderbuffers | * Single- and double-channel (R and RG) internal formats for textures and renderbuffers | ||
{| | {| class="wikitable" | ||
!Addition | |||
![[Extension#Core Extensions|Core Extension]] | |||
|- | |||
|[[Framebuffer Object]]s, along with blitting, [[Multisample]] [[Renderbuffer Object]]s, and [[Depth Stencil Format|packed depth/stencil image formats]] | |||
|{{extref|framebuffer_object}} | |||
|- | |||
|[[Vertex Array Object]]s | |||
|{{extref|vertex_array_object}} | |||
|- | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
|Conditional | |[[Conditional Rendering]] | ||
| | |{{extref|conditional_render|NV}} | ||
|- | |- | ||
|Floating-point color and depth internal formats for textures and render buffers | |Floating-point color and depth internal formats for textures and render buffers | ||
| | |{{extref|color_buffer_float}}, {{extref|depth_buffer_float|NV}}, {{extref|texture_float}}, {{extref|packed_float|EXT}}, {{extref|texture_shared_exponent|EXT}} | ||
|- | |- | ||
|Half-float (16-bit) vertex array and pixel data formats | |Half-float (16-bit) vertex array and pixel data formats | ||
| | |{{extref|half_float|NV}}, {{extref|half_float_pixel|EXT}} | ||
|- | |- | ||
| | |Integral [[Image Format]]s, which can be fetched as integers rather than being converted to normalized floats. | ||
| | |{{extref|texture_integer|EXT}} | ||
|- | |- | ||
| | |[[Array Texture]]s | ||
| | |{{extref|texture_array|EXT}} | ||
|- | |- | ||
| | |[[Blending#Blend_enabling|Per-color-attachment blend enables]] and [[Color Mask|color writemasks]] | ||
| | |{{extref|draw_buffers2|EXT}} | ||
|- | |- | ||
| | |[[Red Green Texture Compression]] | ||
| | |{{extref|texture_compression_rgtc|EXT}} | ||
|- | |- | ||
| | |[[Transform Feedback]] | ||
| | |{{extref|transform_feedback}} | ||
|- | |- | ||
|sRGB framebuffer mode | |sRGB framebuffer mode | ||
| | |{{extref|framebuffer_sRGB|EXT}} | ||
|} | |} | ||
==== Deprecation Model ==== | ==== Deprecation Model ==== | ||
OpenGL 3 specification marks many features as deprecated, which will be removed in next versions. This features include: | OpenGL 3 specification marks many features as deprecated, which will be removed in next versions. This features include: | ||
{{div col|3}} | |||
* Application-generated object names | * Application-generated object names | ||
* Color index mode | * Color index mode | ||
Line 309: | Line 520: | ||
* Begin/End primitive specification | * Begin/End primitive specification | ||
* Edge flags | * Edge flags | ||
* Fixed function vertex processing | * Fixed function vertex processing | ||
* Client vertex arrays | * Client-side vertex arrays | ||
* Rectangles | * Rectangles | ||
* Current raster position | * Current raster position | ||
Line 338: | Line 549: | ||
* Attribute stacks | * Attribute stacks | ||
* Unified extension string | * Unified extension string | ||
{{div col end}} | |||
Links: | Links: | ||
* [http://www.opengl.org/registry/doc/glspec30.20080923.pdf OpenGL 3.0 Specification] | * [http://www.opengl.org/registry/doc/glspec30.20080923.pdf OpenGL 3.0 Specification] | ||
* [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.10.pdf OpenGL Shading Language 1.30.10 Specification] | * [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.10.pdf OpenGL Shading Language 1.30.10 Specification] | ||
=== OpenGL 2.1 (2006) === | |||
Core features: | |||
{| class="wikitable" | |||
!Addition | |||
!Promoted from | |||
|- | |||
|Pixel buffer objects | |||
|{{extref|pixel_buffer_object|ARB}} | |||
|- | |||
|sRGB textures | |||
|{{extref|texture_sRGB|EXT}} | |||
|} | |||
Shading language 1.20: | |||
* Non-square matrices in GLSL. | |||
Links: | |||
* [http://www.opengl.org/registry/doc/glspec21.20061201.pdf OpenGL 2.1 Specification] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf OpenGL Shading Language 1.20.8 Specification] | |||
=== OpenGL | === OpenGL 2.0 (2004) === | ||
{| class="wikitable" | |||
{| | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Shader objects | ||
| | |{{extref|shader_objects|ARB}}, ''heavily modified'' | ||
|- | |- | ||
| | |Shader programs | ||
| | |{{extref|vertex_shader|ARB}}, {{extref|fragment_shader|ARB}}, ''heavily modified'' | ||
|- | |- | ||
| | |Shading language 1.10 | ||
| | |{{extref|shading_language_100|ARB}}, ''heavily modified'' | ||
|- | |- | ||
| | |Multiple render targets | ||
| | |{{extref|draw_buffers|ARB}} | ||
|- | |- | ||
| | |Non-power-of-two textures | ||
| | |{{extref|texture_non_power_of_two|ARB}} | ||
|- | |- | ||
| | |Point sprites | ||
| | |{{extref|point_sprite|ARB}} | ||
|- | |||
|Separate stencil | |||
|{{extref|separate_stencil|ATI}}, {{extref|stencil_two_side|EXT}} | |||
|} | |} | ||
Links: | Links: | ||
* [ | * [https://khronos.org/registry/OpenGL/specs/gl/glspec20.pdf OpenGL 2.0 Specification] | ||
* [ | * [https://khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.1.10.pdf OpenGL Shading Language 1.10 Specification] | ||
=== OpenGL 1.5 (2003) === | |||
{| class="wikitable" | |||
!Addition | |||
!Promoted from | |||
|- | |||
|Buffer objects | |||
|{{extref|vertex_buffer_object|ARB}} | |||
|- | |||
|Occlusion query | |||
|{{extref|occlusion_query|ARB}} | |||
|- | |||
|Shadow functions | |||
|{{extref|shadow_funcs|EXT}} | |||
|} | |||
Links: | |||
* [https://khronos.org/registry/OpenGL/specs/gl/glspec15.pdf OpenGL 1.5 Specification] | |||
=== OpenGL | === OpenGL 1.4 (2002) === | ||
{| class="wikitable" | |||
{| | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Automatic mipmap generation | ||
| | |{{extref|generate_mipmap|SGIS}} | ||
|- | |- | ||
| | |Blend squaring | ||
| | |{{extref|blend_square|NV}} | ||
|- | |- | ||
| | |Depth textures and shadows | ||
| | |{{extref|depth_texture|ARB}}, {{extref|shadow|ARB}} | ||
|- | |- | ||
| | |Fog coordinate | ||
| | |{{extref|fog_coord|EXT}} | ||
|- | |- | ||
| | |Multiple draw arrays | ||
| | |{{extref|multi_draw_arrays|EXT}} | ||
|- | |- | ||
| | |Point parameters | ||
| | |{{extref|point_parameters|ARB}} | ||
|- | |||
|Secondary color | |||
|{{extref|secondary_color|EXT}} | |||
|- | |||
|Separate blend functions | |||
|{{extref|blend_func_separate|EXT}} | |||
|- | |||
|Stencil wrap | |||
|{{extref|stencil_wrap|EXT}} | |||
|- | |||
|Texture crossbar env mode | |||
|{{extref|texture_env_crossbar|ARB}} | |||
|- | |- | ||
| | |Texture LOD bias | ||
| | |{{extref|texture_lod_bias|EXT}} | ||
|- | |- | ||
| | |Texture mirrored repeat | ||
| | |{{extref|texture_mirrored_repeat|ARB}} | ||
|- | |- | ||
| | |Window raster position | ||
| | |{{extref|window_pos|ARB}} | ||
|} | |} | ||
Links: | Links: | ||
* [ | * [https://khronos.org/registry/OpenGL/specs/gl/glspec14.pdf OpenGL 1.4 Specification] | ||
=== OpenGL 1.3 (2001) === | |||
=== OpenGL | {| class="wikitable" | ||
{| | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Compressed textures | ||
| | |{{extref|texture_compression|ARB}} | ||
|- | |- | ||
| | |Cube map textures | ||
| | |{{extref|texture_cube_map|ARB}} | ||
|- | |- | ||
| | |Multisample | ||
| | |{{extref|multisample|ARB}} | ||
|- | |- | ||
| | |Multitexture | ||
| | |{{extref|multitexture|ARB}} | ||
|- | |- | ||
| | |Texture add env mode | ||
| | |{{extref|texture_env_add|ARB}} | ||
|- | |- | ||
| | |Texture combine env mode | ||
| | |{{extref|texture_env_combine|ARB}} | ||
|- | |- | ||
|Texture | |Texture dot3 env mode | ||
| | |{{extref|texture_env_dot3|ARB}} | ||
|- | |- | ||
| | |Texture border clamp | ||
| | |{{extref|texture_border_clamp|ARB}} | ||
|- | |- | ||
| | |Transpose matrix | ||
| | |{{extref|transpose_matrix|ARB}} | ||
|} | |} | ||
Links: | Links: | ||
* [ | * [https://khronos.org/registry/OpenGL/specs/gl/glspec13.pdf OpenGL 1.3 Specification] | ||
=== OpenGL 1.2.1 (1998) === | |||
This version defines ARB extensions concept. ARB extensions are not required to be supported by a conformant OpenGL | |||
implementation, but are expected to be widely available; they define | |||
functionality that is likely to move into the required feature set in a future | |||
revision of the specification. | |||
GL implementations of such later revisions should continue to export the name | |||
strings of promoted extensions in the EXTENSIONS string, and continue to support | |||
the ARB-affixed versions of functions and enumerants as a transition aid. | |||
=== OpenGL | === OpenGL 1.2 (1998) === | ||
{| | {| class="wikitable" | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |3D textures | ||
| | |{{extref|texture3D|EXT}} | ||
|- | |- | ||
| | |BGRA pixel formats | ||
| | |{{extref|bgra|EXT}} | ||
|- | |- | ||
| | |Packed pixel formats | ||
| | |{{extref|packed_pixels|EXT}} | ||
|- | |- | ||
| | |Normal rescaling | ||
| | |{{extref|rescale_normal|EXT}} | ||
|- | |- | ||
| | |Separate specular color | ||
| | |{{extref|separate_specular_color|EXT}} | ||
|- | |- | ||
| | |Texture coordinate edge clamping | ||
| | |{{extref|texture_edge_clamp|SGIS}} | ||
|- | |- | ||
| | |Texture LOD control | ||
| | |{{extref|texture_lod|SGIS}} | ||
|- | |- | ||
| | |Vertex array draw element range | ||
| | |{{extref|draw_range_elements|EXT}} | ||
|} | |} | ||
==== Imaging subset (optional) ==== | |||
{| class="wikitable" | |||
== | |||
{| | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Color Tables | ||
| | |{{extref|color_table|SGI}}, {{extref|color_subtable|EXT}} | ||
|- | |- | ||
| | |Convolution | ||
| | |{{extref|convolution|EXT}}, {{extref|convolution_border_modes|HP}}, {{extref|convolution_border_modes|SUN}} | ||
|- | |- | ||
| | |Color matrix | ||
| | |{{extref|color_matrix|SGI}} | ||
|- | |- | ||
| | |Pixel data statistics | ||
| | |{{extref|histogram|EXT}} | ||
|- | |- | ||
| | |Constant blend color | ||
| | |{{extref|blend_color|EXT}} | ||
|- | |- | ||
| | |New blending equations | ||
| | |{{extref|blend_minmax|EXT}}, {{extref|blend_subtract|EXT}} | ||
|} | |} | ||
Links: | Links: | ||
* [ | * [https://khronos.org/registry/OpenGL/specs/gl/glspec121.pdf OpenGL 1.2.1 Specification] | ||
=== OpenGL | === OpenGL 1.1 (1997) === | ||
{| class="wikitable" | {| class="wikitable" | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Vertex arrays | ||
| | |{{extref|vertex_array|EXT}} | ||
|- | |- | ||
| | |Polygon offset | ||
| | |{{extref|polygon_offset|EXT}} | ||
|- | |- | ||
| | |Logical operation | ||
| | |{{extref|blend_logic_op|EXT}} | ||
|- | |- | ||
| | |Internal texture formats | ||
| | |{{extref|texture|EXT}} | ||
|- | |- | ||
| | |GL_REPLACE texture env | ||
|{{extref|texture|EXT}} | |||
|- | |- | ||
| | |Texture proxy | ||
| | |{{extref|texture|EXT}} | ||
|- | |- | ||
| | |Copy texture and subtexture | ||
|{{extref|copy_texture|EXT}}, {{extref|subtexture|EXT}} | |||
| | |||
|- | |- | ||
|Texture objects | |||
|{{extref|texture_object|EXT}} | |||
|} | |} | ||
Links: | Links: | ||
* [ | * [https://www.khronos.org/registry/OpenGL/specs/gl/glspec11.pdf OpenGL 1.1 Specification] | ||
=== OpenGL 1.0 (1992) === | |||
* [ | First release. | ||
Links: | |||
* [https://khronos.org/registry/OpenGL/specs/gl/glspec10.pdf OpenGL 1.0 Specification] |
Latest revision as of 11:12, 13 February 2022
Overview
OpenGL was first created as an open and reproducable alternative to Iris GL which had been the proprietary graphics API on Silicon Graphics workstations. Although OpenGL was initially similar in some respects to IrisGL the lack of a formal specification and conformance tests made Iris GL unsuitable for broader adoption. Mark Segal and Kurt Akeley authored the OpenGL 1.0 specification which tried to formalize the definition of a useful graphics API and made cross platform non-SGI 3rd party implementation and support viable. One notable omission from version 1.0 of the API was texture objects. IrisGL had definition and bind stages for all sorts of objects including materials, lights, textures and texture environments. OpenGL eschewed these objects in favor of incremental state changes with the idea that collective changes could be encapsulated in display lists. This has remained the philosophy with the exception that texture objects (glBindTexture) with no distinct definition stage are a key part of the API.
OpenGL has been through a number of revisions which have predominantly been incremental additions where extensions to the core API have gradually been incorporated into the main body of the API. For example OpenGL 1.1 added the glBindTexture extension to the core API.
OpenGL 2.0 incorporates the significant addition of the OpenGL Shading Language (also called GLSL), a C like language with which the transformation and fragment shading stages of the pipeline can be programmed.
OpenGL 3.0 adds the concept of deprecation: marking certain features as subject to removal in later versions. GL 3.1 removed most deprecated features, and GL 3.2 created the notion of core and compatibility OpenGL contexts.
Official versions of OpenGL released to date are 1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6.
Summary of version changes
This is summary of all changes made in OpenGL specifications through its development. More information about changes may be obtained in OpenGL specification for the version. (In appendix.)
Most functionality added to OpenGL these days is either promoted from one or more extensions, or is provided by a Core Extension. The latter method means that the extension is identical to the core functionality, even in the naming of enumerators and functions. When functionality is promoted from an extension, it can undergo modifications, and the functions/enumerators have their suffix's removed.
OpenGL 4.6 (2017)
Addition | Core Extension |
---|---|
The SPIR-V language can be used to define shaders. | ARB_gl_spirv, ARB_spirv_extensions |
Vertex shaders can get the draw ID and base vertex/instance values from rendering commands. | ARB_shader_draw_parameters |
Multi-draw indirect rendering commands that can fetch the number of draws from a buffer. | ARB_indirect_parameters |
Statistics and transform feedback overflow queries. | ARB_pipeline_statistics_query, ARB_transform_feedback_overflow_query |
Anisotropic Filtering | ARB_texture_filter_anisotropic |
Clamping polygon offsets | ARB_polygon_offset_clamp |
OpenGL Contexts can be created that do not report errors of any kind. | KHR_no_error |
More operations for Atomic Counters. | ARB_shader_atomic_counter_ops |
Avoiding divergent shader invocations, where they are unnecessary. | ARB_shader_group_vote |
Links:
- OpenGL 4.6 Core Profile Specification
- OpenGL 4.6 Compatibility Profile Specification
- OpenGL Shading Language 4.60 Specification
OpenGL 4.5 (2014)
Addition | Core Extension |
---|---|
Additional clip control modes to configure how clip space is mapped to window space. | ARB_clip_control |
Adds a new GLSL gl_CullDistance shader output, similar to gl_ClipDistance, but used for whole primitive culling. | ARB_cull_distance |
Compatibility with OpenGL ES 3.1 | ARB_ES3_1_compatibility |
Adds new modes to glBeginConditionalRender which invert condition used to determine whether to draw or not. | ARB_conditional_render_inverted |
Provides control over the spacial granularity at which the underlying implementation computes derivatives. | ARB_derivative_control |
Allows modifying and querying object state without binding objects. | ARB_direct_state_access |
Adds a new function to get sub-regions of texture images. | ARB_get_texture_sub_image |
Upgrades the ARB_robustness functionality to meet ES 3.1 standards. | KHR_robustness |
Provides GLSL built-in functions allowing shaders to query the number of samples of a texture. | ARB_shader_texture_image_samples |
Relaxes the restrictions on rendering to a currently bound texture and provides a mechanism to avoid read-after-write hazards. | ARB_texture_barrier |
Links:
- OpenGL 4.5 Core Profile Specification
- OpenGL 4.5 Compatibility Profile Specification
- OpenGL Shading Language 4.50 Specification
OpenGL 4.4 (2013)
While a number of features made it into core OpenGL, a number of other features were left to specific extensions. These offer certainly functionality that lesser 4.x hardware would be unable to handle.
Links:
- OpenGL 4.4 Core Profile Specification
- OpenGL 4.4 Compatibility Profile Specification
- OpenGL Shading Language 4.40 Specification
OpenGL 4.3 (2012)
Links:
- OpenGL 4.3 Core Profile Specification
- OpenGL 4.3 Compatibility Profile Specification
- OpenGL Shading Language 4.30 Specification
OpenGL 4.2 (2011)
Links:
- OpenGL 4.2 Core Profile Specification
- OpenGL 4.2 Compatibility Profile Specification
- OpenGL Shading Language 4.20.6 Specification
OpenGL 4.1 (2010)
Addition | Core Extension |
---|---|
Query and load a binary blob for program objects | ARB_get_program_binary |
Ability to bind programs individually to programmable stages | ARB_separate_shader_objects |
Pulling missing functionality from OpenGL ES 2.0 into OpenGL | ARB_ES2_compatibility |
Documents precision requirements for several FP operations | ARB_shader_precision |
Provides 64-bit floating-point component vertex attributes | ARB_vertex_attrib_64_bit |
Multiple Viewports for the same rendering surface, or one per surface | ARB_viewport_array |
Links:
- OpenGL 4.1 Core Profile Specification
- OpenGL 4.1 Compatibility Profile Specification
- OpenGL Shading Language 4.10.6 Specification
OpenGL 4.0 (2010)
Addition | Core Extension |
---|---|
Shading language 4.00 | ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather |
Indirect Drawing, without multidraw | ARB_draw_indirect |
Request minimum number of fragment inputs | ARB_sample_shading |
Tessellation, with shader stages | ARB_tessellation_shader |
Buffer Texture formats RGB32F, RGB32I, RGB32UI | ARB_texture_buffer_object_rgb32 |
Cubemap Array Texture | ARB_texture_cube_map_array |
Transform Feedback objects and multiple feedback stream output. | ARB_transform_feedback2, ARB_transform_feedback3 |
Addition | Promoted from |
Individual blend equations for each color output | ARB_draw_buffers_blend |
Links:
- OpenGL 4.0 Core Profile Specification
- OpenGL 4.0 Compatibility Profile Specification
- OpenGL Shading Language 4.00.9 Specification
OpenGL 3.3 (2010)
Addition | Core Extension |
---|---|
Shading language 3.30 | ARB_shader_bit_encoding |
Dual-source blending. | ARB_blend_func_extended |
Shader-defined locations for attributes and fragment shader outputs. | ARB_explicit_attrib_location |
Simple boolean Occlusion Query | ARB_occlusion_query2 |
Sampler Objects | ARB_sampler_objects |
A new image format for unsigned 10.10.10.2 colors | ARB_texture_rgb10_a2ui |
Texture swizzle | ARB_texture_swizzle |
Timer queries | ARB_timer_query |
Instanced arrays | ARB_instanced_arrays |
Vertex attributes 2.10.10.10 | ARB_vertex_type_2_10_10_10_rev |
Links:
- OpenGL 3.3 Core Profile Specification
- OpenGL 3.3 Compatibility Profile Specification
- OpenGL Shading Language 3.30.9 Specification
- OpenGL 3.3 Reference Pages
- Official feedback on OpenGL 3.3 thread
OpenGL 3.2 (2009)
- Core and compatibility profiles
- Shading language 1.50
Addition | Core Extension |
---|---|
D3D compatible color vertex component ordering | ARB_vertex_array_bgra |
Drawing command allowing modification of the base vertex index | ARB_draw_elements_base_vertex |
Shader fragment coordinate convention control | ARB_fragment_coord_conventions |
Provoking vertex control | ARB_provoking_vertex |
Seamless cube map filtering | ARB_seamless_cube_map |
Multisampled textures and texture samplers for specific sample locations | ARB_texture_multisample |
Fragment Depth Clamping | ARB_depth_clamp |
Fence sync objects | ARB_sync |
Addition | Promoted from |
Geometry Shaders, as well as input/output Interface Blocks | ARB_geometry_shader4, heavily modified. |
Links:
- OpenGL 3.2 Core Profile Specification
- OpenGL 3.2 Compatibility Profile Specification
- OpenGL Shading Language 1.50.11 Specification
- Official feedback on OpenGL 3.2 thread
OpenGL 3.1 (2009)
- All features deprecated in OpenGL 3.0 are removed except wide lines
- Shading language 1.40
- SNORM texture component formats
Addition | Core Extension |
---|---|
Uniform Buffer Objects | ARB_uniform_buffer_object |
Addition | Promoted from |
Instanced rendering with a per instance counter accessible to vertex shaders | ARB_draw_instanced |
Data copying between buffer objects | ARB_copy_buffer |
Primitive restart | NV_primitive_restart |
Buffer Textures | ARB_texture_buffer_object |
Rectangle Textures | ARB_texture_rectangle |
Links:
- OpenGL 3.1 Specification
- OpenGL 3.1 Specification with GL_ARB_compatibility extension
- OpenGL Shading Language 1.40.08 Specification
- Official feedback on OpenGL 3.1 thread
OpenGL 3.0 (2008)
- New context creation mechanism
- Full and forward compatible context
- Profiles
- Mapping buffer subranges into client space
- Single- and double-channel (R and RG) internal formats for textures and renderbuffers
Addition | Core Extension |
---|---|
Framebuffer Objects, along with blitting, Multisample Renderbuffer Objects, and packed depth/stencil image formats | ARB_framebuffer_object |
Vertex Array Objects | ARB_vertex_array_object |
Addition | Promoted from |
Conditional Rendering | NV_conditional_render |
Floating-point color and depth internal formats for textures and render buffers | ARB_color_buffer_float, NV_depth_buffer_float, ARB_texture_float, EXT_packed_float, EXT_texture_shared_exponent |
Half-float (16-bit) vertex array and pixel data formats | NV_half_float, EXT_half_float_pixel |
Integral Image Formats, which can be fetched as integers rather than being converted to normalized floats. | EXT_texture_integer |
Array Textures | EXT_texture_array |
Per-color-attachment blend enables and color writemasks | EXT_draw_buffers2 |
Red Green Texture Compression | EXT_texture_compression_rgtc |
Transform Feedback | ARB_transform_feedback |
sRGB framebuffer mode | EXT_framebuffer_sRGB |
Deprecation Model
OpenGL 3 specification marks many features as deprecated, which will be removed in next versions. This features include:
- Application-generated object names
- Color index mode
- Shading language 1.10 and 1.20
- Begin/End primitive specification
- Edge flags
- Fixed function vertex processing
- Client-side vertex arrays
- Rectangles
- Current raster position
- Two-sided color selection
- Non-sprite points
- Wide lines and line stripple
- Quadrilateral and polygon primitives
- Separate polygon draw mode
- Polygon stripple
- Pixel transfer modes and operations
- Pixel drawing
- Bitmaps
- Legacy OpenGL 1.0 pixel formats
- Legacy pixel formats
- Depth texture mode
- Texture wrap mode CLAMP
- Texture borders
- Automatic mipmap generation
- Fixed function fragment processing
- Alpha test
- Accumulation buffers
- Context framebuffer size queries
- Evaluators
- Selection and feedback mode
- Display lists
- Hints
- Attribute stacks
- Unified extension string
Links:
OpenGL 2.1 (2006)
Core features:
Addition | Promoted from |
---|---|
Pixel buffer objects | ARB_pixel_buffer_object |
sRGB textures | EXT_texture_sRGB |
Shading language 1.20:
- Non-square matrices in GLSL.
Links:
OpenGL 2.0 (2004)
Addition | Promoted from |
---|---|
Shader objects | ARB_shader_objects, heavily modified |
Shader programs | ARB_vertex_shader, ARB_fragment_shader, heavily modified |
Shading language 1.10 | ARB_shading_language_100, heavily modified |
Multiple render targets | ARB_draw_buffers |
Non-power-of-two textures | ARB_texture_non_power_of_two |
Point sprites | ARB_point_sprite |
Separate stencil | ATI_separate_stencil, EXT_stencil_two_side |
Links:
OpenGL 1.5 (2003)
Addition | Promoted from |
---|---|
Buffer objects | ARB_vertex_buffer_object |
Occlusion query | ARB_occlusion_query |
Shadow functions | EXT_shadow_funcs |
Links:
OpenGL 1.4 (2002)
Addition | Promoted from |
---|---|
Automatic mipmap generation | SGIS_generate_mipmap |
Blend squaring | NV_blend_square |
Depth textures and shadows | ARB_depth_texture, ARB_shadow |
Fog coordinate | EXT_fog_coord |
Multiple draw arrays | EXT_multi_draw_arrays |
Point parameters | ARB_point_parameters |
Secondary color | EXT_secondary_color |
Separate blend functions | EXT_blend_func_separate |
Stencil wrap | EXT_stencil_wrap |
Texture crossbar env mode | ARB_texture_env_crossbar |
Texture LOD bias | EXT_texture_lod_bias |
Texture mirrored repeat | ARB_texture_mirrored_repeat |
Window raster position | ARB_window_pos |
Links:
OpenGL 1.3 (2001)
Addition | Promoted from |
---|---|
Compressed textures | ARB_texture_compression |
Cube map textures | ARB_texture_cube_map |
Multisample | ARB_multisample |
Multitexture | ARB_multitexture |
Texture add env mode | ARB_texture_env_add |
Texture combine env mode | ARB_texture_env_combine |
Texture dot3 env mode | ARB_texture_env_dot3 |
Texture border clamp | ARB_texture_border_clamp |
Transpose matrix | ARB_transpose_matrix |
Links:
OpenGL 1.2.1 (1998)
This version defines ARB extensions concept. ARB extensions are not required to be supported by a conformant OpenGL implementation, but are expected to be widely available; they define functionality that is likely to move into the required feature set in a future revision of the specification.
GL implementations of such later revisions should continue to export the name strings of promoted extensions in the EXTENSIONS string, and continue to support the ARB-affixed versions of functions and enumerants as a transition aid.
OpenGL 1.2 (1998)
Addition | Promoted from |
---|---|
3D textures | EXT_texture3D |
BGRA pixel formats | EXT_bgra |
Packed pixel formats | EXT_packed_pixels |
Normal rescaling | EXT_rescale_normal |
Separate specular color | EXT_separate_specular_color |
Texture coordinate edge clamping | SGIS_texture_edge_clamp |
Texture LOD control | SGIS_texture_lod |
Vertex array draw element range | EXT_draw_range_elements |
Imaging subset (optional)
Addition | Promoted from |
---|---|
Color Tables | SGI_color_table, EXT_color_subtable |
Convolution | EXT_convolution, HP_convolution_border_modes, SUN_convolution_border_modes |
Color matrix | SGI_color_matrix |
Pixel data statistics | EXT_histogram |
Constant blend color | EXT_blend_color |
New blending equations | EXT_blend_minmax, EXT_blend_subtract |
Links:
OpenGL 1.1 (1997)
Addition | Promoted from |
---|---|
Vertex arrays | EXT_vertex_array |
Polygon offset | EXT_polygon_offset |
Logical operation | EXT_blend_logic_op |
Internal texture formats | EXT_texture |
GL_REPLACE texture env | EXT_texture |
Texture proxy | EXT_texture |
Copy texture and subtexture | EXT_copy_texture, EXT_subtexture |
Texture objects | EXT_texture_object |
Links:
OpenGL 1.0 (1992)
First release.
Links: