1 ##########################################################################
3 # Copyright 2011 Jose Fonseca
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24 ##########################################################################/
27 '''Describe GL types.'''
35 GLboolean = Enum("GLboolean", [
40 GLvoid = Alias("GLvoid", Void)
41 GLbyte = Alias("GLbyte", SChar)
42 GLshort = Alias("GLshort", Short)
43 GLint = Alias("GLint", Int)
44 GLint64 = Alias("GLint64", Int64)
45 GLubyte = Alias("GLubyte", UChar)
46 GLushort = Alias("GLushort", UShort)
47 GLuint = Alias("GLuint", UInt)
48 GLuint64 = Alias("GLuint64", UInt64)
49 GLsizei = Alias("GLsizei", Int)
50 GLintptr = Alias("GLintptr", Int)
51 GLsizeiptr = Alias("GLsizeiptr", Int)
52 GLfloat = Alias("GLfloat", Float)
53 GLclampf = Alias("GLclampf", Float)
54 GLdouble = Alias("GLdouble", Double)
55 GLclampd = Alias("GLclampd", Double)
56 GLchar = Alias("GLchar", Char)
58 GLcharARB = Alias("GLcharARB", SChar)
59 GLintptrARB = Alias("GLintptrARB", Int)
60 GLsizeiptrARB = Alias("GLsizeiptrARB", Int)
61 GLhandleARB = Handle("handleARB", Alias("GLhandleARB", UInt))
62 GLhalfARB = Alias("GLhalfARB", UShort)
63 GLhalfNV = Alias("GLhalfNV", UShort)
64 GLint64EXT = Alias("GLint64EXT", Int64)
65 GLuint64EXT = Alias("GLuint64EXT", UInt64)
66 GLDEBUGPROCARB = Opaque("GLDEBUGPROCARB")
67 GLDEBUGPROCAMD = Opaque("GLDEBUGPROCAMD")
69 GLstring = String(GLchar)
70 GLstringConst = String(Const(GLchar))
71 GLstringARB = String(GLcharARB)
72 GLstringConstARB = String(Const(GLcharARB))
74 GLpointer = OpaquePointer(GLvoid)
75 GLpointerConst = OpaquePointer(Const(GLvoid))
77 GLlist = Handle("list", GLuint)
78 GLtexture = Handle("texture", GLuint)
79 GLbuffer = Handle("buffer", GLuint)
80 GLquery = Handle("query", GLuint)
81 GLfenceNV = Handle("fenceNV", GLuint)
82 GLprogram = Handle("program", GLuint)
83 GLshader = Handle("shader", GLuint)
85 # Share the same mapping table for uniform locations of both core and
86 # GL_ARB_shader_objects programs. For a combination of reasons:
88 # - all OpenGL implementations appear to alias the names for both kind of
91 # - most applications will use only one kind of shader programs;
93 # - some applications actually mix glUniformXxx calls with
94 # GL_ARB_shader_objects programs and glUniformXxxARB calls with core
95 # programs, and therefore, rely on a joint implementation.
97 # We use GLhandleARB as program key, since it is wider (void *) on MacOSX.
99 GLlocation = Handle("location", GLint, key=('program', GLhandleARB))
100 GLlocationARB = Handle("location", GLint, key=('programObj', GLhandleARB))
102 GLprogramARB = Handle("programARB", GLuint)
103 GLframebuffer = Handle("framebuffer", GLuint)
104 GLrenderbuffer = Handle("renderbuffer", GLuint)
105 GLfragmentShaderATI = Handle("fragmentShaderATI", GLuint)
106 GLarray = Handle("array", GLuint)
107 GLregion = Handle("region", GLuint)
108 GLpipeline = Handle("pipeline", GLuint)
109 GLsampler = Handle("sampler", GLuint)
110 GLfeedback = Handle("feedback", GLuint)
112 # GL mappings are pointers to linear memory regions.
114 # The map length is not always available in the function prototype, and must be
115 # reconstructed from other state.
116 GLmap = LinearPointer(GLvoid, "length")
118 GLsync = Handle("sync", IntPointer("GLsync"))
120 GLenum = Enum("GLenum", [
121 # Parameters are added later from glparams.py's parameter table
124 # Some functions take GLenum disguised as GLint, and need special treatment so
125 # that symbolic names are traced correctly.
126 GLenum_int = Alias("GLint", GLenum)
128 GLenum_mode = FakeEnum(GLenum, [
129 "GL_POINTS", # 0x0000
131 "GL_LINE_LOOP", # 0x0002
132 "GL_LINE_STRIP", # 0x0003
133 "GL_TRIANGLES", # 0x0004
134 "GL_TRIANGLE_STRIP", # 0x0005
135 "GL_TRIANGLE_FAN", # 0x0006
137 "GL_QUAD_STRIP", # 0x0008
138 "GL_POLYGON", # 0x0009
139 "GL_LINES_ADJACENCY", # 0x000A
140 "GL_LINE_STRIP_ADJACENCY", # 0x000B
141 "GL_TRIANGLES_ADJACENCY", # 0x000C
142 "GL_TRIANGLE_STRIP_ADJACENCY", # 0x000D
143 "GL_PATCHES", # 0x000E
146 GLenum_error = FakeEnum(GLenum, [
148 "GL_INVALID_ENUM", # 0x0500
149 "GL_INVALID_VALUE", # 0x0501
150 "GL_INVALID_OPERATION", # 0x0502
151 "GL_STACK_OVERFLOW", # 0x0503
152 "GL_STACK_UNDERFLOW", # 0x0504
153 "GL_OUT_OF_MEMORY", # 0x0505
154 "GL_INVALID_FRAMEBUFFER_OPERATION", # 0x0506
155 "GL_TABLE_TOO_LARGE", # 0x8031
158 GLbitfield = Alias("GLbitfield", UInt)
160 GLbitfield_attrib = Flags(GLbitfield, [
161 "GL_ALL_ATTRIB_BITS", # 0x000FFFFF
162 "GL_CURRENT_BIT", # 0x00000001
163 "GL_POINT_BIT", # 0x00000002
164 "GL_LINE_BIT", # 0x00000004
165 "GL_POLYGON_BIT", # 0x00000008
166 "GL_POLYGON_STIPPLE_BIT", # 0x00000010
167 "GL_PIXEL_MODE_BIT", # 0x00000020
168 "GL_LIGHTING_BIT", # 0x00000040
169 "GL_FOG_BIT", # 0x00000080
170 "GL_DEPTH_BUFFER_BIT", # 0x00000100
171 "GL_ACCUM_BUFFER_BIT", # 0x00000200
172 "GL_STENCIL_BUFFER_BIT", # 0x00000400
173 "GL_VIEWPORT_BIT", # 0x00000800
174 "GL_TRANSFORM_BIT", # 0x00001000
175 "GL_ENABLE_BIT", # 0x00002000
176 "GL_COLOR_BUFFER_BIT", # 0x00004000
177 "GL_HINT_BIT", # 0x00008000
178 "GL_EVAL_BIT", # 0x00010000
179 "GL_LIST_BIT", # 0x00020000
180 "GL_TEXTURE_BIT", # 0x00040000
181 "GL_SCISSOR_BIT", # 0x00080000
182 "GL_MULTISAMPLE_BIT", # 0x20000000
185 GLbitfield_client_attrib = Flags(GLbitfield, [
186 "GL_CLIENT_ALL_ATTRIB_BITS", # 0xFFFFFFFF
187 "GL_CLIENT_PIXEL_STORE_BIT", # 0x00000001
188 "GL_CLIENT_VERTEX_ARRAY_BIT", # 0x00000002
191 GLbitfield_shader = Flags(GLbitfield, [
192 "GL_ALL_SHADER_BITS", # 0xFFFFFFFF
193 "GL_VERTEX_SHADER_BIT", # 0x00000001
194 "GL_FRAGMENT_SHADER_BIT", # 0x00000002
195 "GL_GEOMETRY_SHADER_BIT", # 0x00000004
196 "GL_TESS_CONTROL_SHADER_BIT", # 0x00000008
197 "GL_TESS_EVALUATION_SHADER_BIT", # 0x00000010
200 GLbitfield_access = Flags(GLbitfield, [
201 "GL_MAP_READ_BIT", # 0x0001
202 "GL_MAP_WRITE_BIT", # 0x0002
203 "GL_MAP_INVALIDATE_RANGE_BIT", # 0x0004
204 "GL_MAP_INVALIDATE_BUFFER_BIT", # 0x0008
205 "GL_MAP_FLUSH_EXPLICIT_BIT", # 0x0010
206 "GL_MAP_UNSYNCHRONIZED_BIT", # 0x0020
209 GLbitfield_sync_flush = Flags(GLbitfield, [
210 "GL_SYNC_FLUSH_COMMANDS_BIT", # 0x00000001
213 GLbitfield_barrier = Flags(GLbitfield, [
214 "GL_ALL_BARRIER_BITS", # 0xFFFFFFFF
215 "GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT", # 0x00000001
216 "GL_ELEMENT_ARRAY_BARRIER_BIT", # 0x00000002
217 "GL_UNIFORM_BARRIER_BIT", # 0x00000004
218 "GL_TEXTURE_FETCH_BARRIER_BIT", # 0x00000008
219 "GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV", # 0x00000010
220 "GL_SHADER_IMAGE_ACCESS_BARRIER_BIT", # 0x00000020
221 "GL_COMMAND_BARRIER_BIT", # 0x00000040
222 "GL_PIXEL_BUFFER_BARRIER_BIT", # 0x00000080
223 "GL_TEXTURE_UPDATE_BARRIER_BIT", # 0x00000100
224 "GL_BUFFER_UPDATE_BARRIER_BIT", # 0x00000200
225 "GL_FRAMEBUFFER_BARRIER_BIT", # 0x00000400
226 "GL_TRANSFORM_FEEDBACK_BARRIER_BIT", # 0x00000800
227 "GL_ATOMIC_COUNTER_BARRIER_BIT", # 0x00001000