|OpenGL 2.1 Specifications|
OpenGL version 2.1, released on August 2, 2006, is the seventh revision since the original version 1.0. Despite incrementing the major version number (to indicate support for high-level programmable shaders), version 2.1 is upward compatible with earlier versions, meaning that any program that runs with a 2.0, 1.5, 1.4, 1.3, 1.2, 1.1, or 1.0 GL implementation will also run unchanged with a 2.1 GL implementation.
Shader ObjectsShader objects provides mechanisms necessary to manage shader and program objects. Shader objects were promoted from the ARB shader objects extension.
Shader ProgramsVertex and fragment shader programs may be written in the high-level OpenGL Shading Language, replacing fixed-functionality vertex and fragment processing respectively. Vertex and fragment shader programs were promoted from the ARB vertex shader and ARB fragment shader extensions.
OpenGL Shading LanguageThe OpenGL Shading Language is a high-level, C-like language used to program the vertex and fragment pipelines. The Shading Language Specification defines the language proper, while OpenGL API features control how vertex and fragment programs interact with the fixed-function OpenGL pipeline and how applications manage those programs.
OpenGL 2.1 implementations must support at least revision 1.10 of the OpenGL Shading Language. Implementations may query the SHADING LANGUAGE VERSION string to determine the exact version of the language supported. The OpenGL Shading Language was promoted from the ARB shading language 100 extension (the shading language itself is specified in a companion document; due to the way it's written, that document did not need to be changed as a consequence of promoting programmable shading to the OpenGL core).
Changes To Shader APIsSmall changes to the APIs for managing shader and program objects were made in the process of promoting the shader extensions to the OpenGL 2.1 core. These changes do not affect the functionality of the shader APIs, but include use of the existing uint core GL type rather than the new handleARB type introduced by the extensions, and changes in some function names, for example mapping the extension function CreateShaderObjectARB into the core function CreateShader.
Multiple Render TargetsProgrammable shaders may write different colors to multiple output color buffers in a single pass. Multiple render targets was promoted from the ARB draw buffers extension.
Non-Power-Of-Two TexturesThe restriction of textures to power-of-two dimensions has been relaxed for all texture targets, so that non-power-of-two textures may be specified without generating errors. Non-power-of-two textures was promoted from the ARB texture non power of two extension.
Point SpritesPoint sprites replace point texture coordinates with texture coordinates interpolated across the point. This allows drawing points as customized textures, useful for particle systems. Point sprites were promoted from the ARB point sprite extension, with the further addition of the POINT SPRITE COORD ORIGIN parameter controlling the direction in which the t texture coordinate increases.
Separate StencilSeparate stencil functionality may be defined for the front and back faces of primitives, improving performance of shadow volume and Constructive Solid Geometry rendering algorithms. Separate stencil was based on the the API of the ATI separate stencil extension, with additional state defined by the similar EXT stencil two side extension.