
- •Introduction
- •Formatting of Optional Features
- •What is the OpenGL Graphics System?
- •Our View
- •Companion Documents
- •OpenGL Operation
- •OpenGL Fundamentals
- •Floating-Point Computation
- •GL State
- •GL Command Syntax
- •Basic GL Operation
- •GL Errors
- •Begin/End Paradigm
- •Begin and End
- •Polygon Edges
- •GL Commands within Begin/End
- •Vertex Specification
- •Vertex Arrays
- •Buffer Objects
- •Vertex Arrays in Buffer Objects
- •Array Indices in Buffer Objects
- •Rectangles
- •Coordinate Transformations
- •Controlling the Viewport
- •Matrices
- •Normal Transformation
- •Generating Texture Coordinates
- •Clipping
- •Current Raster Position
- •Colors and Coloring
- •Lighting
- •ColorMaterial
- •Lighting State
- •Color Index Lighting
- •Clamping or Masking
- •Flatshading
- •Color and Associated Data Clipping
- •Final Color Processing
- •Vertex Shaders
- •Shader Objects
- •Program Objects
- •Shader Variables
- •Shader Execution
- •Required State
- •Rasterization
- •Invariance
- •Antialiasing
- •Multisampling
- •Points
- •Basic Point Rasterization
- •Point Rasterization State
- •Point Multisample Rasterization
- •Line Segments
- •Basic Line Segment Rasterization
- •Other Line Segment Features
- •Line Rasterization State
- •Line Multisample Rasterization
- •Polygons
- •Basic Polygon Rasterization
- •Stippling
- •Antialiasing
- •Options Controlling Polygon Rasterization
- •Depth Offset
- •Polygon Multisample Rasterization
- •Polygon Rasterization State
- •Pixel Rectangles
- •Pixel Storage Modes
- •The Imaging Subset
- •Pixel Transfer Modes
- •Rasterization of Pixel Rectangles
- •Pixel Transfer Operations
- •Pixel Rectangle Multisample Rasterization
- •Bitmaps
- •Texturing
- •Compressed Texture Images
- •Texture Parameters
- •Depth Component Textures
- •Cube Map Texture Selection
- •Texture Wrap Modes
- •Texture Completeness
- •Texture State and Proxy State
- •Texture Objects
- •Texture Environments and Texture Functions
- •Texture Comparison Modes
- •Texture Application
- •Color Sum
- •Fragment Shaders
- •Shader Variables
- •Shader Execution
- •Antialiasing Application
- •Multisample Point Fade
- •Per-Fragment Operations
- •Pixel Ownership Test
- •Scissor Test
- •Multisample Fragment Operations
- •Alpha Test
- •Stencil Test
- •Depth Buffer Test
- •Occlusion Queries
- •Blending
- •Dithering
- •Logical Operation
- •Additional Multisample Fragment Operations
- •Whole Framebuffer Operations
- •Selecting a Buffer for Writing
- •Fine Control of Buffer Updates
- •Clearing the Buffers
- •The Accumulation Buffer
- •Drawing, Reading, and Copying Pixels
- •Writing to the Stencil Buffer
- •Reading Pixels
- •Copying Pixels
- •Pixel Draw/Read State
- •Special Functions
- •Evaluators
- •Selection
- •Feedback
- •Display Lists
- •Flush and Finish
- •Hints
- •State and State Requests
- •Querying GL State
- •Simple Queries
- •Data Conversions
- •Enumerated Queries
- •Texture Queries
- •Stipple Query
- •Color Matrix Query
- •Color Table Query
- •Convolution Query
- •Histogram Query
- •Minmax Query
- •Pointer and String Queries
- •Occlusion Queries
- •Buffer Object Queries
- •Shader and Program Queries
- •Saving and Restoring State
- •State Tables
- •Invariance
- •Corollaries
- •Version 1.1
- •Version 1.2
- •Imaging Subset
- •Version 1.2.1
- •Version 1.3
- •Version 1.4
- •Fog Coordinate
- •Texture LOD Bias
- •Version 1.5
- •Version 2.0
- •ARB Extensions
- •Texture Mirrored Repeat
- •OpenGL Shading Language

Appendix I
Version 2.0
OpenGL version 2.0, released on September 7, 2004, is the sixth revision since the original version 1.0. Despite incrementing the major version number (to indicate support for high-level programmable shaders), version 2.0 is upward compatible with earlier versions, meaning that any program that runs with a 1.5, 1.4, 1.3, 1.2, 1.1, or 1.0 GL implementation will also run unchanged with a 2.0 GL implementation.
Following are brief descriptions of each addition to OpenGL 2.0.
I.1 Programmable Shading
The OpenGL Shading Language, and the related APIs to create, manage, and use programmable shaders written in the Shading Language, were promoted to core features in OpenGL 2.0. The complete list of features related to programmable shading includes:
I.1.1 Shader Objects
Shader objects provides mechanisms necessary to manage shader and program objects. Shader objects were promoted from the ARB shader objects extension.
I.1.2 Shader Programs
Vertex 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.
340

I.2. MULTIPLE RENDER TARGETS |
341 |
I.1.3 OpenGL Shading Language
The 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.0 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).
I.1.4 Changes To Shader APIs
Small changes to the APIs for managing shader and program objects were made in the process of promoting the shader extensions to the OpenGL 2.0 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.
I.2 Multiple Render Targets
Programmable 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.
I.3 Non-Power-Of-Two Textures
The 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.
Version 2.0 - October 22, 2004

I.4. POINT SPRITES |
342 |
I.4 Point Sprites
Point 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.
I.5 Separate Stencil
Separate 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.
I.6 Other Changes
Several minor revisions and corrections to the OpenGL 1.5 specification were made:
•In section 2.7, SecondaryColor3 was changed to set A to 1.0 (previously 0.0), so the initial GL state can be restored.
•In section 2.13, transformation was added to the list of steps not performed by WindowPos.
•Section 3.8.1 was clarified to mandate that selection of texture internal format must allocate a non-zero number of bits for all components named by the internal format, and zero bits for all other components.
•Tables 3.22 and 3.23 were generalized to multiple textures by replacing Cf with Cp.
•In section 6.1.9, GetHistogram was clarified to note that the Final Conversion pixel storage mode is not applied when storing histogram counts.
•The FOG COORD ARRAY BUFFER BINDING enumerant alias was added to table H.1.
Version 2.0 - October 22, 2004

I.7. ACKNOWLEDGEMENTS |
343 |
After the initial version of the OpenGL 2.0 was released, several more minor corrections were made in the specification revision approved on October 22, 2004:
•Corrected name of the fog source from FOG COORD SRC to FOG COORD in section 2.13.
•Corrected last parameter type in the declaration of the UniformMatrix*
commands to const float *value, in section 2.15.3.
•Changed the end of the second paragraph of the Conversion to Fragments subsection of section 3.6.4, to more clearly describe the set of generated fragments.
•Changed from the older FOG COORDINATE to the newer FOG COORD notation in section 3.10.
•Added POINT SPRITE COORD ORIGIN state to table 6.13.
•Changed the description of MAX TEXTURE UNITS in table 6.34 to reflect its legacy status (referring to the number of fixed-function texture units), and moved it into table 6.35.
•Removed duplicated table entries for MAX TEXTURE IMAGE UNITS and
MAX TEXTURE COORDS from table 6.35.
•Added Victor Vedovato to the OpenGL 2.0 Acknowledgements section.
•Miscellaneous typographical corrections.
I.7 Acknowledgements
OpenGL 2.0 is the result of the contributions of many people. The editor especially thanks the ongoing work of the ARB GL2 working group, lead by Bill LiceaKane and with specifications edited by John Kessenich and Barthold Lichtenbelt, in performing work necessary to promote the OpenGL Shading Language to a core OpenGL feature.
A partial list of other contributors, including the company that they represented at the time of their contribution, follows:
Kurt Akeley, NVIDIA Allen Akin
Dave Baldwin, 3Dlabs Bob Beretta, Apple
Version 2.0 - October 22, 2004
I.7. ACKNOWLEDGEMENTS |
344 |
Pat Brown, NVIDIA
Matt Craighead, NVIDIA
Suzy Deffeyes, IBM
Ken Dyke, Apple
Cass Everitt, NVIDIA
Steve Glanville, NVIDIA
Michael I. Gold, NVIDIA
Evan Hart, ATI
Phil Huxley, 3Dlabs
Deron Dann Johnson, Sun
John Kessenich, 3Dlabs
Mark Kilgard, NVIDIA
Dale Kirkland, 3Dlabs
Steve Koren, 3Dlabs
Jon Leech, SGI
Bill Licea-Kane, ATI
Barthold Lichtenbelt, 3Dlabs
Kent Lin, Intel
Benjamin Lipchak, ATI
Rob Mace, ATI
Michael McCool, U. Waterloo
Jack Middleton, Sun
Jeremy Morris, 3Dlabs
Teri Morrison, 3Dlabs
Marc Olano, SGI / U. Maryland
Glenn Ortner, ATI
Brian Paul, Tungsten Graphics
Bimal Poddar, Intel
Phil Rogers, ATI
Ian Romanick, IBM
Randi Rost, 3Dlabs
Jeremy Sandmel, ATI
Folker Schamel, Spinor GMBH
Geoff Stahl, Apple
Eskil Steenberg, Obsession
Neil Trevett, 3Dlabs
Victor Vedovato, ATI
Mik Wells, Softimage
Esen Yilmaz, Intel
Dave Zenz, Dell
Version 2.0 - October 22, 2004