History of OpenGL
Overview
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.
Links:
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
Links:
- OpenGL 3.0 Specification
- OpenGL Shading Language 1.30.10 Specification
- Official feedback on OpenGL 3.0 thread
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 |
Links:
- OpenGL 3.1 Specification
- OpenGL 3.1 Specification with GL_ARB_compatibility extension
- OpenGL Shading Language 1.40.08 Specification
- Official feedback on OpenGL 3.1 thread
- OpenGL 3.1 review
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 |
Links:
- OpenGL 3.2 Core Profile Specification
- OpenGL 3.2 Compatibility Profile Specification
- OpenGL Shading Language 1.50.11 Specification
- Official feedback on OpenGL 3.2 thread
- OpenGL 3.2 review
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 10.10.10.2 | ARB_texture_rgb10_a2ui |
Texture swizzle | ARB_texture_swizzle |
Timer query | ARB_timer_query |
Instanced arrays | ARB_instanced_arrays |
Vertex attributes 2.10.10.10 | ARB_vertex_type_2_10_10_10_rev |
Links:
- OpenGL 3.3 Core Profile Specification
- OpenGL 3.3 Compatibility Profile Specification
- OpenGL Shading Language 3.30.9 Specification
- OpenGL 3.3 Reference Pages
- Official feedback on OpenGL 3.3 thread
- OpenGL 3.3 review
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 |
Links:
- OpenGL 4.0 Core Profile Specification
- OpenGL 4.0 Compatibility Profile Specification
- OpenGL Shading Language 4.00.9 Specification
- Official feedback on OpenGL 4.0 thread
- OpenGL 4.0 review
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 |
Links:
- OpenGL 4.1 Core Profile Specification
- OpenGL 4.1 Compatibility Profile Specification
- OpenGL Shading Language 4.10.6 Specification
- OpenGL 4.1 Reference Pages
- Official feedback on OpenGL 4.1 thread
- OpenGL 4.1 review
- An Introduction to OpenGL 4.1
OpenGL 4.2 (2011)
Addition | Promoted from |
---|---|
ARB_shader_atomic_counters | |
ARB_shader_image_load_store | |
ARB_texture_storage | |
ARB_transform_feedback_instanced | |
ARB_shading_language_420pack | |
ARB_texture_compression_BPTC | |
ARB_base_instance | |
ARB_internalformat_query | |
ARB_compressed_texture_pixel_storage | |
ARB_shading_language_packing | |
ARB_map_buffer_alignment | |
ARB_conservative_depth |