
- •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 F
Version 1.3
OpenGL version 1.3, released on August 14, 2001, is the third revision since the original version 1.0. Version 1.3 is upward compatible with earlier versions, meaning that any program that runs with a 1.2, 1.1, or 1.0 GL implementation will also run unchanged with a 1.3 GL implementation.
Several additions were made to the GL, especially texture mapping capabilities previously defined by ARB extensions. Following are brief descriptions of each addition.
F.1 Compressed Textures
Compressing texture images can reduce texture memory utilization and improve performance when rendering textured primitives. The GL provides a framework upon which extensions providing specific compressed image formats can be built, and a set of generic compressed internal formats that allow applications to specify that texture images should be stored in compressed form without needing to code for specific compression formats (specific compressed formats, such as S3TC or
FXT1, are supported by extensions). |
|
|
|
|
|
Texture |
compression |
was |
promoted |
from |
the |
GL ARB texture compression extension. |
|
|
|
F.2 Cube Map Textures
Cube map textures provide a new texture generation scheme for looking up textures from a set of six two-dimensional images representing the faces of a cube. The (str) texture coordinates are treated as a direction vector emanating from the center of a cube. At texture generation time, the interpolated per-fragment (str) selects
320

F.3. MULTISAMPLE |
321 |
one cube face two-dimensional image based on the largest magnitude coordinate (the major axis). A new (st) is calculated by dividing the two other coordinates (the minor axes values) by the major axis value, and the new (st) is used to lookup into the selected two-dimensional texture image face of the cube map.
Two new texture coordinate generation modes are provided for use in conjunction with cube map texturing. The REFLECTION MAP mode generates texture coordinates (str) matching the vertex’s eye-space reflection vector, useful for environment mapping without the singularity inherent in SPHERE MAP mapping. The NORMAL MAP mode generates texture coordinates matching the vertex’s transformed eye-space normal, useful for texture-based diffuse lighting models.
Cube mapping was promoted from the GL ARB texture cube map extension.
F.3 Multisample
Multisampling provides a antialiasing mechanism which samples all primitives multiple times at each pixel. The color sample values are resolved to a single, displayable color each time a pixel is updated, so antialiasing appears to be automatic at the application level. Because each sample includes depth and stencil information, the depth and stencil functions perform equivalently to the single-sample mode.
When multisampling is supported, an additional buffer, called the multisample buffer, is added to the framebuffer. Pixel sample values, including color, depth, and stencil values, are stored in this buffer.
Multisampling is usually an expensive operation, so it is usually not supported on all contexts. Applications must obtain a multisample-capable context using the new interfaces provided by GLX 1.4 or by the WGL ARB multisample extension.
Multisampling was promoted from the GL ARB multisample extension; The definition of the extension was changed slightly to support both multisampling and supersampling implementations.
F.4 Multitexture
Multitexture adds support for multiple texture units. The capabilities of the multiple texture units are identical, except that evaluation and feedback are supported only for texture unit 0. Each texture unit has its own state vector which includes texture vertex array specification, texture image and filtering parameters, and texture environment application.
The texture environments of the texture units are applied in a pipelined fashion whereby the output of one texture environment is used as the input fragment color
Version 2.0 - October 22, 2004

F.5. TEXTURE ADD ENVIRONMENT MODE |
322 |
for the next texture environment. Changes to texture client state and texture server state are each routed through one of two selectors which control which instance of texture state is affected.
Multitexture was promoted from the GL ARB multitexture extension.
F.5 Texture Add Environment Mode
The TEXTURE ENV MODE texture environment function ADD provides a texture function to add incoming fragment and texture source colors.
Texture add mode was promoted from the GL ARB texture env add extension.
F.6 Texture Combine Environment Mode
The TEXTURE ENV MODE texture environment function COMBINE provides a wide range of programmable combiner functions using the incoming fragment color, texture source color, texture constant color, and the result of the previous texture environment stage as possible parameters.
Combiner operations include passthrough, multiplication, addition and biased addition, subtraction, and linear interpolation of specified parameters. Different combiner operations may be selected for RGB and A components, and the final result may be scaled by 1, 2, or 4.
Texture combine was promoted from the GL ARB texture env combine extension.
F.7 Texture Dot3 Environment Mode
The TEXTURE ENV MODE COMBINE operations also provide three-component dot products of specified parameters, with the resulting scalar value replicated into the RGB or RGBA components of the output color. The dot product is performed using pseudo-signed arithmetic to enable per-pixel lighting computations.
Texture DOT3 mode was promoted from the GL ARB texture env dot3 extension.
F.8 Texture Border Clamp
The texture wrap parameter CLAMP TO BORDER mode clamps texture coordinates at all mipmap levels such that when the texture filter straddles an edge of the texture
Version 2.0 - October 22, 2004

F.9. TRANSPOSE MATRIX |
323 |
image, the color returned is derived only from border texels. This behavior mirrors the behavior of the texture edge clamp mode introduced by OpenGL 1.2.
Texture border clamp was promoted from the
GL ARB texture border clamp extension.
F.9 Transpose Matrix
New functions and tokens are added allowing application matrices stored in row major order rather than column major order to be transferred to the implementation. This allows an application to use standard C-language 2-dimensional arrays and have the array indices match the expected matrix row and column indexes. These arrays are referred to as transpose matrices since they are the transpose of the standard matrices passed to OpenGL.
Transpose matrix adds an interface for transfering data to and from the OpenGL pipeline. It does not change any OpenGL processing or imply any changes in state representation.
Transpose matrix was promoted from the GL ARB transpose matrix extension.
F.10 Acknowledgements
OpenGL 1.3 is the result of the contributions of many people. Following is a partial list of the contributors, including the company that they represented at the time of their contribution:
Adrian Muntianu, ATI Al Reyes, 3dfx
Alain Bouchard, Matrox Alan Commike, SGI Alan Heirich, Compaq Alex Herrera, SP3D Allen Akin, VA Linux Allen Gallotta, ATI
Alligator Descartes, Arcane Andy Vesper, MERL
Andy Wolf, Diamond Multimedia Axel Schildan, S3
Barthold Lichtenbelt, 3Dlabs Benj Lipchak, Compaq
Bill Armstrong, Evans & Sutherland
Version 2.0 - October 22, 2004
F.10. ACKNOWLEDGEMENTS |
324 |
Bill Clifford, Intel
Bill Mannel, SGI Bimal Poddar, Intel Bob Beretta, Apple Brent Insko, NVIDIA Brian Goldiez, UCF
Brian Greenstone, Apple Brian Paul, VA Linux Brian Sharp, GLSetup Bruce D’Amora, IBM Bruce Stockwell, Compaq Chris Brady, Alt.software Chris Frazier, Raycer Chris Hall, 3dlabs
Chris Hecker, GLSetup Chris Lane, Intel
Chris Thornborrow, PixelFusion Christopher Fraser, IMG
Chuck Smith, Intelligraphics Craig Dunwoody, SGI Dairsie Latimer, PixelFusion
Dale Kirkland, 3Dlabs / Intergraph Dan Brokenshire, IBM
Dan Ginsburg, ATI Dan McCabe, S3
Dave Aronson, Microsoft Dave Gosselin, ATI Dave Shreiner, SGI Dave Zenz, Dell
David Aronson, Microsoft David Blythe, SGI
David Kirk, NVIDIA David Story, SGI David Yu, SGI Deanna Hohn, 3dfx
Dick Coulter, Silicon Magic Don Mullis, 3dfx
Eamon O Dea, PixelFusion Edward (Chip) Hill, Pixelfusion Eiji Obata, NEC
Version 2.0 - October 22, 2004
F.10. ACKNOWLEDGEMENTS |
325 |
Elio Del Giudice, Matrox Eric Young, S3
Evan Hart, ATI Fred Fisher, 3dLabs
Garry Paxinos, Metro Link Gary Tarolli, 3dfx
George Kyriazis, NVIDIA Graham Connor, IMG Herb Kuta, Quantum3D Howard Miller, Apple Igor Sinyak, Intel
Jack Middleton, Sun James Bowman, 3dfx
Jan C. Hardenbergh, MERL Jason Mitchell, ATI
Jeff Weyman, ATI Jeffrey Newquist, 3dfx
Jens Owen, Precision Insight Jeremy Morris, 3Dlabs
Jim Bushnell, Pyramid Peak John Dennis, Sharp Eye John Metcalfe, IMG
John Stauffer, Apple John Tynan, PixelFusion John W. Polick, NEC Jon Khazam, Intel
Jon Leech, SGI
Jon Paul Schelter, Matrox Karl Hilleslad, NVIDIA Kelvin Thompson
Ken Cameron, Pixelfusion Ken Dyke, Apple
Ken Nicholson, SGI Kent Lin, Intel Kevin Lefebvre, HP
Kevin Martin, VA Linux Kurt Akeley, SGI
Les Silvern, NEC
Mahesh Dandipani, Rendition Mark Kilgard, NVIDIA
Version 2.0 - October 22, 2004
F.10. ACKNOWLEDGEMENTS |
326 |
Martin Amon, 3dfx Martina Sourada, ATI Matt Lavoie, Pixelfusion Matt Russo, Matrox
Matthew Papakipos, NVIDIA Michael Gold, NVIDIA Miriam Geller, SGI
Morgan Von Essen, Metro Link Naruki Aruga, PFU
Nathan Tuck, Raycer Graphics Neil Trevett, 3Dlabs
Newton Cheung, S3 Nick Triantos, NVIDIA Patrick Brown, Intel Paul Jensen, 3dfx
Paul Keller, NVIDIA Paul Martz, HP Paula Womack, 3dfx
Peter Doenges, Evans & Sutherland Peter Graffagnino, Apple
Phil Huxley, 3Dlabs Ralf Biermann, Elsa AG Randi Rost, 3Dlabs Renee Rashid, Micron Rich Johnson, HP Richard Pimentel, PTC Richard Schlein, Apple Rick Hammerstone, ATI Rik Faith, VA Linux Rob Glidden, Sun
Rob Wheeler, 3dfx
Shari Petersen, Rendition Shawn Hopwood, SGI
Steve Glickman, Silicon Magic Steve McGuigan, SGI
Steve Wright, Microsoft Stuart Anderson, Metro Link T. C. Zhao, MERL
Teri Morrison, HP
Thomas Fox, IBM
Version 2.0 - October 22, 2004
F.10. ACKNOWLEDGEMENTS |
327 |
Tim Kelley, Real 3D
Tom Frisinger, ATI
Victor Vedovato, Micron
Vikram Simha, MERL
Yanjun Zhang, Sun
Zahid Hussain, TI
Version 2.0 - October 22, 2004