History of OpenGL

From OpenGL.org
Revision as of 20:54, 29 August 2011 by Alfonse (Talk | contribs) (OpenGL 4.1 (2010))

Jump to: navigation, search


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 notion of backwards compatible context and forward compatible context. In forward mode, certain old GL functions don't work since they are considered old/deprecated/should not be used/there is a better and more modern way. Example, glBegin, glVertex, glEnd was the GL 1.0 method of submitting vertices. Since GL 1.5, VBO is added which is more efficient.

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.

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 1.0 (1992)

First release.

OpenGL 1.1 (1992)

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.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.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.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.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.5 (2003)

Addition Promoted from
Buffer objects ARB_vertex_buffer_object
Occlusion query ARB_occlusion_query
Shadow functions EXT_shadow_funcs

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


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


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


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


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 ARB_texture_rgb10_a2ui
Texture swizzle ARB_texture_swizzle
Timer query ARB_timer_query
Instanced arrays ARB_instanced_arrays
Vertex attributes ARB_vertex_type_2_10_10_10_rev


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
Tesselation control and evaluation shaders ARB_tesselation_shader
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 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


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 [[GLSL sampler|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