Difference between revisions of "History of OpenGL"

From OpenGL.org
Jump to: navigation, search
m (OpenGL 4.0 (2010))
m (Bot: Updating section links to use redirects.)
 
(36 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.
  
 
== 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.)
  
Almost all additions are promoted from some extensions.
+
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.0 (1992) ===
+
=== OpenGL 4.5 (2014) ===
First release.
+
{| 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 1.1 (1992) ===
+
=== OpenGL 4.3 (2012) ===
{|
+
{| class="wikitable"
 
  !Addition
 
  !Addition
  !Promoted from
+
  ![[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]
 
  |-
 
  |-
  |Vertex arrays
+
  |[[Buffer Clearing|Clear Buffer Objects]] to specific values, ala {{code|memset}}
  |EXT_vertex_array
+
  |[http://www.opengl.org/registry/specs/ARB/clear_buffer_object.txt ARB_clear_buffer_object]
 
  |-
 
  |-
  |Polygon offset
+
  |Arbitrary [[Compute Shader]]s
  |EXT_polygon_offset
+
  |[http://www.opengl.org/registry/specs/ARB/compute_shader.txt ARB_compute_shader]
 
  |-
 
  |-
  |Logical operation
+
  |[[Copy Texture|Arbitrary image copying]]
  |EXT_blend_logic_op
+
  |[http://www.opengl.org/registry/specs/ARB/copy_image.txt ARB_copy_image]
 
  |-
 
  |-
  |Internal texture formats
+
  |Compatibility with OpenGL ES 3.0
  |EXT_texture
+
  |[http://www.opengl.org/registry/specs/ARB/ES3_compatibility.txt ARB_ES3_compatibility]
 
  |-
 
  |-
  |GL_REPLACE texture env
+
  |Specifying [[Layout Uniform Location|uniform locations in a shader]]
  |EXT_texture
+
  |[http://www.opengl.org/registry/specs/ARB/explicit_uniform_location.txt ARB_explicit_uniform_location]
 
  |-
 
  |-
  |Texture proxy
+
  |[[Fragment_Shader#User_overridden_inputs|Layer and viewport indices]] available from the fragment shader
  |EXT_texture
+
  |[http://www.opengl.org/registry/specs/ARB/fragment_layer_viewport.txt ARB_fragment_layer_viewport]
 
  |-
 
  |-
  |Copy texture and subtexture
+
  |Rendering to a [[Framebuffer Object]] that [[Empty Framebuffer|has no attachments]]
  |EXT_copy_texture, EXT_subtexture
+
  |[http://www.opengl.org/registry/specs/ARB/framebuffer_no_attachments.txt ARB_framebuffer_no_attachments]
 
  |-
 
  |-
  |Texture objects
+
  |[[Query Image Format|Generalized queries for information]] about [[Image Format]]s
|EXT_texture_object
+
  |[http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt ARB_internalformat_query2]
  |}
 
 
 
=== OpenGL 1.2 (1998) ===
 
{|
 
!Addition
 
!Promoted from
 
 
  |-
 
  |-
  |3D textures
+
  |[[Texture Invalidation|Texture]], [[Buffer Invalidation|buffer object]], and [[Framebuffer Invalidation|framebuffer]] invalidation.
  |EXT_texture3D
+
  |[http://www.opengl.org/registry/specs/ARB/invalidate_subdata.txt ARB_invalidate_subdata]
 
  |-
 
  |-
  |BGRA pixel formats
+
  |Issuing [[Indirect Drawing|multiple indirect rendering commands]] from a single drawing command.
  |EXT_bgra
+
  |[http://www.opengl.org/registry/specs/ARB/multi_draw_indirect.txt ARB_multi_draw_indirect]
 
  |-
 
  |-
  |Packed pixel formats
+
  |Improved API for [[Program Interface Query|getting info about program object interfaces]]
  |EXT_packed_pixels
+
  |[http://www.opengl.org/registry/specs/ARB/program_interface_query.txt ARB_program_interface_query]
 
  |-
 
  |-
  |Normal rescaling
+
  |[[Image_Load_Store#Image_size|Get size]] of [[Image Load Store|images]] from GLSL
  |EXT_rescale_normal
+
  |[http://www.opengl.org/registry/specs/ARB/shader_image_size.txt ARB_shader_image_size]
 
  |-
 
  |-
  |Separate specular color
+
  |[[Shader Storage Buffer Object|Buffer object read-write access from shader]], via a uniform-block style mechanism
  |EXT_separate_specular_color
+
  |[http://www.opengl.org/registry/specs/ARB/shader_storage_buffer_object.txt ARB_shader_storage_buffer_object]
 
  |-
 
  |-
  |Texture coordinate edge clamping
+
  |[[Stencil Texturing|Accessing the stencil values from a depth/stencil texture]]
  |SGIS_texture_edge_clamp
+
  |[http://www.opengl.org/registry/specs/ARB/stencil_texturing.txt ARB_stencil_texturing]
 
  |-
 
  |-
  |Texture LOD control
+
  |[[Buffer Texture]]s can now be [[Buffer_Texture#Buffer_texture_range|bound to a range of a buffer object]] rather than the whole thing
  |SGIS_texture_lod
+
  |[http://www.opengl.org/registry/specs/ARB/texture_buffer_range.txt ARB_texture_buffer_range]
 
  |-
 
  |-
  |Vertex array draw element range
+
  |GLSL can detect the available mipmap pyramid of a [[Sampler_(GLSL)#Texture_mipmap_retrieval|sampler]] or [[Image_Load_Store#Image_mipmap|image]]
|EXT_draw_range_elements
+
  |[http://www.opengl.org/registry/specs/ARB/texture_query_levels.txt ARB_texture_query_levels]
|}
 
==== Imaging subset (optional) ====
 
{|
 
  !Addition
 
!Promoted from
 
 
  |-
 
  |-
  |Color Tables
+
  |Immutable storage for [[Immutable Storage Texture|multisample textures]]
  |EXT_color_table, EXT_color_subtable
+
  |[http://www.opengl.org/registry/specs/ARB/texture_storage_multisample.txt ARB_texture_storage_multisample]
 
  |-
 
  |-
  |Convolution
+
  |[[View Texture|The ability to create a new texture]], with a new internal format, that references an existing texture's storage
  |EXT_convolution, EXT_convolution_border_modes
+
  |[http://www.opengl.org/registry/specs/ARB/texture_view.txt ARB_texture_view]
 
  |-
 
  |-
  |Color matrix
+
  |[[Separate Attribute Format|Separation of vertex format from buffer object]]
  |EXT_color_matrix
+
  |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_binding.txt ARB_vertex_attrib_binding]
 
  |-
 
  |-
  |Pixel data statistics
+
  !Addition
  |EXT_histogram
+
  !Promoted from
 
  |-
 
  |-
  |Constant blend color
+
  |More robustness of API
  |EXT_blend_color
+
  |[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]
 
  |-
 
  |-
  |New blending equations
+
  | EAC and ETC compressed image formats.
  |EXT_blend_minmax, EXT_blend_substract
+
  |
 
  |}
 
  |}
  
=== OpenGL 1.2.1 (1998) ===
+
Links:
This version defines ARB extensions concept. ARB extensions are not required to be supported by a conformant OpenGL
+
*[http://www.opengl.org/registry/doc/glspec43.core.20130214.pdf OpenGL 4.3 Core Profile Specification]
implementation, but are expected to be widely available; they define
+
*[http://www.opengl.org/registry/doc/glspec43.compatibility.20130214.pdf OpenGL 4.3 Compatibility Profile Specification]
functionality that is likely to move into the required feature set in a future
+
*[http://www.opengl.org/registry/doc/GLSLangSpec.4.30.8.pdf OpenGL Shading Language 4.30 Specification]
revision of the specification.
 
  
GL implementations of such later revisions should continue to export the name
+
=== OpenGL 4.2 (2011) ===
strings of promoted extensions in the EXTENSIONS string, and continue to support
+
{| class="wikitable"
the ARB-affixed versions of functions and enumerants as a transition aid.
 
 
 
=== OpenGL 1.3 (2001) ===
 
{|
 
 
  !Addition
 
  !Addition
  !Promoted from
+
  ![[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]
 
  |-
 
  |-
  |Compressed textures
+
  |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
  |ARB_texture_compression
+
  |[http://www.opengl.org/registry/specs/ARB/shading_language_420pack.txt ARB_shading_language_420pack]
 
  |-
 
  |-
  |Cube map textures
+
  |Allows instanced rendering with a [[Instancing|starting instance value]].
  |ARB_texture_cube_map
+
  |[http://www.opengl.org/registry/specs/ARB/base_instance.txt ARB_base_instance]
 
  |-
 
  |-
  |Multisample
+
  |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]]
  |ARB_multisample
+
  |[http://www.opengl.org/registry/specs/ARB/internalformat_query.txt ARB_internalformat_query]
 
  |-
 
  |-
  |Multitexture
+
  |Allows for sub-rectangle selection when transferring compressed texture data.
  |ARB_multitexture
+
  |[http://www.opengl.org/registry/specs/ARB/compressed_texture_pixel_storage.txt ARB_compressed_texture_pixel_storage]
 
  |-
 
  |-
  |Texture add env mode
+
  |Allows unpacking 16-bit floats from a 32-bit unsigned integer value in shaders.
  |ARB_texture_env_add
+
  |[http://www.opengl.org/registry/specs/ARB/shading_language_packing.txt ARB_shading_language_packing]
 
  |-
 
  |-
  |Texture combine env mode
+
  |Allows querying of the [[Buffer Object#Alignment|alignment for pointers]] returned from [[Map Buffer Range|buffer object mapping operations]]
  |ARB_texture_env_combine
+
  |[http://www.opengl.org/registry/specs/ARB/map_buffer_alignment.txt ARB_map_buffer_alignment]
 
  |-
 
  |-
  |Texture dot3 env mode
+
  |Allows explicitly defining how a [[Fragment Shader Output|fragment shader will modify the depth value]], so that the system can optimize these cases better
  |ARB_texture_env_dot3
+
  |[http://www.opengl.org/registry/specs/ARB/conservative_depth.txt ARB_conservative_depth]
 
  |-
 
  |-
  |Texture border clamp
+
  !Addition
  |ARB_texture_border_clamp
+
  !Promoted from
 
  |-
 
  |-
  |Transpose matrix
+
  |Allows the use of [[BPTC Texture Compression|BPTC compressed image formats]].
  |ARB_transpose_matrix
+
  |[http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt ARB_texture_compression_BPTC]
 
  |}
 
  |}
  
=== OpenGL 1.4 (2002) ===
+
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
  !Promoted from
+
  ![[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]
 
  |-
 
  |-
  |Automatic mipmap generation
+
  |Pulling missing functionality from [[OpenGL ES]] 2.0 into OpenGL
  |SGIS_generate_mipmap
+
  |[http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt ARB_ES2_compatibility]
 
  |-
 
  |-
  |Blend squaring
+
  |Documents precision requirements for several FP operations
  |NV_blend_equare
+
  |[http://www.opengl.org/registry/specs/ARB/shader_precision.txt ARB_shader_precision]
 
  |-
 
  |-
  |Depth textures and shadows
+
  |Provides [[Vertex Format|64-bit floating-point component vertex attributes]]
  |ARB_depth_texture, ARB_shadow
+
  |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt ARB_vertex_attrib_64_bit]
 
  |-
 
  |-
  |Fog coordinate
+
  |Multiple [[Viewport]]s for the same rendering surface, or one per surface
  |EXT_fog_coord
+
  |[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]]
 
  |-
 
  |-
  |Multiple draw arrays
+
  |Shading language 4.00
  |EXT_multi_draw_arrays
+
  |{{extref|texture_query_lod}}, {{extref|gpu_shader5}}, {{extref|gpu_shader_fp64}}, {{extref|shader_subroutine}}, {{extref|texture_gather}}
 
  |-
 
  |-
  |Point parameters
+
  |[[Indirect Drawing]], without multidraw
  |ARB_point_parameters
+
  |{{extref|draw_indirect}}
 
  |-
 
  |-
  |Secondary color
+
  |Request minimum number of fragment inputs
  |EXT_secondary_color
+
  |{{extref|sample_shading}}
 
  |-
 
  |-
  |Separate blend functions
+
  |[[Tessellation]], with shader stages
  |EXT_blend_func_separate
+
  |{{extref|tessellation_shader}}
 
  |-
 
  |-
  |Stencil wrap
+
  |[[Buffer Texture]] formats RGB32F, RGB32I, RGB32UI
  |EXT_stencil_wrap
+
  |{{extref|texture_buffer_object_rgb32}}
 
  |-
 
  |-
  |Texture crossbar env mode
+
  |[[Cubemap Array Texture]]
  |ARB_texture_env_crossbar
+
  |{{extref|texture_cube_map_array}}
 
  |-
 
  |-
  |Texture LOD bias
+
  |[[Transform Feedback]] objects and multiple feedback stream output.
  |EXT_texture_lod_bias
+
  |{{extref|transform_feedback2}}, {{extref|transform_feedback3}}
 
  |-
 
  |-
  |Texture mirrored repeat
+
  !Addition
  |ARB_texture_mirrored_repeat
+
  !Promoted from
 
  |-
 
  |-
  |Window raster position
+
  |[[Draw Buffer Blend|Individual blend equations for each color output]]
  |ARB_window_pos
+
  |{{extref|draw_buffers_blend}}
 
  |}
 
  |}
  
=== OpenGL 1.5 (2003) ===
+
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
  !Promoted from
+
  ![[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}}
 
  |-
 
  |-
  |Buffer objects
+
  |[[Timer Query|Timer queries]]
  |ARB_vertex_buffer_object
+
  |{{extref|timer_query}}
 
  |-
 
  |-
  |Occlusion query
+
  |[[Instanced Array|Instanced arrays]]
  |ARB_occlusion_query
+
  |{{extref|instanced_arrays}}
 
  |-
 
  |-
  |Shadow functions
+
  |[[Vertex Format Type|Vertex attributes 2.10.10.10]]
  |EXT_shadow_funcs
+
  |{{extref|vertex_type_2_10_10_10_rev}}
 
  |}
 
  |}
  
=== OpenGL 2.0 (2004) ===
+
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
  !Promoted from
+
  ![[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}}
 
  |-
 
  |-
  |Shader objects
+
  |[[Provoking Vertex|Provoking vertex control]]
  |ARB_shader_objects, ''heavily modified''
+
  |{{extref|provoking_vertex}}
 
  |-
 
  |-
  |Shader programs
+
  |[[Seamless Cubemap|Seamless cube map filtering]]
  |ARB_vertex_shader, ARB_fragment_shader, ''heavily modified''
+
  |{{extref|seamless_cube_map}}
 
  |-
 
  |-
  |Shading language 1.10
+
  |Multisampled textures and texture samplers for specific sample locations
  |ARB_shading_language_100, ''heavily modified''
+
  |{{extref|texture_multisample}}
 
  |-
 
  |-
  |Multiple render targets
+
  |Fragment [[Depth Clamp]]ing
  |ARB_draw_buffers
+
  |{{extref|depth_clamp}}
 
  |-
 
  |-
  |Non-power-of-two textures
+
  |[[Sync Object|Fence sync objects]]
  |ARB_texture_non_power_of_two
+
  |{{extref|sync}}
 
  |-
 
  |-
  |Point sprites
+
  !Addition
  |ARB_point_sprite
+
  !Promoted from
 
  |-
 
  |-
  |Separate stencil
+
  |[[Geometry Shader]]s, as well as input/output [[Interface Block]]s
  |ATI_separate_stencil, EXT_stencil_two_side
+
  |{{extref|geometry_shader4}}, heavily modified.
 
  |}
 
  |}
  
=== OpenGL 2.1 (2006) ===
+
Links:
Core features:
+
* [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
 
  |-
 
  |-
  |Pixel buffer objects
+
  |[[Instancing|Instanced rendering with a per instance counter accessible to vertex shaders]]
  |ARB_pixel_buffer_object
+
|{{extref|draw_instanced}}
 +
|-
 +
|Data copying between buffer objects
 +
  |{{extref|copy_buffer|EXT}}
 +
|-
 +
|[[Primitive Restart|Primitive restart]]
 +
|{{extref|primitive_restart|NV}}
 +
|-
 +
|[[Buffer Texture]]s
 +
|{{extref|texture_buffer_object}}
 
  |-
 
  |-
  |sRGB textures
+
  |[[Rectangle Texture]]s
  |EXT_texture_sRGB
+
  |{{extref|texture_rectangle}}
 
  |}
 
  |}
Shading language 1.20:
 
* Non-square matrices in GLSL.
 
  
 
Links:
 
Links:
* [http://www.opengl.org/registry/doc/glspec21.20061201.pdf OpenGL 2.1 Specification]
+
* [http://www.opengl.org/registry/doc/glspec31.20090528.pdf OpenGL 3.1 Specification]
* [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.20.8.pdf OpenGL Shading Language 1.20.8 Specification]
+
* [http://www.opengl.org/registry/doc/glspec31undep.20090528.pdf OpenGL 3.1 Specification with GL_ARB_compatibility extension]
* [http://www.opengl.org/sdk/docs/man OpenGL 2.1 Reference Pages]
+
* [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 433:
 
* 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 rendering
+
  |[[Conditional Rendering]]
  |NV_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
  |ARB_color_buffer_float, NV_depth_buffer_float, ARB_texture_float, EXT_packed_float, EXT_texture_shared_exponent
+
  |{{extref|color_buffer_float}}, {{extref|depth_buffer_float|NV}}, {{extref|texture_float}}, {{extref|packed_float|EXT}}, {{extref|texture_shared_exponent|EXT}}
|-
 
|Framebuffer objects
 
|EXT_framebuffer_object
 
 
  |-
 
  |-
 
  |Half-float (16-bit) vertex array and pixel data formats
 
  |Half-float (16-bit) vertex array and pixel data formats
  |NV_half_float, ARB_half_float_pixel
+
  |{{extref|half_float|NV}}, {{extref|half_float_pixel|EXT}}
|-
 
|Multisample stretch blit functionality
 
|EXT_framebuffer_multisample, EXT_framebuffer_blit
 
|-
 
|Non-normalized integer color internal formats for textures and renderbuffers
 
|EXT_texture_integer
 
|-
 
|1D and 2D layered texture targets
 
|EXT_texture_array
 
 
  |-
 
  |-
  |Packed depth/stencil internal formats for combined depth+stencil textures and renderbuffers
+
  |Integral [[Image Format]]s, which can be fetched as integers rather than being converted to normalized floats.
  |EXT_packed_depth_stencil
+
  |{{extref|texture_integer|EXT}}
 
  |-
 
  |-
  |Per-color-attachment blend enables and color writemasks
+
  |[[Array Texture]]s
  |EXT_draw_buffers2
+
  |{{extref|texture_array|EXT}}
 
  |-
 
  |-
  |RGTC specific internal compressed formats
+
  |[[Blending#Blend_enabling|Per-color-attachment blend enables]] and [[Color Mask|color writemasks]]
  |EXT_texture_compression_rgtc
+
  |{{extref|draw_buffers2|EXT}}
 
  |-
 
  |-
  |Transform feedback
+
  |[[Red Green Texture Compression]]
  |EXT_transform_feedback
+
  |{{extref|texture_compression_rgtc|EXT}}
 
  |-
 
  |-
  |Vertex array objects
+
  |[[Transform Feedback]]
  |APPLE_vertex_array_object
+
  |{{extref|transform_feedback}}
 
  |-
 
  |-
 
  |sRGB framebuffer mode
 
  |sRGB framebuffer mode
  |EXT_framebuffer_sRGB
+
  |{{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 482:
 
* 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 511:
 
* Attribute stacks
 
* Attribute stacks
 
* Unified extension string
 
* Unified extension string
 +
{{div col end}}
  
 
Links:
 
Links:
Line 344: Line 518:
 
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=243193#Post243193 Official feedback on OpenGL 3.0 thread]
 
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=243193#Post243193 Official feedback on OpenGL 3.0 thread]
  
 +
=== 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:
 +
* [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 3.1 (2009) ===
+
=== OpenGL 2.0 (2004) ===
* All features deprecated in OpenGL 3.0 are removed except wide lines
 
* Shading language 1.40
 
* SNORM texture component formats
 
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |Instanced rendering with a per instance counter accessible to vertex shaders
+
  |Shader objects
  |ARB_draw_instanced
+
  |ARB_shader_objects, ''heavily modified''
 +
|-
 +
|Shader programs
 +
|ARB_vertex_shader, ARB_fragment_shader, ''heavily modified''
 
  |-
 
  |-
  |Data copying between buffer objects
+
  |Shading language 1.10
  |EXT_copy_buffer
+
  |ARB_shading_language_100, ''heavily modified''
 
  |-
 
  |-
  |Primitive restart
+
  |Multiple render targets
  |NV_primitive_restart
+
  |ARB_draw_buffers
 
  |-
 
  |-
  |Texture buffer objects
+
  |Non-power-of-two textures
  |ARB_texture_buffer_object
+
  |ARB_texture_non_power_of_two
 
  |-
 
  |-
  |Rectangular textures
+
  |Point sprites
  |ARB_texture_rectangle
+
  |ARB_point_sprite
 
  |-
 
  |-
  |Uniform buffer objects
+
  |Separate stencil
  |ARB_uniform_buffer_object
+
  |ATI_separate_stencil, EXT_stencil_two_side
 
  |}
 
  |}
  
Links:
 
* [http://www.opengl.org/registry/doc/glspec31.20090528.pdf OpenGL 3.1 Specification]
 
* [http://www.opengl.org/registry/doc/glspec31undep.20090528.pdf OpenGL 3.1 Specification with GL_ARB_compatibility extension]
 
* [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]
 
* [http://www.g-truc.net/post-0152.html OpenGL 3.1 review]
 
  
 +
=== OpenGL 1.5 (2003) ===
 +
{|
 +
!Addition
 +
!Promoted from
 +
|-
 +
|Buffer objects
 +
|ARB_vertex_buffer_object
 +
|-
 +
|Occlusion query
 +
|ARB_occlusion_query
 +
|-
 +
|Shadow functions
 +
|EXT_shadow_funcs
 +
|}
  
=== OpenGL 3.2 (2009) ===
+
=== OpenGL 1.4 (2002) ===
* Core and compatibility profiles
 
* Shading language 1.50
 
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |BGRA vertex component ordering
+
  |Automatic mipmap generation
  |ARB_vertext_array_bgra
+
  |SGIS_generate_mipmap
 +
|-
 +
|Blend squaring
 +
|NV_blend_equare
 +
|-
 +
|Depth textures and shadows
 +
|ARB_depth_texture, ARB_shadow
 +
|-
 +
|Fog coordinate
 +
|EXT_fog_coord
 +
|-
 +
|Multiple draw arrays
 +
|EXT_multi_draw_arrays
 
  |-
 
  |-
  |Drawing command allowing modification of the base vertex index
+
  |Point parameters
  |ARB_draw_elements_base_vertex
+
  |ARB_point_parameters
 
  |-
 
  |-
  |Shader fragment coordinate convention control
+
  |Secondary color
  |ARB_fragment_coord_conventions
+
  |EXT_secondary_color
 
  |-
 
  |-
  |Provoking vertex control
+
  |Separate blend functions
  |ARB_provoking_vertex
+
  |EXT_blend_func_separate
 
  |-
 
  |-
  |Seamless cube map filtering
+
  |Stencil wrap
  |ARB_seamless_cube_map
+
  |EXT_stencil_wrap
 
  |-
 
  |-
  |Multisampled textures and texture samplers for specific sample locations
+
  |Texture crossbar env mode
  |ARB_texture_multisample
+
  |ARB_texture_env_crossbar
 
  |-
 
  |-
  |Fragment depth clamping
+
  |Texture LOD bias
  |ARB_depth_clamp
+
  |EXT_texture_lod_bias
 
  |-
 
  |-
  |Geometry shaders
+
  |Texture mirrored repeat
  |ARB_geometry_shader4
+
  |ARB_texture_mirrored_repeat
 
  |-
 
  |-
  |Fence sync objects
+
  |Window raster position
  |ARB_sync
+
  |ARB_window_pos
 
  |}
 
  |}
  
Links:
+
=== OpenGL 1.3 (2001) ===
* [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]
 
* [http://www.g-truc.net/post-0170.html OpenGL 3.2 review]
 
 
 
 
 
=== OpenGL 3.3 (2010) ===
 
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |Shading language 3.30
+
  |Compressed textures
  |ARB_shader_bit_encoding
+
  |ARB_texture_compression
 
  |-
 
  |-
  |New blending functions
+
  |Cube map textures
  |ARB_blend_func_extended
+
  |ARB_texture_cube_map
 
  |-
 
  |-
  |Attribute locations
+
  |Multisample
  |ARB_explicit_attrib_location
+
  |ARB_multisample
 
  |-
 
  |-
  |Simple boolean occlusion queries
+
  |Multitexture
  |ARB_occlusion_query2
+
  |ARB_multitexture
 
  |-
 
  |-
  |Sampler objects
+
  |Texture add env mode
  |ARB_sampler_objects
+
  |ARB_texture_env_add
 
  |-
 
  |-
  |A new texture format for unsigned 10.10.10.2
+
  |Texture combine env mode
  |ARB_texture_rgb10_a2ui
+
  |ARB_texture_env_combine
 
  |-
 
  |-
  |Texture swizzle
+
  |Texture dot3 env mode
  |ARB_texture_swizzle
+
  |ARB_texture_env_dot3
 
  |-
 
  |-
  |Timer query
+
  |Texture border clamp
  |ARB_timer_query
+
  |ARB_texture_border_clamp
 
  |-
 
  |-
  |Instanced arrays
+
  |Transpose matrix
  |ARB_instanced_arrays
+
  |ARB_transpose_matrix
|-
 
|Vertex attributes 2.10.10.10
 
|ARB_vertex_type_2_10_10_10_rev
 
 
  |}
 
  |}
  
Links:
+
=== OpenGL 1.2.1 (1998) ===
* [http://www.opengl.org/registry/doc/glspec33.core.20100311.pdf OpenGL 3.3 Core Profile Specification]
+
This version defines ARB extensions concept. ARB extensions are not required to be supported by a conformant OpenGL
* [http://www.opengl.org/registry/doc/glspec33.compatibility.20100311.pdf OpenGL 3.3 Compatibility Profile Specification]
+
implementation, but are expected to be widely available; they define
* [http://www.opengl.org/registry/doc/GLSLangSpec.3.30.6.clean.pdf OpenGL Shading Language 3.30.9 Specification]
+
functionality that is likely to move into the required feature set in a future
* [http://www.opengl.org/sdk/docs/man3 OpenGL 3.3 Reference Pages]
+
revision of the specification.
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=273669#Post273669 Official feedback on OpenGL 3.3 thread]
 
* [http://www.g-truc.net/post-0267.html OpenGL 3.3 review]
 
  
 +
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 4.0 (2010) ===
+
=== OpenGL 1.2 (1998) ===
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |Shading language 4.00
+
  |3D textures
  |ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather
+
  |EXT_texture3D
 
  |-
 
  |-
  |Individual blend equations for each color output
+
  |BGRA pixel formats
  |ARB_draw_buffers_blend
+
  |EXT_bgra
 
  |-
 
  |-
  |Draw instanced arrays indirect
+
  |Packed pixel formats
  |ARB_draw_indirect
+
  |EXT_packed_pixels
 
  |-
 
  |-
  |Request minimum number of fragment inputs
+
  |Normal rescaling
  |ARB_sample_shading
+
  |EXT_rescale_normal
 
  |-
 
  |-
  |Tessellation control and evaluation shaders
+
  |Separate specular color
  |ARB_tessellation_shader
+
  |EXT_separate_specular_color
 
  |-
 
  |-
  |[[Buffer Texture]] formats RGB32F, RGB32I, RGB32UI
+
  |Texture coordinate edge clamping
  |ARB_texture_buffer_object_rgb32
+
  |SGIS_texture_edge_clamp
 
  |-
 
  |-
  |Cube map array textures
+
  |Texture LOD control
  |ARB_texture_cube_map_array
+
  |SGIS_texture_lod
 
  |-
 
  |-
  |Additional transform feedback functionality
+
  |Vertex array draw element range
  |ARB_transform_feedback2, ARB_transform_feedback3
+
  |EXT_draw_range_elements
 
  |}
 
  |}
 
+
==== Imaging subset (optional) ====
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]
 
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=273669#Post273669 Official feedback on OpenGL 4.0 thread]
 
* [http://www.g-truc.net/post-0269.html OpenGL 4.0 review]
 
 
 
=== OpenGL 4.1 (2010) ===
 
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |Query and load a binary blob for program objects
+
  |Color Tables
  |[http://www.opengl.org/registry/specs/ARB/get_program_binary.txt ARB_get_program_binary]
+
  |EXT_color_table, EXT_color_subtable
 
  |-
 
  |-
  |Ability to [[GLSL_Object#Program separation|bind programs individually to programmable stages]]
+
  |Convolution
  |[http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt ARB_separate_shader_objects]
+
  |EXT_convolution, EXT_convolution_border_modes
 
  |-
 
  |-
  |Pulling missing functionality from OpenGL ES 2.0 into OpenGL
+
  |Color matrix
  |[http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt ARB_ES2_compatibility]
+
  |EXT_color_matrix
 
  |-
 
  |-
  |Documents precision requirements for several FP operations
+
  |Pixel data statistics
  |[http://www.opengl.org/registry/specs/ARB/shader_precision.txt ARB_shader_precision]
+
  |EXT_histogram
 
  |-
 
  |-
  |Provides 64-bit floating-point component vertex shader inputs
+
  |Constant blend color
  |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt ARB_vertex_attrib_64_bit]
+
  |EXT_blend_color
 
  |-
 
  |-
  |Multiple viewports for the same rendering surface, or one per surface
+
  |New blending equations
  |[http://www.opengl.org/registry/specs/ARB/viewport_array.txt ARB_viewport_array]
+
  |EXT_blend_minmax, EXT_blend_substract
 
  |}
 
  |}
  
Links:
+
=== OpenGL 1.1 (1997) ===
* [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]
 
* [http://www.opengl.org/sdk/docs/man3 OpenGL 4.1 Reference Pages]
 
* [http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=280739#Post280739 Official feedback on OpenGL 4.1 thread]
 
* [http://www.g-truc.net/post-0320.html OpenGL 4.1 review]
 
* [http://rastergrid.com/blog/2010/08/an-introduction-to-opengl-4-1 An Introduction to OpenGL 4.1]
 
 
 
=== OpenGL 4.2 (2011) ===
 
 
{|
 
{|
 
  !Addition
 
  !Addition
 
  !Promoted from
 
  !Promoted from
 
  |-
 
  |-
  |Allows atomically incrementing/decrementing and fetching of buffer object memory locations from shaders.
+
  |Vertex arrays
  |[http://www.opengl.org/registry/specs/ARB/shader_atomic_counters.txt ARB_shader_atomic_counters]
+
  |EXT_vertex_array
 
  |-
 
  |-
  |Allows shaders to read and write images, without filtering and mostly arbitrarily.
+
  |Polygon offset
  |[http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt ARB_shader_image_load_store]
+
  |EXT_polygon_offset
 
  |-
 
  |-
  |Allows texture objects to have [[Texture#Texture Storage|the storage for all of their mipmap levels allocated at once]]. When using this API, the texture object's storage can never be changed again, but the ''contents'' of that storage can.
+
  |Logical operation
  |[http://www.opengl.org/registry/specs/ARB/texture_storage.txt ARB_texture_storage]
+
  |EXT_blend_logic_op
 
  |-
 
  |-
  |Allows instanced rendering of data written by transform feedback operations.
+
  |Internal texture formats
  |[http://www.opengl.org/registry/specs/ARB/transform_feedback_instanced.txt ARB_transform_feedback_instanced]
+
  |EXT_texture
 
  |-
 
  |-
  |Allows the setting of [[Uniform_Buffer_Object#Version_4.20_binding|Uniform Buffer Object]] and [[GLSL_Samplers#Verison_4.20_binding|sampler]] binding points directly from GLSL, among many, ''many'' other things.
+
  |GL_REPLACE texture env
  |[http://www.opengl.org/registry/specs/ARB/shading_language_420pack.txt ARB_shading_language_420pack]
+
  |EXT_texture
 
  |-
 
  |-
  |Allows the use of certain advanced compression techniques.
+
  |Texture proxy
  |[http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt ARB_texture_compression_BPTC]
+
  |EXT_texture
 
  |-
 
  |-
  |Allows instanced rendering with a starting instance value.
+
  |Copy texture and subtexture
|[http://www.opengl.org/registry/specs/ARB/base_instance.txt ARB_base_instance]
+
  |EXT_copy_texture, EXT_subtexture
|-
 
|Allows the user to 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.
 
|[http://www.opengl.org/registry/specs/ARB/shading_language_packing.txt ARB_shading_language_packing]
 
|-
 
|Allows querying of the alignment for pointers returned from [[Buffer_Object#Mapping|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 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]
 
 
  |-
 
  |-
 +
|Texture objects
 +
|EXT_texture_object
 
  |}
 
  |}
  
Links:
+
=== OpenGL 1.0 (1992) ===
* [http://www.opengl.org/registry/doc/glspec42.core.20110808.pdf OpenGL 4.2 Core Profile Specification]
+
First release.
* [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]
 
* [http://www.opengl.org/sdk/docs/man4/ OpenGL 4.2 Reference Pages]
 

Latest revision as of 11:39, 6 May 2015

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.

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.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.4 (2013)

Addition Core Extension
Immutable storage for buffer objects, including the ability to use buffers while they are mapped. ARB_buffer_storage
Direct clearing of a texture image. ARB_clear_texture
A number of enhancements to layout qualifiers: ARB_enhanced_layouts
Bind an array of objects of the same type to a sequential range of indexed binding targets in one call. ARB_multi_bind
Values from Query Objects values can be written to a buffer object instead of directly to client memory. ARB_query_buffer_object
A special clamping mode that doubles the size of the texture in each dimension,
mirroring it exactly once in the negative texture coordinate directions.
ARB_texture_mirror_clamp_to_edge
One of the stencil-only image formats can be used for textures, and 8-bit stencil is a required format. ARB_texture_stencil8
Provides a packed, 3-component 11F/11F/10F format for vertex attributes. ARB_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:

OpenGL 4.3 (2012)

Addition Core Extension
Debug messaging KHR_debug
GLSL multidimensional arrays ARB_arrays_of_arrays
Clear Buffer Objects to specific values, ala memset​ ARB_clear_buffer_object
Arbitrary Compute Shaders ARB_compute_shader
Arbitrary image copying ARB_copy_image
Compatibility with OpenGL ES 3.0 ARB_ES3_compatibility
Specifying uniform locations in a shader ARB_explicit_uniform_location
Layer and viewport indices available from the fragment shader ARB_fragment_layer_viewport
Rendering to a Framebuffer Object that has no attachments ARB_framebuffer_no_attachments
Generalized queries for information about Image Formats ARB_internalformat_query2
Texture, buffer object, and framebuffer invalidation. ARB_invalidate_subdata
Issuing multiple indirect rendering commands from a single drawing command. ARB_multi_draw_indirect
Improved API for getting info about program object interfaces ARB_program_interface_query
Get size of images from GLSL ARB_shader_image_size
Buffer object read-write access from shader, via a uniform-block style mechanism ARB_shader_storage_buffer_object
Accessing the stencil values from a depth/stencil texture ARB_stencil_texturing
Buffer Textures can now be bound to a range of a buffer object rather than the whole thing ARB_texture_buffer_range
GLSL can detect the available mipmap pyramid of a sampler or image ARB_texture_query_levels
Immutable storage for multisample textures ARB_texture_storage_multisample
The ability to create a new texture, with a new internal format, that references an existing texture's storage ARB_texture_view
Separation of vertex format from buffer object ARB_vertex_attrib_binding
Addition Promoted from
More robustness of API ARB_robust_buffer_access_behavior,

ARB_robustness_isolation,

WGL_ARB_robustness_isolation,

GLX_ARB_robustness_isolation

EAC and ETC compressed image formats.

Links:

OpenGL 4.2 (2011)

Addition Core Extension
Allows atomically incrementing/decrementing and fetching of buffer object memory locations from shaders ARB_shader_atomic_counters
Allows shaders to read and write images, with few but difficult restrictions ARB_shader_image_load_store
Allows texture objects to have immutable storage, and allocating all mipmap levels and images in one call. The storage becomes immutable, but the contents of the storage are not ARB_texture_storage
Allows instanced rendering of data written by transform feedback operations ARB_transform_feedback_instanced
Allows the setting of Uniform Buffer Object and sampler binding points directly from GLSL, among many other small changes ARB_shading_language_420pack
Allows instanced rendering with a starting instance value. ARB_base_instance
Allows the user to detect the maximum number of samples possible for a particular image format and texture type ARB_internalformat_query
Allows for sub-rectangle selection when transferring compressed texture data. ARB_compressed_texture_pixel_storage
Allows unpacking 16-bit floats from a 32-bit unsigned integer value in shaders. ARB_shading_language_packing
Allows querying of the alignment for pointers returned from buffer object mapping operations ARB_map_buffer_alignment
Allows explicitly defining how a fragment shader will modify the depth value, so that the system can optimize these cases better ARB_conservative_depth
Addition Promoted from
Allows the use of BPTC compressed image formats. ARB_texture_compression_BPTC

Links:

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.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 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.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.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 EXT_copy_buffer
Primitive restart NV_primitive_restart
Buffer Textures ARB_texture_buffer_object
Rectangle Textures ARB_texture_rectangle

Links:

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


OpenGL 1.5 (2003)

Addition Promoted from
Buffer objects ARB_vertex_buffer_object
Occlusion query ARB_occlusion_query
Shadow functions EXT_shadow_funcs

OpenGL 1.4 (2002)

Addition Promoted from
Automatic mipmap generation SGIS_generate_mipmap
Blend squaring NV_blend_equare
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

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

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 EXT_color_table, EXT_color_subtable
Convolution EXT_convolution, EXT_convolution_border_modes
Color matrix EXT_color_matrix
Pixel data statistics EXT_histogram
Constant blend color EXT_blend_color
New blending equations EXT_blend_minmax, EXT_blend_substract

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

OpenGL 1.0 (1992)

First release.