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规范