OpenGL历史与API变化

OpenGL API在不同的版本中的扩展。

OpenGL 4.6 (2017)

AdditionCore Extension
The SPIR-V language can be used to define shaders.ARB_gl_spirv, ARB_spirv_extensions
Vertex shaders can get the draw ID and base vertex/instance values from rendering commands.ARB_shader_draw_parameters
Multi-draw indirect rendering commands that can fetch the number of draws from a buffer.ARB_indirect_parameters
Statistics and transform feedback overflow queries.ARB_pipeline_statistics_query, ARB_transform_feedback_overflow_query
Anisotropic FilteringARB_texture_filter_anisotropic
Clamping polygon offsetsARB_polygon_offset_clamp
OpenGL Contexts can be created that do not report errors of any kind.KHR_no_error
More operations for Atomic Counters.ARB_shader_atomic_counter_ops
Avoiding divergent shader invocations, where they are unnecessary.ARB_shader_group_vote

Links:

  • OpenGL 4.6 Core Profile Specification
  • OpenGL 4.6 Compatibility Profile Specification
  • OpenGL Shading Language 4.60 Specification

OpenGL 4.5 (2014)

AdditionCore 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.1ARB_ES3_1_compatibility
Adds new modes to glBeginConditionalRender which invert condition used to determine whether to draw or not.ARB_conditional_render_inverted
Provides control over the spacial granularity at which the underlying implementation computes derivatives.ARB_derivative_control
Allows modifying and querying object state without binding objects.ARB_direct_state_access
Adds a new function to get sub-regions of texture images.ARB_get_texture_sub_image
Upgrades the ARB_robustness functionality to meet ES 3.1 standards.KHR_robustness
Provides GLSL built-in functions allowing shaders to query the number of samples of a texture.ARB_shader_texture_image_samples
Relaxes the restrictions on rendering to a currently bound texture and provides a mechanism to avoid read-after-write hazards.ARB_texture_barrier

Links:

  • OpenGL 4.5 Core Profile Specification
  • OpenGL 4.5 Compatibility Profile Specification
  • OpenGL Shading Language 4.50 Specification

OpenGL 4.4 (2013)

AdditionCore 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: Integer layout qualifiers can take any constant expression, not just integer literals. Explicit layout requests for buffer-backed interface blocks. Tight packing of disparate input/output variables. In-shader specification of transform feedback parameters. Locations can be set on input/output interface blocks, for packing purposes.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.4 Core Profile Specification
  • OpenGL 4.4 Compatibility Profile Specification
  • OpenGL Shading Language 4.40 Specification

OpenGL 4.3 (2012)

AdditionCore Extension
Debug messagingKHR_debug
GLSL multidimensional arraysARB_arrays_of_arrays
Clear Buffer Objects to specific values, ala memsetARB_clear_buffer_object
Arbitrary Compute ShadersARB_compute_shader
Arbitrary image copyingARB_copy_image
Compatibility with OpenGL ES 3.0ARB_ES3_compatibility
Specifying uniform locations in a shaderARB_explicit_uniform_location
Layer and viewport indices available from the fragment shaderARB_fragment_layer_viewport
Rendering to a Framebuffer Object that has no attachmentsARB_framebuffer_no_attachments
Generalized queries for information about Image FormatsARB_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 interfacesARB_program_interface_query
Get size of images from GLSLARB_shader_image_size
Buffer object read-write access from shader, via a uniform-block style mechanismARB_shader_storage_buffer_object
Accessing the stencil values from a depth/stencil textureARB_stencil_texturing
Buffer Textures can now be bound to a range of a buffer object rather than the whole thingARB_texture_buffer_range
GLSL can detect the available mipmap pyramid of a sampler or imageARB_texture_query_levels
Immutable storage for multisample texturesARB_texture_storage_multisample
The ability to create a new texture, with a new internal format, that references an existing texture’s storageARB_texture_view
Separation of vertex format from buffer objectARB_vertex_attrib_binding
AdditionPromoted from
More robustness of APIARB_robust_buffer_access_behavior, ARB_robustness_isolation, WGL_ARB_robustness_isolation, GLX_ARB_robustness_isolation
EAC and ETC compressed image formats.

Links:

  • OpenGL 4.3 Core Profile Specification
  • OpenGL 4.3 Compatibility Profile Specification
  • OpenGL Shading Language 4.30 Specification

OpenGL 4.2 (2011)

AdditionCore Extension
Allows atomically incrementing/decrementing and fetching of buffer object memory locations from shadersARB_shader_atomic_counters
Allows shaders to read and write images, with few but difficult restrictionsARB_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 notARB_texture_storage
Allows instanced rendering of data written by transform feedback operationsARB_transform_feedback_instanced
Allows the setting of Uniform Buffer Object and sampler binding points directly from GLSL, among many other small changesARB_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 typeARB_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 operationsARB_map_buffer_alignment
Allows explicitly defining how a fragment shader will modify the depth value, so that the system can optimize these cases betterARB_conservative_depth
AdditionPromoted from
Allows the use of BPTC compressed image formats.ARB_texture_compression_BPTC

Links:

  • OpenGL 4.2 Core Profile Specification
  • OpenGL 4.2 Compatibility Profile Specification
  • OpenGL Shading Language 4.20.6 Specification

OpenGL 4.1 (2010)

AdditionCore Extension
Query and load a binary blob for program objectsARB_get_program_binary
Ability to bind programs individually to programmable stagesARB_separate_shader_objects
Pulling missing functionality from OpenGL ES 2.0 into OpenGLARB_ES2_compatibility
Documents precision requirements for several FP operationsARB_shader_precision
Provides 64-bit floating-point component vertex attributesARB_vertex_attrib_64_bit
Multiple Viewports for the same rendering surface, or one per surfaceARB_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)

AdditionCore Extension
Shading language 4.00ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather
Indirect Drawing, without multidrawARB_draw_indirect
Request minimum number of fragment inputsARB_sample_shading
Tessellation, with shader stagesARB_tessellation_shader
Buffer Texture formats RGB32F, RGB32I, RGB32UIARB_texture_buffer_object_rgb32
Cubemap Array TextureARB_texture_cube_map_array
Transform Feedback objects and multiple feedback stream output.ARB_transform_feedback2, ARB_transform_feedback3
AdditionPromoted from
Individual blend equations for each color outputARB_draw_buffers_blend

Links:

  • OpenGL 4.0 Core Profile Specification
  • OpenGL 4.0 Compatibility Profile Specification
  • OpenGL Shading Language 4.00.9 Specification

参考

  • History of OpenGL
  • OpenGL4.6规范