The OpenGL Graphics System. A Specification (Version 3.2 (Core Profile) - July 24, 2009).pdf

(2419 KB) Pobierz
The OpenGL Graphics System:
A Specification
(Version 3.2 (Core Profile) - July 24, 2009)
Mark Segal
Kurt Akeley
Editor (version 1.1): Chris Frazier
Editor (versions 1.2-3.2): Jon Leech
Editor (version 2.0): Pat Brown
R
Copyright c 2006-2009 The Khronos Group Inc. All Rights Reserved.
This specification is protected by copyright laws and contains material proprietary
to the Khronos Group, Inc. It or any components may not be reproduced, repub-
lished, distributed, transmitted, displayed, broadcast or otherwise exploited in any
manner without the express prior written permission of Khronos Group. You may
use this specification for implementing the functionality therein, without altering or
removing any trademark, copyright or other notice from the specification, but the
receipt or possession of this specification 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.
Khronos Group grants express permission to any current Promoter, Contributor
or Adopter member of Khronos to copy and redistribute UNMODIFIED versions
of this specification in any fashion, provided that NO CHARGE is made for the
specification and the latest available update of the specification for any version
of the API is used whenever possible. Such distributed specification may be re-
formatted AS LONG AS the contents of the specification are not changed in any
way. The specification may be incorporated into a product that is sold as long as
such product includes significant independent work developed by the seller. A link
to the current version of this specification on the Khronos Group web-site should
be included whenever possible with specification distributions.
Khronos Group makes no, and expressly disclaims any, representations or war-
ranties, express or implied, regarding this specification, including, without limita-
tion, any implied warranties of merchantability or fitness for a particular purpose
or non-infringement of any intellectual property. Khronos Group makes no, and
expressly disclaims any, warranties, express or implied, regarding the correctness,
accuracy, completeness, timeliness, and reliability of the specification. Under no
circumstances will the Khronos Group, or any of its Promoters, Contributors or
Members or their respective partners, officers, directors, employees, agents or rep-
resentatives be liable for any damages, whether direct, indirect, special or conse-
quential damages for lost revenues, lost profits, or otherwise, arising from or in
connection with these materials.
Khronos is a trademark of The Khronos Group Inc. OpenGL is a registered trade-
mark, and OpenGL ES is a trademark, of Silicon Graphics International.
Contents
1
Introduction
1.1 What is the OpenGL Graphics System?
1.2 Programmer’s View of OpenGL . . . .
1.3 Implementor’s View of OpenGL . . . .
1.4 Our View . . . . . . . . . . . . . . . .
1.5 The Deprecation Model . . . . . . . . .
1.6 Companion Documents . . . . . . . . .
1.6.1 OpenGL Shading Language . .
1.6.2 Window System Bindings . . .
1
1
1
2
2
3
3
3
3
5
5
7
8
8
9
10
12
13
13
15
18
19
21
25
27
29
30
34
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 OpenGL Operation
2.1 OpenGL Fundamentals . . . . . . . . . . . . . .
2.1.1 Floating-Point Computation . . . . . . .
2.1.2 16-Bit Floating-Point Numbers . . . . .
2.1.3 Unsigned 11-Bit Floating-Point Numbers
2.1.4 Unsigned 10-Bit Floating-Point Numbers
2.1.5 Fixed-Point Data Conversions . . . . . .
2.2 GL State . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Shared Object State . . . . . . . . . . . .
2.3 GL Command Syntax . . . . . . . . . . . . . . .
2.4 Basic GL Operation . . . . . . . . . . . . . . . .
2.5 GL Errors . . . . . . . . . . . . . . . . . . . . .
2.6 Primitives and Vertices . . . . . . . . . . . . . .
2.6.1 Primitive Types . . . . . . . . . . . . . .
2.7 Vertex Specification . . . . . . . . . . . . . . . .
2.8 Vertex Arrays . . . . . . . . . . . . . . . . . . .
2.8.1 Transferring Array Elements . . . . . . .
2.8.2 Drawing Commands . . . . . . . . . . .
2.9 Buffer Objects . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
CONTENTS
2.9.1 Creating and Binding Buffer Objects . . . .
2.9.2 Creating Buffer Object Data Stores . . . . .
2.9.3 Mapping and Unmapping Buffer Data . . . .
2.9.4 Effects of Accessing Outside Buffer Bounds
2.9.5 Copying Between Buffers . . . . . . . . . .
2.9.6 Vertex Arrays in Buffer Objects . . . . . . .
2.9.7 Array Indices in Buffer Objects . . . . . . .
2.9.8 Buffer Object State . . . . . . . . . . . . . .
Vertex Array Objects . . . . . . . . . . . . . . . . .
Vertex Shaders . . . . . . . . . . . . . . . . . . . .
2.11.1 Shader Objects . . . . . . . . . . . . . . . .
2.11.2 Program Objects . . . . . . . . . . . . . . .
2.11.3 Vertex Attributes . . . . . . . . . . . . . . .
2.11.4 Uniform Variables . . . . . . . . . . . . . .
2.11.5 Samplers . . . . . . . . . . . . . . . . . . .
2.11.6 Varying Variables . . . . . . . . . . . . . . .
2.11.7 Shader Execution . . . . . . . . . . . . . . .
2.11.8 Required State . . . . . . . . . . . . . . . .
Geometry Shaders . . . . . . . . . . . . . . . . . . .
2.12.1 Geometry Shader Input Primitives . . . . . .
2.12.2 Geometry Shader Output Primitives . . . . .
2.12.3 Geometry Shader Variables . . . . . . . . . .
2.12.4 Geometry Shader Execution Environment . .
Coordinate Transformations . . . . . . . . . . . . .
2.13.1 Controlling the Viewport . . . . . . . . . . .
Asynchronous Queries . . . . . . . . . . . . . . . .
Conditional Rendering . . . . . . . . . . . . . . . .
Transform Feedback . . . . . . . . . . . . . . . . .
Primitive Queries . . . . . . . . . . . . . . . . . . .
Flatshading . . . . . . . . . . . . . . . . . . . . . .
Primitive Clipping . . . . . . . . . . . . . . . . . . .
2.19.1 Clipping Shader Varying Outputs . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ii
35
37
39
43
43
44
45
45
46
47
47
49
51
54
70
71
74
79
81
81
83
83
84
88
88
89
91
92
95
96
97
98
100
101
101
102
103
104
106
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
2.19
3 Rasterization
3.1 Discarding Primitives Before Rasterization
3.2 Invariance . . . . . . . . . . . . . . . . . .
3.3 Antialiasing . . . . . . . . . . . . . . . . .
3.3.1 Multisampling . . . . . . . . . . .
3.4 Points . . . . . . . . . . . . . . . . . . . .
3.4.1 Basic Point Rasterization . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
OpenGL 3.2 (Core Profile) - July 24, 2009
CONTENTS
3.4.2 Point Rasterization State . . . . . . . . . . . . . .
3.4.3 Point Multisample Rasterization . . . . . . . . . .
3.5 Line Segments . . . . . . . . . . . . . . . . . . . . . . .
3.5.1 Basic Line Segment Rasterization . . . . . . . . .
3.5.2 Other Line Segment Features . . . . . . . . . . . .
3.5.3 Line Rasterization State . . . . . . . . . . . . . .
3.5.4 Line Multisample Rasterization . . . . . . . . . .
3.6 Polygons . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6.1 Basic Polygon Rasterization . . . . . . . . . . . .
3.6.2 Antialiasing . . . . . . . . . . . . . . . . . . . . .
3.6.3 Options Controlling Polygon Rasterization . . . .
3.6.4 Depth Offset . . . . . . . . . . . . . . . . . . . .
3.6.5 Polygon Multisample Rasterization . . . . . . . .
3.6.6 Polygon Rasterization State . . . . . . . . . . . .
3.7 Pixel Rectangles . . . . . . . . . . . . . . . . . . . . . . .
3.7.1 Pixel Storage Modes and Pixel Buffer Objects . . .
3.7.2 Transfer of Pixel Rectangles . . . . . . . . . . . .
3.8 Texturing . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8.1 Texture Image Specification . . . . . . . . . . . .
3.8.2 Alternate Texture Image Specification Commands
3.8.3 Compressed Texture Images . . . . . . . . . . . .
3.8.4 Multisample Textures . . . . . . . . . . . . . . . .
3.8.5 Buffer Textures . . . . . . . . . . . . . . . . . . .
3.8.6 Texture Parameters . . . . . . . . . . . . . . . . .
3.8.7 Depth Component Textures . . . . . . . . . . . .
3.8.8 Cube Map Texture Selection . . . . . . . . . . . .
3.8.9 Texture Minification . . . . . . . . . . . . . . . .
3.8.10 Texture Magnification . . . . . . . . . . . . . . .
3.8.11 Combined Depth/Stencil Textures . . . . . . . . .
3.8.12 Texture Completeness . . . . . . . . . . . . . . .
3.8.13 Texture State and Proxy State . . . . . . . . . . .
3.8.14 Texture Objects . . . . . . . . . . . . . . . . . . .
3.8.15 Texture Comparison Modes . . . . . . . . . . . .
3.8.16 sRGB Texture Color Conversion . . . . . . . . . .
3.8.17 Shared Exponent Texture Color Conversion . . . .
3.9 Fragment Shaders . . . . . . . . . . . . . . . . . . . . . .
3.9.1 Shader Variables . . . . . . . . . . . . . . . . . .
3.9.2 Shader Execution . . . . . . . . . . . . . . . . . .
3.10 Antialiasing Application . . . . . . . . . . . . . . . . . .
3.11 Multisample Point Fade . . . . . . . . . . . . . . . . . . .
OpenGL 3.2 (Core Profile) - July 24, 2009
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
iii
106
107
107
107
110
110
110
111
112
114
114
115
116
117
117
117
118
130
131
143
150
154
155
157
160
160
161
170
171
171
172
174
176
177
178
178
178
179
184
184
Zgłoś jeśli naruszono regulamin