`Graphics System:
`A Specification
`(Version 1.4)
`
`Mark Segal
`Kurt Akeley
`
`Editor (version 1.1): Chris Frazier
`Editor (versions 1.2, 1.2.1, 1.3, 1.4): Jon Leech
`
`LG Ex. 1009, pg 1
`
`LG Ex. 1009
`LG v. ATI
`IPR2017-01225
`
`
`
`Copyright c(cid:13) 1992-2002 Silicon Graphics, Inc.
`
`This document contains unpublished information of
`Silicon Graphics, Inc.
`
`This document is protected by copyright, and contains information proprietary to
`Silicon Graphics, Inc. Any copying, adaptation, distribution, public performance,
`or public display of this document without the express written consent of Silicon
`Graphics, Inc.
`is strictly prohibited. The receipt or possession of this document
`does not convey any rights to reproduce, disclose, or distribute its contents, or to
`manufacture, use, or sell anything that it may describe, in whole or in part.
`
`U.S. Government Restricted Rights Legend
`
`Use, duplication, or disclosure by the Government is subject to restrictions set forth
`in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights in Technical Data
`and Computer Software clause at DFARS 252.227-7013 and/or in similar or succes-
`sor clauses in the FAR or the DOD or NASA FAR Supplement. Unpublished rights
`reserved under the copyright laws of the United States. Contractor/manufacturer is
`Silicon Graphics, Inc., 1600 Amphitheatre Parkway, Mountain View, CA 94043.
`
`OpenGL is a registered trademark of Silicon Graphics, Inc.
`Unix is a registered trademark of The Open Group.
`The ”X” device and X Windows System are trademarks of
`The Open Group.
`
`LG Ex. 1009, pg 2
`
`
`
`Contents
`
`1 Introduction
`. . . . . . . . . . . . . . . . . .
`1.1 Formatting of Optional Features
`1.2 What is the OpenGL Graphics System?
`. . . . . . . . . . . . . .
`1.3 Programmer’s View of OpenGL . . . . . . . . . . . . . . . . . .
`1.4
`Implementor’s View of OpenGL . . . . . . . . . . . . . . . . . .
`1.5 Our View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`
`2 OpenGL Operation
`2.1 OpenGL Fundamentals . . . . . . . . . . . . . . . . . . . . . . .
`2.1.1
`Floating-Point Computation . . . . . . . . . . . . . . . .
`2.2 GL State .
`. .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . .
`2.3 GL Command Syntax . . . . . . . . . . . . . . . . . . . . . . . .
`2.4 Basic GL Operation . .
`. . . . . . . . . . . . . . . . . . . . . . .
`2.5 GL Errors . .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . .
`2.6 Begin/End Paradigm . . . . . . . . . . . . . . . . . . . . . . . .
`2.6.1 Begin and End Objects . . . . . . . . . . . . . . . . . . .
`2.6.2
`Polygon Edges . . . . . . . . . . . . . . . . . . . . . . .
`2.6.3 GL Commands within Begin/End .
`. . . . . . . . . . . .
`2.7 Vertex Specification .
`. . . . . . . . . . . . . . . . . . . . . . . .
`2.8 Vertex Arrays .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . .
`2.9 Rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`2.10 Coordinate Transformations
`. . . . . . . . . . . . . . . . . . . .
`2.10.1 Controlling the Viewport . . . . . . . . . . . . . . . . . .
`2.10.2 Matrices .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . .
`2.10.3 Normal Transformation . . . . . . . . . . . . . . . . . . .
`2.10.4 Generating Texture Coordinates . . . . . . . . . . . . . .
`2.11 Clipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`2.12 Current Raster Position . . . . . . . . . . . . . . . . . . . . . . .
`2.13 Colors and Coloring . .
`. . . . . . . . . . . . . . . . . . . . . . .
`
`1
`1
`1
`2
`2
`3
`
`4
`4
`6
`6
`7
`10
`11
`12
`13
`18
`19
`19
`23
`30
`31
`32
`33
`38
`40
`42
`44
`47
`
`i
`
`LG Ex. 1009, pg 3
`
`
`
`ii
`
`CONTENTS
`
`2.13.1 Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . .
`2.13.2 Lighting Parameter Specification . . . . . . . . . . . . . .
`2.13.3 ColorMaterial
`.
`. . . . . . . . . . . . . . . . . . . . . .
`2.13.4 Lighting State . . . . . . . . . . . . . . . . . . . . . . . .
`2.13.5 Color Index Lighting . . . . . . . . . . . . . . . . . . . .
`2.13.6 Clamping or Masking . . . . . . . . . . . . . . . . . . .
`2.13.7 Flatshading . . . . . . . . . . . . . . . . . . . . . . . . .
`2.13.8 Color and Texture Coordinate Clipping . . . . . . . . . .
`2.13.9 Final Color Processing . . . . . . . . . . . . . . . . . . .
`
`48
`53
`54
`57
`57
`58
`58
`59
`60
`
`61
`3 Rasterization
`63
`3.1
`Invariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`63
`3.2 Antialiasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`64
`3.2.1 Multisampling . . . . . . . . . . . . . . . . . . . . . . .
`66
`3.3 Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`67
`3.3.1 Basic Point Rasterization . . . . . . . . . . . . . . . . . .
`70
`3.3.2
`Point Rasterization State . . . . . . . . . . . . . . . . . .
`70
`3.3.3
`Point Multisample Rasterization . . . . . . . . . . . . . .
`70
`3.4 Line Segments
`. . . . . . . . . . . . . . . . . . . . . . . . . . .
`71
`3.4.1 Basic Line Segment Rasterization . . . . . . . . . . . . .
`73
`3.4.2 Other Line Segment Features . . . . . . . . . . . . . . . .
`76
`3.4.3 Line Rasterization State
`. . . . . . . . . . . . . . . . . .
`76
`3.4.4 Line Multisample Rasterization . . . . . . . . . . . . . .
`77
`3.5 Polygons
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`77
`3.5.1 Basic Polygon Rasterization . . . . . . . . . . . . . . . .
`79
`3.5.2
`Stippling . . . . . . . . . . . . . . . . . . . . . . . . . .
`80
`3.5.3 Antialiasing . . . . . . . . . . . . . . . . . . . . . . . . .
`80
`3.5.4 Options Controlling Polygon Rasterization . . . . . . . .
`81
`3.5.5 Depth Offset
`. . . . . . . . . . . . . . . . . . . . . . . .
`82
`3.5.6
`Polygon Multisample Rasterization . . . . . . . . . . . .
`83
`3.5.7
`Polygon Rasterization State
`. . . . . . . . . . . . . . . .
`83
`3.6 Pixel Rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . .
`83
`3.6.1
`Pixel Storage Modes . . . . . . . . . . . . . . . . . . . .
`84
`3.6.2 The Imaging Subset
`. . . . . . . . . . . . . . . . . . . .
`85
`3.6.3
`Pixel Transfer Modes . . . . . . . . . . . . . . . . . . . .
`95
`3.6.4 Rasterization of Pixel Rectangles
`. . . . . . . . . . . . .
`3.6.5
`Pixel Transfer Operations
`. . . . . . . . . . . . . . . . . 106
`3.6.6
`Pixel Rectangle Multisample Rasterization . . . . . . . . 116
`3.7 Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
`3.8 Texturing .
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 4
`
`
`
`CONTENTS
`
`iii
`
`3.8.1 Texture Image Specification . . . . . . . . . . . . . . . . 119
`3.8.2 Alternate Texture Image Specification Commands
`. . . . 128
`3.8.3 Compressed Texture Images . . . . . . . . . . . . . . . . 132
`3.8.4 Texture Parameters . . . . . . . . . . . . . . . . . . . . . 135
`3.8.5 Depth Component Textures
`. . . . . . . . . . . . . . . . 136
`3.8.6 Cube Map Texture Selection . . . . . . . . . . . . . . . . 136
`3.8.7 Texture Wrap Modes . . . . . . . . . . . . . . . . . . . . 138
`3.8.8 Texture Minification . . . . . . . . . . . . . . . . . . . . 140
`3.8.9 Texture Magnification . . . . . . . . . . . . . . . . . . . 146
`3.8.10 Texture Completeness
`. . . . . . . . . . . . . . . . . . . 146
`3.8.11 Texture State and Proxy State
`. . . . . . . . . . . . . . . 148
`3.8.12 Texture Objects . . . . . . . . . . . . . . . . . . . . . . . 149
`3.8.13 Texture Environments and Texture Functions . . . . . . . 152
`3.8.14 Texture Comparison Modes
`. . . . . . . . . . . . . . . . 157
`3.8.15 Texture Application . . . . . . . . . . . . . . . . . . . . . 158
`3.9 Color Sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
`3.10 Fog .
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
`3.11 Antialiasing Application . . . . . . . . . . . . . . . . . . . . . . 162
`3.12 Multisample Point Fade . . . . . . . . . . . . . . . . . . . . . . . 162
`
`163
`4 Per-Fragment Operations and the Framebuffer
`4.1 Per-Fragment Operations . . . . . . . . . . . . . . . . . . . . . . 164
`4.1.1
`Pixel Ownership Test . . . . . . . . . . . . . . . . . . . . 164
`4.1.2
`Scissor Test . . . . . . . . . . . . . . . . . . . . . . . . . 165
`4.1.3 Multisample Fragment Operations . . . . . . . . . . . . . 165
`4.1.4 Alpha Test
`. . . . . . . . . . . . . . . . . . . . . . . . . 166
`4.1.5
`Stencil Test
`.
`. . . . . . . . . . . . . . . . . . . . . . . . 167
`4.1.6 Depth Buffer Test . . . . . . . . . . . . . . . . . . . . . . 168
`4.1.7 Blending . . . . . . . . . . . . . . . . . . . . . . . . . . 169
`4.1.8 Dithering . .
`. . . . . . . . . . . . . . . . . . . . . . . . 172
`4.1.9 Logical Operation . . . . . . . . . . . . . . . . . . . . . 172
`4.1.10 Additional Multisample Fragment Operations . . . . . . . 174
`4.2 Whole Framebuffer Operations . . . . . . . . . . . . . . . . . . . 174
`4.2.1
`Selecting a Buffer for Writing . . . . . . . . . . . . . . . 175
`4.2.2
`Fine Control of Buffer Updates
`. . . . . . . . . . . . . . 176
`4.2.3 Clearing the Buffers
`. . . . . . . . . . . . . . . . . . . . 177
`4.2.4 The Accumulation Buffer
`. . . . . . . . . . . . . . . . . 179
`4.3 Drawing, Reading, and Copying Pixels . . . . . . . . . . . . . . . 180
`4.3.1 Writing to the Stencil Buffer . . . . . . . . . . . . . . . . 180
`4.3.2 Reading Pixels . . . . . . . . . . . . . . . . . . . . . . . 180
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 5
`
`
`
`iv
`
`CONTENTS
`
`4.3.3 Copying Pixels . . . . . . . . . . . . . . . . . . . . . . . 184
`4.3.4
`Pixel Draw/Read State . . . . . . . . . . . . . . . . . . . 187
`
`188
`5 Special Functions
`5.1 Evaluators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
`5.2 Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
`5.3 Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
`5.4 Display Lists
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
`5.5 Flush and Finish . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
`5.6 Hints .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
`
`204
`6 State and State Requests
`6.1 Querying GL State . . . . . . . . . . . . . . . . . . . . . . . . . 204
`6.1.1
`Simple Queries . . . . . . . . . . . . . . . . . . . . . . . 204
`6.1.2 Data Conversions . . . . . . . . . . . . . . . . . . . . . . 205
`6.1.3 Enumerated Queries
`. . . . . . . . . . . . . . . . . . . . 206
`6.1.4 Texture Queries . . . . . . . . . . . . . . . . . . . . . . . 208
`6.1.5
`Stipple Query . . . . . . . . . . . . . . . . . . . . . . . . 209
`6.1.6 Color Matrix Query . . . . . . . . . . . . . . . . . . . . . 210
`6.1.7 Color Table Query . . . . . . . . . . . . . . . . . . . . . 210
`6.1.8 Convolution Query . . . . . . . . . . . . . . . . . . . . . 211
`6.1.9 Histogram Query . . . . . . . . . . . . . . . . . . . . . . 211
`6.1.10 Minmax Query . . . . . . . . . . . . . . . . . . . . . . . 212
`6.1.11 Pointer and String Queries . . . . . . . . . . . . . . . . . 213
`6.1.12 Saving and Restoring State . . . . . . . . . . . . . . . . . 214
`6.2 State Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
`
`247
`A Invariance
`A.1 Repeatability . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
`A.2 Multi-pass Algorithms
`. . . . . . . . . . . . . . . . . . . . . . . 248
`A.3 Invariance Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
`A.4 What All This Means . . . . . . . . . . . . . . . . . . . . . . . . 250
`
`B Corollaries
`
`251
`
`254
`C Version 1.1
`C.1 Vertex Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
`C.2 Polygon Offset
`. . . . . . . . . . . . . . . . . . . . . . . . . . . 255
`C.3 Logical Operation . . . . . . . . . . . . . . . . . . . . . . . . . . 255
`C.4 Texture Image Formats . . . . . . . . . . . . . . . . . . . . . . . 255
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 6
`
`
`
`CONTENTS
`
`v
`
`C.5 Texture Replace Environment . . . . . . . . . . . . . . . . . . . . 255
`C.6 Texture Proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
`C.7 Copy Texture and Subtexture . . . . . . . . . . . . . . . . . . . . 256
`C.8 Texture Objects .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . . 256
`C.9 Other Changes
`. . . . . . . . . . . . . . . . . . . . . . . . . . . 256
`C.10 Acknowledgements .
`. . . . . . . . . . . . . . . . . . . . . . . . 257
`
`259
`D Version 1.2
`D.1 Three-Dimensional Texturing . . . . . . . . . . . . . . . . . . . . 259
`D.2 BGRA Pixel Formats . . . . . . . . . . . . . . . . . . . . . . . . 259
`D.3 Packed Pixel Formats . . . . . . . . . . . . . . . . . . . . . . . . 260
`D.4 Normal Rescaling . .
`. . . . . . . . . . . . . . . . . . . . . . . . 260
`D.5 Separate Specular Color
`. . . . . . . . . . . . . . . . . . . . . . 260
`D.6 Texture Coordinate Edge Clamping . . . . . . . . . . . . . . . . 260
`D.7 Texture Level of Detail Control . . . . . . . . . . . . . . . . . . . 261
`D.8 Vertex Array Draw Element Range . . . . . . . . . . . . . . . . . 261
`D.9 Imaging Subset
`. . . . . . . . . . . . . . . . . . . . . . . . . . . 261
`D.9.1 Color Tables
`.
`. . . . . . . . . . . . . . . . . . . . . . . 261
`D.9.2 Convolution . . . . . . . . . . . . . . . . . . . . . . . . . 262
`D.9.3 Color Matrix . . . . . . . . . . . . . . . . . . . . . . . . 262
`D.9.4 Pixel Pipeline Statistics . . . . . . . . . . . . . . . . . . . 263
`D.9.5 Constant Blend Color . . . . . . . . . . . . . . . . . . . . 263
`D.9.6 New Blending Equations . . . . . . . . . . . . . . . . . . 263
`D.10 Acknowledgements .
`. . . . . . . . . . . . . . . . . . . . . . . . 263
`
`E Version 1.2.1
`
`267
`
`268
`F Version 1.3
`F.1 Compressed Textures . . . . . . . . . . . . . . . . . . . . . . . . 268
`F.2 Cube Map Textures . .
`. . . . . . . . . . . . . . . . . . . . . . . 268
`F.3 Multisample . .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . 269
`F.4 Multitexture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
`F.5 Texture Add Environment Mode . . . . . . . . . . . . . . . . . . 270
`F.6 Texture Combine Environment Mode
`. . . . . . . . . . . . . . . 270
`F.7 Texture Dot3 Environment Mode . . . . . . . . . . . . . . . . . . 270
`F.8 Texture Border Clamp . . . . . . . . . . . . . . . . . . . . . . . 270
`F.9 Transpose Matrix . .
`. . . . . . . . . . . . . . . . . . . . . . . . 271
`F.10 Acknowledgements .
`. . . . . . . . . . . . . . . . . . . . . . . . 271
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 7
`
`
`
`vi
`
`CONTENTS
`
`276
`G Version 1.4
`G.1 Automatic Mipmap Generation . . . . . . . . . . . . . . . . . . . 276
`G.2 Blend Squaring . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
`G.3 Changes to the Imaging Subset . . . . . . . . . . . . . . . . . . . 277
`G.4 Depth Textures and Shadows . . . . . . . . . . . . . . . . . . . . 277
`G.5 Fog Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
`G.6 Multiple Draw Arrays . . . . . . . . . . . . . . . . . . . . . . . . 277
`G.7 Point Parameters
`. . . . . . . . . . . . . . . . . . . . . . . . . . 278
`G.8 Secondary Color
`. . . . . . . . . . . . . . . . . . . . . . . . . . 278
`G.9 Separate Blend Functions . . . . . . . . . . . . . . . . . . . . . . 278
`G.10 Stencil Wrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
`G.11 Texture Crossbar Environment Mode . . . . . . . . . . . . . . . . 278
`G.12 Texture LOD Bias . . . . . . . . . . . . . . . . . . . . . . . . . . 279
`G.13 Texture Mirrored Repeat
`. . . . . . . . . . . . . . . . . . . . . . 279
`G.14 Window Raster Position . . . . . . . . . . . . . . . . . . . . . . 279
`G.15 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . 279
`
`282
`H ARB Extensions
`H.1 Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . 282
`H.2 Promoting Extensions to Core Features
`. . . . . . . . . . . . . . 283
`H.3 Multitexture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
`H.4 Transpose Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . 283
`H.5 Multisample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
`H.6 Texture Add Environment Mode . . . . . . . . . . . . . . . . . . 283
`H.7 Cube Map Textures . . . . . . . . . . . . . . . . . . . . . . . . . 284
`H.8 Compressed Textures . . . . . . . . . . . . . . . . . . . . . . . . 284
`H.9 Texture Border Clamp . . . . . . . . . . . . . . . . . . . . . . . 284
`H.10 Point Parameters
`. . . . . . . . . . . . . . . . . . . . . . . . . . 284
`H.11 Vertex Blend . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
`H.12 Matrix Palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
`H.13 Texture Combine Environment Mode
`. . . . . . . . . . . . . . . 285
`H.14 Texture Crossbar Environment Mode . . . . . . . . . . . . . . . . 285
`H.15 Texture Dot3 Environment Mode . . . . . . . . . . . . . . . . . . 285
`H.16 Texture Mirrored Repeat
`. . . . . . . . . . . . . . . . . . . . . . 285
`H.17 Depth Texture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
`H.18 Shadow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
`H.19 Shadow Ambient
`. . . . . . . . . . . . . . . . . . . . . . . . . . 285
`H.20 Window Raster Position . . . . . . . . . . . . . . . . . . . . . . 286
`H.21 Vertex Programming . . . . . . . . . . . . . . . . . . . . . . . . 286
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 8
`
`
`
`CONTENTS
`
`Index of OpenGL Commands
`
`vii
`
`287
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 9
`
`
`
`List of Figures
`
`2.1 Block diagram of the GL. . . . . . . . . . . . . . . . . . . . . . .
`2.2 Creation of a processed vertex from a transformed vertex and cur-
`rent values.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
`2.3 Primitive assembly and processing. . . . . . . . . . . . . . . . . .
`2.4 Triangle strips, fans, and independent triangles.
`. . . . . . . . . .
`2.5 Quadrilateral strips and independent quadrilaterals.
`. . . . . . . .
`2.6 Vertex transformation sequence.
`. . . . . . . . . . . . . . . . . .
`2.7 Current raster position.
`. . . . . . . . . . . . . . . . . . . . . . .
`2.8 Processing of RGBA colors.
`. . . . . . . . . . . . . . . . . . . .
`2.9 Processing of color indices. . . . . . . . . . . . . . . . . . . . . .
`2.10 ColorMaterial operation.
`. . . . . . . . . . . . . . . . . . . . . .
`
`10
`
`13
`13
`16
`17
`31
`45
`47
`47
`54
`
`61
`. . . . . . . . . . . . . . . . . . . . . . . . . . . .
`3.1 Rasterization.
`67
`3.2 Rasterization of non-antialiased wide points. . . . . . . . . . . . .
`68
`3.3 Rasterization of antialiased wide points.
`. . . . . . . . . . . . . .
`71
`3.4 Visualization of Bresenham’s algorithm.
`. . . . . . . . . . . . . .
`74
`3.5 Rasterization of non-antialiased wide lines.
`. . . . . . . . . . . .
`75
`3.6 The region used in rasterizing an antialiased line segment.
`. . . .
`3.7 Operation of DrawPixels.
`95
`. . . . . . . . . . . . . . . . . . . . .
`99
`3.8 Selecting a subimage from an image . . . . . . . . . . . . . . . .
`3.9 A bitmap and its associated parameters.
`. . . . . . . . . . . . . . 117
`3.10 A texture image and the coordinates used to access it.
`. . . . . . . 128
`3.11 Multitexture pipeline. . . . . . . . . . . . . . . . . . . . . . . . . 159
`
`. . . . . . . . . . . . . . . . . . . . . . 164
`4.1 Per-fragment operations.
`4.2 Operation of ReadPixels. . . . . . . . . . . . . . . . . . . . . . . 180
`4.3 Operation of CopyPixels. . . . . . . . . . . . . . . . . . . . . . . 184
`
`5.1 Map Evaluation. . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
`5.2 Feedback syntax.
`. . . . . . . . . . . . . . . . . . . . . . . . . . 199
`
`viii
`
`LG Ex. 1009, pg 10
`
`
`
`List of Tables
`
`. . . . . . . . . . . . . . . . . . . . . . .
`2.1 GL command suffixes .
`. . . . . . . . . . . . . . . . . . . . . . .
`2.2 GL data types .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . .
`2.3 Summary of GL errors
`2.4 Vertex array sizes (values per vertex) and data types . . . . . . . .
`2.5 Variables that direct the execution of InterleavedArrays. . . . . .
`2.6 Component conversions . . . . . . . . . . . . . . . . . . . . . . .
`2.7 Summary of lighting parameters. . . . . . . . . . . . . . . . . . .
`2.8 Correspondence of lighting parameter symbols to names.
`. . . . .
`2.9 Polygon flatshading color selection.
`. . . . . . . . . . . . . . . .
`
`8
`9
`12
`24
`29
`49
`50
`55
`59
`
`3.1 PixelStore parameters.
`84
`. . . . . . . . . . . . . . . . . . . . . . .
`3.2 PixelTransfer parameters.
`86
`. . . . . . . . . . . . . . . . . . . . .
`3.3 PixelMap parameters.
`87
`. . . . . . . . . . . . . . . . . . . . . . .
`88
`3.4 Color table names.
`. . . . . . . . . . . . . . . . . . . . . . . . .
`3.5 DrawPixels and ReadPixels types. . . . . . . . . . . . . . . . . .
`97
`3.6 DrawPixels and ReadPixels formats.
`98
`. . . . . . . . . . . . . . .
`99
`3.7 Swap Bytes bit ordering.
`. . . . . . . . . . . . . . . . . . . . . .
`3.8 Packed pixel formats.
`. . . . . . . . . . . . . . . . . . . . . . . . 101
`3.9 UNSIGNED BYTE formats. Bit numbers are indicated for each com-
`ponent.
`. . . .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . 101
`3.10 UNSIGNED SHORT formats . . . . . . . . . . . . . . . . . . . . . 102
`3.11 UNSIGNED INT formats . . . . . . . . . . . . . . . . . . . . . . . 103
`3.12 Packed pixel field assignments. . . . . . . . . . . . . . . . . . . . 104
`3.13 Color table lookup.
`. .
`. . . . . . . . . . . . . . . . . . . . . . . 109
`3.14 Computation of filtered color components. . . . . . . . . . . . . . 110
`3.15 Conversion from RGBA and depth pixel components to internal
`texture, table, or filter components. . . . . . . . . . . . . . . . . . 121
`3.16 Correspondence of sized internal formats to base internal formats.
`122
`3.17 Specific compressed internal formats.
`. . . . . . . . . . . . . . . 123
`
`ix
`
`LG Ex. 1009, pg 11
`
`
`
`x
`
`LIST OF TABLES
`
`. . . . . . . . . . . . . . . 123
`3.18 Generic compressed internal formats.
`. . . . . . . . . . . . . . . . 137
`3.19 Texture parameters and their values.
`3.20 Selection of cube map images.
`. . . . . . . . . . . . . . . . . . . 138
`3.21 Correspondence of filtered texture components.
`. . . . . . . . . . 153
`3.22 Texture functions REPLACE, MODULATE, and DECAL . . . . . . . . 154
`3.23 Texture functions BLEND and ADD.
`. . . . . . . . . . . . . . . . . 154
`3.24 COMBINE texture functions. . . . . . . . . . . . . . . . . . . . . . 155
`3.25 Arguments for COMBINE RGB functions.
`. . . . . . . . . . . . . . 156
`3.26 Arguments for COMBINE ALPHA functions.
`. . . . . . . . . . . . 156
`
`. . . . . . . . . . . . . . . . . . . . . . . . . 171
`4.1 Blending functions.
`4.2 Arguments to LogicOp and their corresponding operations. . . . . 173
`4.3 Arguments to DrawBuffer and the buffers that they indicate.
`. . . 175
`4.4 PixelStore parameters.
`. . . . . . . . . . . . . . . . . . . . . . . 182
`4.5 ReadPixels index masks.
`. . . . . . . . . . . . . . . . . . . . . . 184
`4.6 ReadPixels GL data types and reversed component conversion for-
`mulas.
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
`
`5.1 Values specified by the target to Map1.
`. . . . . . . . . . . . . . 189
`5.2 Correspondence of feedback type to number of values per vertex. . 198
`
`. . . . . . . . . . . . . . . 209
`6.1 Texture, table, and filter return values.
`6.2 Attribute groups . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
`6.3 State variable types . . . . . . . . . . . . . . . . . . . . . . . . . 217
`6.4 GL Internal begin-end state variables (inaccessible) . . . . . . . . 219
`6.5 Current Values and Associated Data . . . . . . . . . . . . . . . . 220
`6.6 Vertex Array Data . . . . . . . . . . . . . . . . . . . . . . . . . . 221
`6.7 Vertex Array Data (cont.) . . . . . . . . . . . . . . . . . . . . . . 222
`6.8 Transformation state
`. . . . . . . . . . . . . . . . . . . . . . . . 223
`6.9 Coloring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
`6.10 Lighting (see also Table 2.7 for defaults) . . . . . . . . . . . . . . 225
`6.11 Lighting (cont.) . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
`6.12 Rasterization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
`6.13 Multisampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
`6.14 Textures (state per texture unit and binding point) . . . . . . . . . 229
`6.15 Textures (state per texture object) . . . . . . . . . . . . . . . . . . 230
`6.16 Textures (state per texture image) . . . . . . . . . . . . . . . . . . 231
`6.17 Texture Environment and Generation . . . . . . . . . . . . . . . . 232
`6.18 Pixel Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
`6.19 Framebuffer Control
`. . . . . . . . . . . . . . . . . . . . . . . . 234
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 12
`
`
`
`LIST OF TABLES
`
`xi
`
`. . . . . . . . . . . . . . . . . . . . . . . . 235
`. .
`. .
`. .
`6.20 Pixels . .
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
`6.21 Pixels (cont.)
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
`6.22 Pixels (cont.)
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
`6.23 Pixels (cont.)
`. . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
`6.24 Pixels (cont.)
`6.25 Evaluators (GetMap takes a map name) . . . . . . . . . . . . . . 240
`6.26 Hints .
`. .
`. .
`. .
`. .
`. . . . . . . . . . . . . . . . . . . . . . . . 241
`6.27 Implementation Dependent Values . . . . . . . . . . . . . . . . . 242
`6.28 Implementation Dependent Values (cont.)
`. . . . . . . . . . . . . 243
`6.29 Implementation Dependent Values (cont.)
`. . . . . . . . . . . . . 244
`6.30 Implementation Dependent Pixel Depths . . . . . . . . . . . . . . 245
`6.31 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 13
`
`
`
`Chapter 1
`
`Introduction
`
`This document describes the OpenGL graphics system: what it is, how it acts, and
`what is required to implement it. We assume that the reader has at least a rudi-
`mentary understanding of computer graphics. This means familiarity with the es-
`sentials of computer graphics algorithms as well as familiarity with basic graphics
`hardware and associated terms.
`
`1.1 Formatting of Optional Features
`
`Starting with version 1.2 of OpenGL, some features in the specification are consid-
`ered optional; an OpenGL implementation may or may not choose to provide them
`(see section 3.6.2).
`Portions of the specification which are optional are so described where the
`optional features are first defined (see section 3.6.2). State table entries which are
`optional are typeset against a gray background .
`
`1.2 What is the OpenGL Graphics System?
`
`OpenGL (for “Open Graphics Library”) is a software interface to graphics hard-
`ware. The interface consists of a set of several hundred procedures and functions
`that allow a programmer to specify the objects and operations involved in produc-
`ing high-quality graphical images, specifically color images of three-dimensional
`objects.
`Most of OpenGL requires that the graphics hardware contain a framebuffer.
`Many OpenGL calls pertain to drawing objects such as points, lines, polygons, and
`bitmaps, but the way that some of this drawing occurs (such as when antialiasing
`
`1
`
`LG Ex. 1009, pg 14
`
`
`
`2
`
`CHAPTER 1. INTRODUCTION
`
`or texturing is enabled) relies on the existence of a framebuffer. Further, some of
`OpenGL is specifically concerned with framebuffer manipulation.
`
`1.3 Programmer’s View of OpenGL
`
`To the programmer, OpenGL is a set of commands that allow the specification of
`geometric objects in two or three dimensions, together with commands that control
`how these objects are rendered into the framebuffer. For the most part, OpenGL
`provides an immediate-mode interface, meaning that specifying an object causes it
`to be drawn.
`A typical program that uses OpenGL begins with calls to open a window into
`the framebuffer into which the program will draw. Then, calls are made to allocate
`a GL context and associate it with the window. Once a GL context is allocated,
`the programmer is free to issue OpenGL commands. Some calls are used to draw
`simple geometric objects (i.e. points, line segments, and polygons), while others
`affect the rendering of these primitives including how they are lit or colored and
`how they are mapped from the user’s two- or three-dimensional model space to
`the two-dimensional screen. There are also calls to effect direct control of the
`framebuffer, such as reading and writing pixels.
`
`1.4 Implementor’s View of OpenGL
`
`To the implementor, OpenGL is a set of commands that affect the operation of
`graphics hardware. If the hardware consists only of an addressable framebuffer,
`then OpenGL must be implemented almost entirely on the host CPU. More typi-
`cally, the graphics hardware may comprise varying degrees of graphics accelera-
`tion, from a raster subsystem capable of rendering two-dimensional lines and poly-
`gons to sophisticated floating-point processors capable of transforming and com-
`puting on geometric data. The OpenGL implementor’s task is to provide the CPU
`software interface while dividing the work for each OpenGL command between
`the CPU and the graphics hardware. This division must be tailored to the available
`graphics hardware to obtain optimum performance in carrying out OpenGL calls.
`OpenGL maintains a considerable amount of state information. This state con-
`trols how objects are drawn into the framebuffer. Some of this state is directly
`available to the user: he or she can make calls to obtain its value. Some of it, how-
`ever, is visible only by the effect it has on what is drawn. One of the main goals of
`this specification is to make OpenGL state information explicit, to elucidate how it
`changes, and to indicate what its effects are.
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 15
`
`
`
`1.5. OUR VIEW
`
`1.5 Our View
`
`3
`
`We view OpenGL as a state machine that controls a set of specific drawing oper-
`ations. This model should engender a specification that satisfies the needs of both
`programmers and implementors. It does not, however, necessarily provide a model
`for implementation. An implementation must produce results conforming to those
`produced by the specified methods, but there may be ways to carry out a particular
`computation that are more efficient than the one specified.
`
`Version 1.4 - July 24, 2002
`
`LG Ex. 1009, pg 16
`
`
`
`Chapter 2
`
`OpenGL Operation
`
`2.1 OpenGL Fundamentals
`
`OpenGL (henceforth, the “GL”) is concerned only with rendering into a frame-
`buffer (and reading values stored in that framebuffer). There is no support for
`other peripherals sometimes associated with graphics hardware, such as mice and
`keyboards. Programmers must rely on other mechanisms to obtain user input.
`The GL draws primitives subject to a number of selectable modes. Each prim-
`itive is a point, line segment, polygon, or pixel rectangle. Each mode may be
`changed independently; the setting of one does not affect the settings of others
`(although many modes may interact to determine what eventually ends up in the
`framebuffer). Modes are set, primitives specified, and other GL operations de-
`scribed by sending commands in the form of function or procedure calls.
`Primitives are defined by a group of one or more vertices. A vertex defines a
`point, an endpoint of an edge, or a corner of a polygon where two edges meet. Data
`(consisting of positional coordinates, colors, normals, and texture coordinates) are
`associated with a vertex and each vertex is processed independently, in order, and
`in the same way. The only exception to this rule is if the group of vertices must
`be clipped so that the indicated primitive fits within a specified region; in this
`case vertex data may be modified and new vertices created. The type of clipping
`depends on which primitive the group of vertices represents.
`Commands are always processed in the order in which they are received, al-
`though there may be an indeterminate delay before the effects of a command are
`realized. This means, for example, that one primitive must be drawn completely
`before any subsequent one can affect the framebuffer. It also means that queries
`and pixel read operations return state consistent with complete execution of all pre-
`viously invoked GL commands. In general, the effects of a GL command on either
`
`4
`
`LG Ex. 1009, pg 17
`
`
`
`2.1. OPENGL FUNDAMENTALS
`
`5
`
`GL modes or the framebuffer must be complete before any subsequent command
`can have any such effects.
`In the GL, data binding occurs on call. This means that data passed to a com-
`mand are interpreted when that command is received. Even if the command re-
`quires a pointer to data, those data are interpreted when the call is made, and any
`subsequent changes to the data have no effect on the GL (unless the same pointer
`is used in a subsequent command).
`The GL provides direct control over the fundamental operations of 3D and 2D
`graphics. This includes specification of such parameters as transformation matri-
`ces, lighting equation coefficients, antialiasing methods, and pixel update opera-
`tors. It does not provide a means for describing or modeling complex geometric
`objects. Another way to describe this situation is to say that the GL provides mech-
`anisms to describe how complex geometric objects are to be rendered rather than
`mec