History of OpenGL: Difference between revisions
Added OpenGL 4.3 stuff. |
Reversing the order of these, so that the newest is on top. |
||
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. | ||
== Summary of version changes == | == Summary of version changes == | ||
Line 15: | Line 15: | ||
Almost all additions are promoted from some extensions. | Almost all additions are promoted from some extensions. | ||
=== OpenGL | === OpenGL 4.3 (2012) === | ||
{| class="wikitable" | |||
{| | |||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Debug messaging | ||
| | |[http://www.opengl.org/registry/specs/KHR/debug.txt KHR_debug], | ||
[http://www.opengl.org/registry/specs/ARB/debug_group.txt ARB_debug_group], | |||
[http://www.opengl.org/registry/specs/ARB/debug_label.txt ARB_debug_label], | |||
[http://www.opengl.org/registry/specs/ARB/debug_output2.txt ARB_debug_output2] | |||
|- | |||
|GLSL multidimensional arrays | |||
|[http://www.opengl.org/registry/specs/ARB/arrays_of_arrays.txt ARB_arrays_of_arrays] | |||
|- | |- | ||
| | |Clear [[Buffer Object]]s to specific values, ala {{code|memset}} | ||
| | |[http://www.opengl.org/registry/specs/ARB/clear_buffer_object.txt ARB_clear_buffer_object] | ||
|- | |- | ||
| | |Arbitrary compute shaders | ||
| | |[http://www.opengl.org/registry/specs/ARB/compute_shader.txt ARB_compute_shader] | ||
|- | |- | ||
| | |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 uniform locations in a shader | ||
| | |[http://www.opengl.org/registry/specs/ARB/explicit_uniform_location.txt ARB_explicit_uniform_location] | ||
|- | |- | ||
| | |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 has no attachments | ||
| | |[http://www.opengl.org/registry/specs/ARB/framebuffer_no_attachments.txt ARB_framebuffer_no_attachments] | ||
|- | |- | ||
| | |Querying support information about [[Image Format]]s | ||
| | |[http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt ARB_internalformat_query2] | ||
|- | |- | ||
| | |Texture, buffer object, and framebuffer invalidation. | ||
| | |[http://www.opengl.org/registry/specs/ARB/invalidate_subdata.txt ARB_invalidate_subdata] | ||
|- | |- | ||
| | |Issuing multiple indirect rendering commands from a single draw command. | ||
| | |[http://www.opengl.org/registry/specs/ARB/multi_draw_indirect.txt ARB_multi_draw_indirect] | ||
|- | |- | ||
| | |Improved API for getting info about program object values | ||
| | |[http://www.opengl.org/registry/specs/ARB/program_interface_query.txt ARB_program_interface_query] | ||
|- | |- | ||
| | |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] | |||
|- | |- | ||
| | |Get size of images from GLSL | ||
| | |[http://www.opengl.org/registry/specs/ARB/shader_image_size.txt ARB_shader_image_size] | ||
|- | |- | ||
| | |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] | ||
|- | |- | ||
| | |Accessing the stencil values from a depth/stencil texture | ||
|[http://www.opengl.org/registry/specs/ARB/stencil_texturing.txt ARB_stencil_texturing] | |||
| | |||
|- | |- | ||
| | |[[Buffer Texture]]s can now be 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 or image | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_query_levels.txt ARB_texture_query_levels] | ||
|- | |- | ||
| | |Texture storage for multisample textures | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_storage_multisample.txt ARB_texture_storage_multisample] | ||
|- | |- | ||
| | |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] | ||
|- | |- | ||
| | |Separation of vertex format from buffer object association | ||
| | |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_binding.txt ARB_vertex_attrib_binding] | ||
|- | |- | ||
|} | |} | ||
Links: | |||
*[http://www.opengl.org/registry/doc/glspec43.core.20120806.pdf OpenGL 4.3 Core Profile Specification] | |||
*[http://www.opengl.org/registry/doc/glspec43.compatibility.20120806.pdf OpenGL 4.3 Compatibility Profile Specification] | |||
*[http://www.opengl.org/registry/doc/GLSLangSpec.4.30.6.pdf OpenGL Shading Language 4.30 Specification] | |||
=== OpenGL | === OpenGL 4.2 (2011) === | ||
{| | {| class="wikitable" | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Allows atomically 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 read and write images, without filtering and mostly arbitrarily. | |||
|[http://www.opengl.org/registry/specs/ARB/shader_image_load_store.txt ARB_shader_image_load_store] | |||
|- | |||
|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. | |||
|[http://www.opengl.org/registry/specs/ARB/texture_storage.txt ARB_texture_storage] | |||
|- | |||
|Allows 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 [[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. | |||
|[http://www.opengl.org/registry/specs/ARB/shading_language_420pack.txt ARB_shading_language_420pack] | |||
|- | |- | ||
| | |Allows the use of certain advanced compression techniques. | ||
| | |[http://www.opengl.org/registry/specs/ARB/texture_compression_bptc.txt ARB_texture_compression_BPTC] | ||
|- | |- | ||
| | |Allows instanced rendering with a starting instance value. | ||
| | |[http://www.opengl.org/registry/specs/ARB/base_instance.txt ARB_base_instance] | ||
|- | |- | ||
| | |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] | ||
|- | |- | ||
|} | |} | ||
=== 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) === | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |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 64-bit floating-point component vertex shader inputs | ||
| | |[http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt ARB_vertex_attrib_64_bit] | ||
|- | |- | ||
|Multiple | |Multiple viewports 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) === | |||
{| | |||
!Addition | |||
!Promoted from | |||
|- | |- | ||
| | |Shading language 4.00 | ||
| | |ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather | ||
|- | |- | ||
| | |Individual blend equations for each color output | ||
| | |ARB_draw_buffers_blend | ||
|- | |- | ||
| | |Draw instanced arrays indirect | ||
| | |ARB_draw_indirect | ||
|- | |- | ||
| | |Request minimum number of fragment inputs | ||
| | |ARB_sample_shading | ||
|- | |- | ||
| | |Tessellation control and evaluation shaders | ||
| | |ARB_tessellation_shader | ||
|- | |- | ||
|Texture | |[[Buffer Texture]] formats RGB32F, RGB32I, RGB32UI | ||
| | |ARB_texture_buffer_object_rgb32 | ||
|- | |- | ||
| | |Cube map array textures | ||
| | |ARB_texture_cube_map_array | ||
|- | |- | ||
| | |Additional transform feedback functionality | ||
| | |ARB_transform_feedback2, ARB_transform_feedback3 | ||
|} | |} | ||
=== 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) === | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Shading language 3.30 | ||
| | |ARB_shader_bit_encoding | ||
|- | |||
|New blending functions | |||
|ARB_blend_func_extended | |||
|- | |||
|Attribute locations | |||
|ARB_explicit_attrib_location | |||
|- | |||
|Simple boolean occlusion queries | |||
|ARB_occlusion_query2 | |||
|- | |||
|Sampler objects | |||
|ARB_sampler_objects | |||
|- | |||
|A new texture format for unsigned 10.10.10.2 | |||
|ARB_texture_rgb10_a2ui | |||
|- | |||
|Texture swizzle | |||
|ARB_texture_swizzle | |||
|- | |||
|Timer query | |||
|ARB_timer_query | |||
|- | |- | ||
| | |Instanced arrays | ||
| | |ARB_instanced_arrays | ||
|- | |- | ||
| | |Vertex attributes 2.10.10.10 | ||
| | |ARB_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 | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
|Shader | |BGRA vertex component ordering | ||
| | |ARB_vertext_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 | ||
|- | |- | ||
| | |Geometry shaders | ||
| | |ARB_geometry_shader4 | ||
|- | |- | ||
| | |Fence sync objects | ||
| | |ARB_sync | ||
|} | |} | ||
=== OpenGL | Links: | ||
* [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 | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !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 | |||
|- | |||
|Texture buffer objects | |||
|ARB_texture_buffer_object | |||
|- | |||
|Rectangular textures | |||
|ARB_texture_rectangle | |||
|- | |- | ||
| | |Uniform buffer objects | ||
| | |ARB_uniform_buffer_object | ||
|} | |} | ||
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 344: | Line 427: | ||
* [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) === | |||
=== OpenGL | Core features: | ||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Pixel buffer objects | ||
| | |ARB_pixel_buffer_object | ||
|- | |- | ||
| | |sRGB textures | ||
|EXT_texture_sRGB | |||
| | |||
|} | |} | ||
Shading language 1.20: | |||
* Non-square matrices in GLSL. | |||
Links: | Links: | ||
* [http://www.opengl.org/registry/doc/ | * [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] | |||
* [http://www.opengl.org/registry/doc/GLSLangSpec.Full.1. | |||
=== OpenGL 2.0 (2004) === | |||
=== OpenGL | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !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 | === OpenGL 1.5 (2003) === | ||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !Promoted from | ||
|- | |- | ||
| | |Buffer objects | ||
| | |ARB_vertex_buffer_object | ||
|- | |- | ||
| | |Occlusion query | ||
| | |ARB_occlusion_query | ||
|- | |- | ||
| | |Shadow functions | ||
| | |EXT_shadow_funcs | ||
|} | |} | ||
=== OpenGL 1.4 (2002) === | |||
{| | {| | ||
!Addition | !Addition | ||
!Promoted from | !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 | !Addition | ||
!Promoted from | !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 | === 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 | !Addition | ||
!Promoted from | !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 | |Texture proxy | ||
| | |EXT_texture | ||
|- | |- | ||
| | |Copy texture and subtexture | ||
| | |EXT_copy_texture, EXT_subtexture | ||
|- | |- | ||
|Texture objects | |||
|EXT_texture_object | |||
|} | |} | ||
=== OpenGL 1.0 (1992) === | |||
First release. | |||
Revision as of 23:55, 6 August 2012
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.
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.)
Almost all additions are promoted from some extensions.
OpenGL 4.3 (2012)
Addition | Promoted from |
---|---|
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 |
Querying support information about Image Formats | ARB_internalformat_query2 |
Texture, buffer object, and framebuffer invalidation. | ARB_invalidate_subdata |
Issuing multiple indirect rendering commands from a single draw command. | ARB_multi_draw_indirect |
Improved API for getting info about program object values | ARB_program_interface_query |
More robustness of API | ARB_robust_buffer_access_behavior, |
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 |
Texture 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 association | ARB_vertex_attrib_binding |
Links:
- OpenGL 4.3 Core Profile Specification
- OpenGL 4.3 Compatibility Profile Specification
- OpenGL Shading Language 4.30 Specification
OpenGL 4.2 (2011)
Addition | Promoted from |
---|---|
Allows atomically incrementing/decrementing and fetching of buffer object memory locations from shaders. | ARB_shader_atomic_counters |
Allows shaders to read and write images, without filtering and mostly arbitrarily. | ARB_shader_image_load_store |
Allows texture objects to have 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. | 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, many other things. | ARB_shading_language_420pack |
Allows the use of certain advanced compression techniques. | ARB_texture_compression_BPTC |
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. | 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 |
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 | Promoted from |
---|---|
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 shader inputs | 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 | Promoted from |
---|---|
Shading language 4.00 | ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather |
Individual blend equations for each color output | ARB_draw_buffers_blend |
Draw instanced arrays indirect | ARB_draw_indirect |
Request minimum number of fragment inputs | ARB_sample_shading |
Tessellation control and evaluation shaders | ARB_tessellation_shader |
Buffer Texture formats RGB32F, RGB32I, RGB32UI | ARB_texture_buffer_object_rgb32 |
Cube map array textures | ARB_texture_cube_map_array |
Additional transform feedback functionality | ARB_transform_feedback2, ARB_transform_feedback3 |
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 | Promoted from |
---|---|
Shading language 3.30 | ARB_shader_bit_encoding |
New blending functions | ARB_blend_func_extended |
Attribute locations | ARB_explicit_attrib_location |
Simple boolean occlusion queries | ARB_occlusion_query2 |
Sampler objects | ARB_sampler_objects |
A new texture format for unsigned 10.10.10.2 | ARB_texture_rgb10_a2ui |
Texture swizzle | ARB_texture_swizzle |
Timer query | 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 | Promoted from |
---|---|
BGRA vertex component ordering | ARB_vertext_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 |
Geometry shaders | ARB_geometry_shader4 |
Fence sync objects | ARB_sync |
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 | 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 |
Texture buffer objects | ARB_texture_buffer_object |
Rectangular textures | ARB_texture_rectangle |
Uniform buffer objects | ARB_uniform_buffer_object |
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 | Promoted from |
---|---|
Conditional rendering | NV_conditional_rendering |
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 |
Framebuffer objects | EXT_framebuffer_object |
Half-float (16-bit) vertex array and pixel data formats | NV_half_float, ARB_half_float_pixel |
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 | EXT_packed_depth_stencil |
Per-color-attachment blend enables and color writemasks | EXT_draw_buffers2 |
RGTC specific internal compressed formats | EXT_texture_compression_rgtc |
Transform feedback | EXT_transform_feedback |
Vertex array objects | APPLE_vertex_array_object |
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 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 3.0 Specification
- OpenGL Shading Language 1.30.10 Specification
- 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:
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.