OpenGL历史与API变化
OpenGL API在不同的版本中的扩展。
OpenGL 4.6 (2017)
Addition | Core Extension |
---|---|
The SPIR-V language can be used to define shaders. | ARB_gl_spirv, ARB_spirv_extensions |
Vertex shaders can get the draw ID and base vertex/instance values from rendering commands. | ARB_shader_draw_parameters |
Multi-draw indirect rendering commands that can fetch the number of draws from a buffer. | ARB_indirect_parameters |
Statistics and transform feedback overflow queries. | ARB_pipeline_statistics_query, ARB_transform_feedback_overflow_query |
Anisotropic Filtering | ARB_texture_filter_anisotropic |
Clamping polygon offsets | ARB_polygon_offset_clamp |
OpenGL Contexts can be created that do not report errors of any kind. | KHR_no_error |
More operations for Atomic Counters. | ARB_shader_atomic_counter_ops |
Avoiding divergent shader invocations, where they are unnecessary. | ARB_shader_group_vote |
Links:
- OpenGL 4.6 Core Profile Specification
- OpenGL 4.6 Compatibility Profile Specification
- OpenGL Shading Language 4.60 Specification
OpenGL 4.5 (2014)
Addition | Core Extension |
---|---|
Additional clip control modes to configure how clip space is mapped to window space. | ARB_clip_control |
Adds a new GLSL gl_CullDistance shader output, similar to gl_ClipDistance, but used for whole primitive culling. | ARB_cull_distance |
Compatibility with OpenGL ES 3.1 | ARB_ES3_1_compatibility |
Adds new modes to glBeginConditionalRender which invert condition used to determine whether to draw or not. | ARB_conditional_render_inverted |
Provides control over the spacial granularity at which the underlying implementation computes derivatives. | ARB_derivative_control |
Allows modifying and querying object state without binding objects. | ARB_direct_state_access |
Adds a new function to get sub-regions of texture images. | ARB_get_texture_sub_image |
Upgrades the ARB_robustness functionality to meet ES 3.1 standards. | KHR_robustness |
Provides GLSL built-in functions allowing shaders to query the number of samples of a texture. | ARB_shader_texture_image_samples |
Relaxes the restrictions on rendering to a currently bound texture and provides a mechanism to avoid read-after-write hazards. | ARB_texture_barrier |
Links:
- OpenGL 4.5 Core Profile Specification
- OpenGL 4.5 Compatibility Profile Specification
- OpenGL Shading Language 4.50 Specification
OpenGL 4.4 (2013)
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: 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)
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.3 Core Profile Specification
- OpenGL 4.3 Compatibility Profile Specification
- OpenGL Shading Language 4.30 Specification
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.2 Core Profile Specification
- OpenGL 4.2 Compatibility Profile Specification
- OpenGL Shading Language 4.20.6 Specification
OpenGL 4.1 (2010)
Addition | Core Extension |
---|---|
Query and load a binary blob for program objects | ARB_get_program_binary |
Ability to bind programs individually to programmable stages | ARB_separate_shader_objects |
Pulling missing functionality from OpenGL ES 2.0 into OpenGL | ARB_ES2_compatibility |
Documents precision requirements for several FP operations | ARB_shader_precision |
Provides 64-bit floating-point component vertex attributes | ARB_vertex_attrib_64_bit |
Multiple Viewports for the same rendering surface, or one per surface | ARB_viewport_array |
Links:
- OpenGL 4.1 Core Profile Specification
- OpenGL 4.1 Compatibility Profile Specification
- OpenGL Shading Language 4.10.6 Specification
OpenGL 4.0 (2010)
Addition | Core Extension |
---|---|
Shading language 4.00 | ARB_texture_query_lod, ARB_gpu_shader5, ARB_gpu_shader_fp64, ARB_shader_subroutine, ARB_texture_gather |
Indirect Drawing, without multidraw | ARB_draw_indirect |
Request minimum number of fragment inputs | ARB_sample_shading |
Tessellation, with shader stages | ARB_tessellation_shader |
Buffer Texture formats RGB32F, RGB32I, RGB32UI | ARB_texture_buffer_object_rgb32 |
Cubemap Array Texture | ARB_texture_cube_map_array |
Transform Feedback objects and multiple feedback stream output. | ARB_transform_feedback2, ARB_transform_feedback3 |
Addition | Promoted from |
Individual blend equations for each color output | ARB_draw_buffers_blend |
Links:
- OpenGL 4.0 Core Profile Specification
- OpenGL 4.0 Compatibility Profile Specification
- OpenGL Shading Language 4.00.9 Specification
参考
- History of OpenGL
- OpenGL4.6规范