OpenGL入门系列- OpenGL版本历史

History of OpenGL

Jump to navigationJump to search

Contents

Overview[edit]

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, 4.6.

Summary of version changes[edit]

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.6 (2017)[edit]

AdditionCore Extension
The SPIR-V language can be used to define shaders.ARB_gl_spirvARB_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_queryARB_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.5 (2014)[edit]

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

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: 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
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)[edit]

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
Texturebuffer 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.2 (2011)[edit]

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.1 (2010)[edit]

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.0 (2010)[edit]

AdditionCore Extension
Shading language 4.00ARB_texture_query_lodARB_gpu_shader5ARB_gpu_shader_fp64ARB_shader_subroutineARB_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_feedback2ARB_transform_feedback3
AdditionPromoted from
Individual blend equations for each color outputARB_draw_buffers_blend

Links:

OpenGL 3.3 (2010)[edit]

AdditionCore Extension
Shading language 3.30ARB_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 QueryARB_occlusion_query2
Sampler ObjectsARB_sampler_objects
A new image format for unsigned 10.10.10.2 colorsARB_texture_rgb10_a2ui
Texture swizzleARB_texture_swizzle
Timer queriesARB_timer_query
Instanced arraysARB_instanced_arrays
Vertex attributes 2.10.10.10ARB_vertex_type_2_10_10_10_rev

Links:

OpenGL 3.2 (2009)[edit]

  • Core and compatibility profiles
  • Shading language 1.50
AdditionCore Extension
D3D compatible color vertex component orderingARB_vertex_array_bgra
Drawing command allowing modification of the base vertex indexARB_draw_elements_base_vertex
Shader fragment coordinate convention controlARB_fragment_coord_conventions
Provoking vertex controlARB_provoking_vertex
Seamless cube map filteringARB_seamless_cube_map
Multisampled textures and texture samplers for specific sample locationsARB_texture_multisample
Fragment Depth ClampingARB_depth_clamp
Fence sync objectsARB_sync
AdditionPromoted from
Geometry Shaders, as well as input/output Interface BlocksARB_geometry_shader4, heavily modified.

Links:

OpenGL 3.1 (2009)[edit]

  • All features deprecated in OpenGL 3.0 are removed except wide lines
  • Shading language 1.40
  • SNORM texture component formats
AdditionCore Extension
Uniform Buffer ObjectsARB_uniform_buffer_object
AdditionPromoted from
Instanced rendering with a per instance counter accessible to vertex shadersARB_draw_instanced
Data copying between buffer objectsARB_copy_buffer
Primitive restartNV_primitive_restart
Buffer TexturesARB_texture_buffer_object
Rectangle TexturesARB_texture_rectangle

Links:

OpenGL 3.0 (2008)[edit]

  • 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
AdditionCore Extension
Framebuffer Objects, along with blitting, Multisample Renderbuffer Objects, and packed depth/stencil image formatsARB_framebuffer_object
Vertex Array ObjectsARB_vertex_array_object
AdditionPromoted from
Conditional RenderingNV_conditional_render
Floating-point color and depth internal formats for textures and render buffersARB_color_buffer_floatNV_depth_buffer_floatARB_texture_floatEXT_packed_floatEXT_texture_shared_exponent
Half-float (16-bit) vertex array and pixel data formatsNV_half_floatEXT_half_float_pixel
Integral Image Formats, which can be fetched as integers rather than being converted to normalized floats.EXT_texture_integer
Array TexturesEXT_texture_array
Per-color-attachment blend enables and color writemasksEXT_draw_buffers2
Red Green Texture CompressionEXT_texture_compression_rgtc
Transform FeedbackARB_transform_feedback
sRGB framebuffer modeEXT_framebuffer_sRGB
Deprecation Model[edit]

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)[edit]

Core features:

AdditionPromoted from
Pixel buffer objectsARB_pixel_buffer_object
sRGB texturesEXT_texture_sRGB

Shading language 1.20:

  • Non-square matrices in GLSL.

Links:

OpenGL 2.0 (2004)[edit]

AdditionPromoted from
Shader objectsARB_shader_objectsheavily modified
Shader programsARB_vertex_shaderARB_fragment_shaderheavily modified
Shading language 1.10ARB_shading_language_100heavily modified
Multiple render targetsARB_draw_buffers
Non-power-of-two texturesARB_texture_non_power_of_two
Point spritesARB_point_sprite
Separate stencilATI_separate_stencilEXT_stencil_two_side

Links:

OpenGL 1.5 (2003)[edit]

AdditionPromoted from
Buffer objectsARB_vertex_buffer_object
Occlusion queryARB_occlusion_query
Shadow functionsEXT_shadow_funcs

Links:

OpenGL 1.4 (2002)[edit]

AdditionPromoted from
Automatic mipmap generationSGIS_generate_mipmap
Blend squaringNV_blend_square
Depth textures and shadowsARB_depth_textureARB_shadow
Fog coordinateEXT_fog_coord
Multiple draw arraysEXT_multi_draw_arrays
Point parametersARB_point_parameters
Secondary colorEXT_secondary_color
Separate blend functionsEXT_blend_func_separate
Stencil wrapEXT_stencil_wrap
Texture crossbar env modeARB_texture_env_crossbar
Texture LOD biasEXT_texture_lod_bias
Texture mirrored repeatARB_texture_mirrored_repeat
Window raster positionARB_window_pos

Links:

OpenGL 1.3 (2001)[edit]

AdditionPromoted from
Compressed texturesARB_texture_compression
Cube map texturesARB_texture_cube_map
MultisampleARB_multisample
MultitextureARB_multitexture
Texture add env modeARB_texture_env_add
Texture combine env modeARB_texture_env_combine
Texture dot3 env modeARB_texture_env_dot3
Texture border clampARB_texture_border_clamp
Transpose matrixARB_transpose_matrix

Links:

OpenGL 1.2.1 (1998)[edit]

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)[edit]

AdditionPromoted from
3D texturesEXT_texture3D
BGRA pixel formatsEXT_bgra
Packed pixel formatsEXT_packed_pixels
Normal rescalingEXT_rescale_normal
Separate specular colorEXT_separate_specular_color
Texture coordinate edge clampingSGIS_texture_edge_clamp
Texture LOD controlSGIS_texture_lod
Vertex array draw element rangeEXT_draw_range_elements
Imaging subset (optional)[edit]
AdditionPromoted from
Color TablesSGI_color_tableEXT_color_subtable
ConvolutionEXT_convolutionHP_convolution_border_modesSUN_convolution_border_modes
Color matrixSGI_color_matrix
Pixel data statisticsEXT_histogram
Constant blend colorEXT_blend_color
New blending equationsEXT_blend_minmaxEXT_blend_subtract

Links:

OpenGL 1.1 (1997)[edit]

AdditionPromoted from
Vertex arraysEXT_vertex_array
Polygon offsetEXT_polygon_offset
Logical operationEXT_blend_logic_op
Internal texture formatsEXT_texture
GL_REPLACE texture envEXT_texture
Texture proxyEXT_texture
Copy texture and subtextureEXT_copy_textureEXT_subtexture
Texture objectsEXT_texture_object

Links:

OpenGL 1.0 (1992)[edit]

First release.

Links:


    

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值