1 """Constants and enums.
2
3 @todo: Add internal formats GL_DEPTH_COMPONENT and GL_DEPTH_STENCIL to C{texture_formats}.
4
5 @author: Stephan Wenger
6 @date: 2012-02-29
7 """
8
9 import glitter.raw as _gl
10 from glitter.utils.dtypes import uint8, uint16, uint32, int8, int16, int32, float32
11 from glitter.utils.enum import Enum
12
13 texture_formats = [
14 ((uint8, 1), _gl.GL_R8UI, (_gl.GL_UNSIGNED_BYTE, _gl.GL_RED_INTEGER )),
15 ((int8, 1), _gl.GL_R8I, (_gl.GL_BYTE, _gl.GL_RED_INTEGER )),
16 ((uint16, 1), _gl.GL_R16UI, (_gl.GL_UNSIGNED_SHORT, _gl.GL_RED_INTEGER )),
17 ((int16, 1), _gl.GL_R16I, (_gl.GL_SHORT, _gl.GL_RED_INTEGER )),
18 ((uint32, 1), _gl.GL_R32UI, (_gl.GL_UNSIGNED_INT, _gl.GL_RED_INTEGER )),
19 ((int32, 1), _gl.GL_R32I, (_gl.GL_INT, _gl.GL_RED_INTEGER )),
20 ((float32, 1), _gl.GL_R32F, (_gl.GL_FLOAT, _gl.GL_RED )),
21 ((uint8, 2), _gl.GL_RG8UI, (_gl.GL_UNSIGNED_BYTE, _gl.GL_RG_INTEGER )),
22 ((int8, 2), _gl.GL_RG8I, (_gl.GL_BYTE, _gl.GL_RG_INTEGER )),
23 ((uint16, 2), _gl.GL_RG16UI, (_gl.GL_UNSIGNED_SHORT, _gl.GL_RG_INTEGER )),
24 ((int16, 2), _gl.GL_RG16I, (_gl.GL_SHORT, _gl.GL_RG_INTEGER )),
25 ((uint32, 2), _gl.GL_RG32UI, (_gl.GL_UNSIGNED_INT, _gl.GL_RG_INTEGER )),
26 ((int32, 2), _gl.GL_RG32I, (_gl.GL_INT, _gl.GL_RG_INTEGER )),
27 ((float32, 2), _gl.GL_RG32F, (_gl.GL_FLOAT, _gl.GL_RG )),
28 ((uint8, 3), _gl.GL_RGB8UI, (_gl.GL_UNSIGNED_BYTE, _gl.GL_RGB_INTEGER )),
29 ((int8, 3), _gl.GL_RGB8I, (_gl.GL_BYTE, _gl.GL_RGB_INTEGER )),
30 ((uint16, 3), _gl.GL_RGB16UI, (_gl.GL_UNSIGNED_SHORT, _gl.GL_RGB_INTEGER )),
31 ((int16, 3), _gl.GL_RGB16I, (_gl.GL_SHORT, _gl.GL_RGB_INTEGER )),
32 ((uint32, 3), _gl.GL_RGB32UI, (_gl.GL_UNSIGNED_INT, _gl.GL_RGB_INTEGER )),
33 ((int32, 3), _gl.GL_RGB32I, (_gl.GL_INT, _gl.GL_RGB_INTEGER )),
34 ((float32, 3), _gl.GL_RGB32F, (_gl.GL_FLOAT, _gl.GL_RGB )),
35 ((uint8, 4), _gl.GL_RGBA8UI, (_gl.GL_UNSIGNED_BYTE, _gl.GL_RGBA_INTEGER)),
36 ((int8, 4), _gl.GL_RGBA8I, (_gl.GL_BYTE, _gl.GL_RGBA_INTEGER)),
37 ((uint16, 4), _gl.GL_RGBA16UI, (_gl.GL_UNSIGNED_SHORT, _gl.GL_RGBA_INTEGER)),
38 ((int16, 4), _gl.GL_RGBA16I, (_gl.GL_SHORT, _gl.GL_RGBA_INTEGER)),
39 ((uint32, 4), _gl.GL_RGBA32UI, (_gl.GL_UNSIGNED_INT, _gl.GL_RGBA_INTEGER)),
40 ((int32, 4), _gl.GL_RGBA32I, (_gl.GL_INT, _gl.GL_RGBA_INTEGER)),
41 ((float32, 4), _gl.GL_RGBA32F, (_gl.GL_FLOAT, _gl.GL_RGBA )),
42 ]
43 """Mapping between C{numpy} types and OpenGL types.
44
45 First column: C{numpy} datatype, number of color channels
46 Second column: OpenGL internal format
47 Third column: OpenGL type, OpenGL format
48 """
49
50 dtype_to_gl_iformat = dict((x[0], x[1] ) for x in texture_formats)
51 gl_iformat_to_dtype = dict((x[1], x[0] ) for x in texture_formats)
52 dtype_to_gl_format = dict((x[0], x[2][1]) for x in texture_formats)
53 gl_format_to_dtype = dict((x[2][1], x[0] ) for x in texture_formats)
54 gl_iformat_to_gl_type = dict((x[1], x[2][0]) for x in texture_formats)
55
56 texture_compare_funcs = Enum(
57 LEQUAL=_gl.GL_LEQUAL,
58 GEQUAL=_gl.GL_GEQUAL,
59 LESS=_gl.GL_LESS,
60 GREATER=_gl.GL_GREATER,
61 EQUAL=_gl.GL_EQUAL,
62 NOTEQUAL=_gl.GL_NOTEQUAL,
63 ALWAYS=_gl.GL_ALWAYS,
64 NEVER=_gl.GL_NEVER,
65 )
66
67 texture_compare_modes = Enum(
68 COMPARE_REF_TO_TEXTURE=_gl.GL_COMPARE_REF_TO_TEXTURE,
69 NONE=_gl.GL_NONE,
70 )
71
72 texture_min_filters = Enum(
73 NEAREST=_gl.GL_NEAREST,
74 LINEAR=_gl.GL_LINEAR,
75 NEAREST_MIPMAP_NEAREST=_gl.GL_NEAREST_MIPMAP_NEAREST,
76 LINEAR_MIPMAP_NEAREST=_gl.GL_LINEAR_MIPMAP_NEAREST,
77 NEAREST_MIPMAP_LINEAR=_gl.GL_NEAREST_MIPMAP_LINEAR,
78 LINEAR_MIPMAP_LINEAR=_gl.GL_LINEAR_MIPMAP_LINEAR,
79 )
80
81 texture_mag_filters = Enum(
82 NEAREST=_gl.GL_NEAREST,
83 LINEAR=_gl.GL_LINEAR,
84 )
85
86 texture_swizzles = Enum(
87 RED=_gl.GL_RED,
88 GREEN=_gl.GL_GREEN,
89 BLUE=_gl.GL_BLUE,
90 ALPHA=_gl.GL_ALPHA,
91 ZERO=_gl.GL_ZERO,
92 ONE=_gl.GL_ONE,
93 )
94
95 texture_wrapmodes = Enum(
96 CLAMP_TO_EDGE=_gl.GL_CLAMP_TO_EDGE,
97 CLAMP_TO_BORDER=_gl.GL_CLAMP_TO_BORDER,
98 MIRRORED_REPEAT=_gl.GL_MIRRORED_REPEAT,
99 REPEAT=_gl.GL_REPEAT,
100 )
101
102 primitive_types = Enum(
103 POINTS=_gl.GL_POINTS,
104 LINE_STRIP=_gl.GL_LINE_STRIP,
105 LINE_LOOP=_gl.GL_LINE_LOOP,
106 LINES=_gl.GL_LINES,
107 LINE_STRIP_ADJACENCY=_gl.GL_LINE_STRIP_ADJACENCY,
108 LINES_ADJACENCY=_gl.GL_LINES_ADJACENCY,
109 TRIANGLE_STRIP=_gl.GL_TRIANGLE_STRIP,
110 TRIANGLE_FAN=_gl.GL_TRIANGLE_FAN,
111 TRIANGLES=_gl.GL_TRIANGLES,
112 TRIANGLE_STRIP_ADJACENCY=_gl.GL_TRIANGLE_STRIP_ADJACENCY,
113 TRIANGLES_ADJACENCY=_gl.GL_TRIANGLES_ADJACENCY,
114 PATCHES=_gl.GL_PATCHES,
115 )
116
117 buffer_usages = Enum(
118 STREAM_DRAW=_gl.GL_STREAM_DRAW,
119 STREAM_READ=_gl.GL_STREAM_READ,
120 STREAM_COPY=_gl.GL_STREAM_COPY,
121 STATIC_DRAW=_gl.GL_STATIC_DRAW,
122 STATIC_READ=_gl.GL_STATIC_READ,
123 STATIC_COPY=_gl.GL_STATIC_COPY,
124 DYNAMIC_DRAW=_gl.GL_DYNAMIC_DRAW,
125 DYNAMIC_READ=_gl.GL_DYNAMIC_READ,
126 DYNAMIC_COPY=_gl.GL_DYNAMIC_COPY,
127 )
128
129 buffer_dimensions_to_primitive = {1: primitive_types.POINTS, 2: primitive_types.LINES, 3: primitive_types.TRIANGLES}
130 primitive_to_buffer_dimensions = {primitive_types.POINTS: 1, primitive_types.LINES: 2, primitive_types.TRIANGLES: 3}
131
132 blend_functions = Enum(
133 ZERO=_gl.GL_ZERO,
134 ONE=_gl.GL_ONE,
135 SRC_COLOR=_gl.GL_SRC_COLOR,
136 ONE_MINUS_SRC_COLOR=_gl.GL_ONE_MINUS_SRC_COLOR,
137 DST_COLOR=_gl.GL_DST_COLOR,
138 ONE_MINUS_DST_COLOR=_gl.GL_ONE_MINUS_DST_COLOR,
139 SRC_ALPHA=_gl.GL_SRC_ALPHA,
140 ONE_MINUS_SRC_ALPHA=_gl.GL_ONE_MINUS_SRC_ALPHA,
141 DST_ALPHA=_gl.GL_DST_ALPHA,
142 ONE_MINUS_DST_ALPHA=_gl.GL_ONE_MINUS_DST_ALPHA,
143 CONSTANT_COLOR=_gl.GL_CONSTANT_COLOR,
144 ONE_MINUS_CONSTANT_COLOR=_gl.GL_ONE_MINUS_CONSTANT_COLOR,
145 CONSTANT_ALPHA=_gl.GL_CONSTANT_ALPHA,
146 ONE_MINUS_CONSTANT_ALPHA=_gl.GL_ONE_MINUS_CONSTANT_ALPHA,
147 SRC_ALPHA_SATURATE=_gl.GL_SRC_ALPHA_SATURATE,
148 )
149
150 blend_equations = Enum(
151 ADD=_gl.GL_FUNC_ADD,
152 SUBTRACT=_gl.GL_FUNC_SUBTRACT,
153 REVERSE_SUBTRACT=_gl.GL_FUNC_REVERSE_SUBTRACT,
154 MIN=_gl.GL_MIN,
155 MAX=_gl.GL_MAX,
156 )
157
158 depth_functions = Enum(
159 NEVER=_gl.GL_NEVER,
160 LESS=_gl.GL_LESS,
161 EQUAL=_gl.GL_EQUAL,
162 LEQUAL=_gl.GL_LEQUAL,
163 GREATER=_gl.GL_GREATER,
164 NOTEQUAL=_gl.GL_NOTEQUAL,
165 GEQUAL=_gl.GL_GEQUAL,
166 ALWAYS=_gl.GL_ALWAYS,
167 )
168
169 draw_buffers = Enum(
170 NONE=_gl.GL_NONE,
171 FRONT_LEFT=_gl.GL_FRONT_LEFT,
172 FRONT_RIGHT=_gl.GL_FRONT_RIGHT,
173 BACK_LEFT=_gl.GL_BACK_LEFT,
174 BACK_RIGHT=_gl.GL_BACK_RIGHT,
175 FRONT=_gl.GL_FRONT,
176 BACK=_gl.GL_BACK,
177 LEFT=_gl.GL_LEFT,
178 RIGHT=_gl.GL_RIGHT,
179 FRONT_AND_BACK=_gl.GL_FRONT_AND_BACK,
180 )
181 for key, value in _gl.__dict__.items():
182 if key.startswith("GL_COLOR_ATTACHMENT"):
183 draw_buffers._add(key[3:], value)
184
185 hints = Enum(
186 FASTEST=_gl.GL_FASTEST,
187 NICEST=_gl.GL_NICEST,
188 DONT_CARE=_gl.GL_DONT_CARE,
189 )
190
191 provoking_vertices = Enum(
192 PROVOKING=_gl.GL_PROVOKING_VERTEX,
193 FIRST=_gl.GL_FIRST_VERTEX_CONVENTION,
194 LAST=_gl.GL_LAST_VERTEX_CONVENTION,
195 UNDEFINED=_gl.GL_UNDEFINED_VERTEX,
196 )
197
198 logic_op_modes = Enum(
199 CLEAR=_gl.GL_CLEAR,
200 SET=_gl.GL_SET,
201 COPY=_gl.GL_COPY,
202 COPY_INVERTED=_gl.GL_COPY_INVERTED,
203 NOOP=_gl.GL_NOOP,
204 INVERT=_gl.GL_INVERT,
205 AND=_gl.GL_AND,
206 NAND=_gl.GL_NAND,
207 OR=_gl.GL_OR,
208 NOR=_gl.GL_NOR,
209 XOR=_gl.GL_XOR,
210 EQUIV=_gl.GL_EQUIV,
211 AND_REVERSE=_gl.GL_AND_REVERSE,
212 AND_INVERTED=_gl.GL_AND_INVERTED,
213 OR_REVERSE=_gl.GL_OR_REVERSE,
214 OR_INVERTED=_gl.GL_OR_INVERTED,
215 )
216
217 provoke_modes = Enum(
218 FIRST_VERTEX_CONVENTION=_gl.GL_FIRST_VERTEX_CONVENTION,
219 LAST_VERTEX_CONVENTION=_gl.GL_LAST_VERTEX_CONVENTION,
220 )
221
222 color_read_formats = Enum(
223 STENCIL_INDEX=_gl.GL_STENCIL_INDEX,
224 DEPTH_COMPONENT=_gl.GL_DEPTH_COMPONENT,
225 DEPTH_STENCIL=_gl.GL_DEPTH_STENCIL,
226 RED=_gl.GL_RED,
227 GREEN=_gl.GL_GREEN,
228 BLUE=_gl.GL_BLUE,
229 RGB=_gl.GL_RGB,
230 BGR=_gl.GL_BGR,
231 RGBA=_gl.GL_RGBA,
232 BGRA=_gl.GL_BGRA,
233 )
234
235 color_read_types = Enum(
236 UNSIGNED_BYTE=_gl.GL_UNSIGNED_BYTE,
237 BYTE=_gl.GL_BYTE,
238 UNSIGNED_SHORT=_gl.GL_UNSIGNED_SHORT,
239 SHORT=_gl.GL_SHORT,
240 UNSIGNED_INT=_gl.GL_UNSIGNED_INT,
241 INT=_gl.GL_INT,
242 HALF_FLOAT=_gl.GL_HALF_FLOAT,
243 FLOAT=_gl.GL_FLOAT,
244 UNSIGNED_BYTE_3_3_2=_gl.GL_UNSIGNED_BYTE_3_3_2,
245 UNSIGNED_BYTE_2_3_3_REV=_gl.GL_UNSIGNED_BYTE_2_3_3_REV,
246 UNSIGNED_SHORT_5_6_5=_gl.GL_UNSIGNED_SHORT_5_6_5,
247 UNSIGNED_SHORT_5_6_5_REV=_gl.GL_UNSIGNED_SHORT_5_6_5_REV,
248 UNSIGNED_SHORT_4_4_4_4=_gl.GL_UNSIGNED_SHORT_4_4_4_4,
249 UNSIGNED_SHORT_4_4_4_4_REV=_gl.GL_UNSIGNED_SHORT_4_4_4_4_REV,
250 UNSIGNED_SHORT_5_5_5_1=_gl.GL_UNSIGNED_SHORT_5_5_5_1,
251 UNSIGNED_SHORT_1_5_5_5_REV=_gl.GL_UNSIGNED_SHORT_1_5_5_5_REV,
252 UNSIGNED_INT_8_8_8_8=_gl.GL_UNSIGNED_INT_8_8_8_8,
253 UNSIGNED_INT_8_8_8_8_REV=_gl.GL_UNSIGNED_INT_8_8_8_8_REV,
254 UNSIGNED_INT_10_10_10_2=_gl.GL_UNSIGNED_INT_10_10_10_2,
255 UNSIGNED_INT_2_10_10_10_REV=_gl.GL_UNSIGNED_INT_2_10_10_10_REV,
256 UNSIGNED_INT_24_8=_gl.GL_UNSIGNED_INT_24_8,
257 UNSIGNED_INT_10F_11F_11F_REV=_gl.GL_UNSIGNED_INT_10F_11F_11F_REV,
258 UNSIGNED_INT_5_9_9_9_REV=_gl.GL_UNSIGNED_INT_5_9_9_9_REV,
259 FLOAT_32_UNSIGNED_INT_24_8_REV=_gl.GL_FLOAT_32_UNSIGNED_INT_24_8_REV,
260 )
261
262 read_buffers = Enum(
263 NONE=_gl.GL_NONE,
264 FRONT_LEFT=_gl.GL_FRONT_LEFT,
265 FRONT_RIGHT=_gl.GL_FRONT_RIGHT,
266 BACK_LEFT=_gl.GL_BACK_LEFT,
267 BACK_RIGHT=_gl.GL_BACK_RIGHT,
268 FRONT=_gl.GL_FRONT,
269 BACK=_gl.GL_BACK,
270 LEFT=_gl.GL_LEFT,
271 RIGHT=_gl.GL_RIGHT,
272 )
273 for key, value in _gl.__dict__.items():
274 if key.startswith("GL_COLOR_ATTACHMENT"):
275 read_buffers._add(key[3:], value)
276
277 transform_feedback_buffer_modes = Enum(
278 SEPARATE_ATTRIBS=_gl.GL_SEPARATE_ATTRIBS,
279 INTERLEAVED_ATTRIBS=_gl.GL_INTERLEAVED_ATTRIBS,
280 )
281
282 client_wait_sync_returns = Enum(
283 ALREADY_SIGNALED=_gl.GL_ALREADY_SIGNALED,
284 TIMEOUT_EXPIRED=_gl.GL_TIMEOUT_EXPIRED,
285 CONDITION_SATISFIED=_gl.GL_CONDITION_SATISFIED,
286 WAIT_FAILED=_gl.GL_WAIT_FAILED,
287 )
288
289 framebuffer_status = Enum(
290 COMPLETE=_gl.GL_FRAMEBUFFER_COMPLETE,
291 UNDEFINED=_gl.GL_FRAMEBUFFER_UNDEFINED,
292 UNSUPPORTED=_gl.GL_FRAMEBUFFER_UNSUPPORTED,
293 INCOMPLETE_ATTACHMENT=_gl.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT,
294 INCOMPLETE_MISSING_ATTACHMENT=_gl.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT,
295 INCOMPLETE_DRAW_BUFFER=_gl.GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER,
296 INCOMPLETE_READ_BUFFER=_gl.GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER,
297 INCOMPLETE_MULTISAMPLE=_gl.GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE,
298 INCOMPLETE_LAYER_TARGETS=_gl.GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS,
299 )
300
301 cull_face_modes = Enum(
302 FRONT=_gl.GL_FRONT,
303 BACK=_gl.GL_BACK,
304 FRONT_AND_BACK=_gl.GL_FRONT_AND_BACK,
305 )
306
307 front_face_modes = Enum(
308 CW=_gl.GL_CW,
309 CCW=_gl.GL_CCW,
310 )
311
312 polygon_modes = Enum(
313 POINT=_gl.GL_POINT,
314 LINE=_gl.GL_LINE,
315 FILL=_gl.GL_FILL,
316 )
317
318 __all__ = [
319 "texture_formats",
320 "dtype_to_gl_iformat",
321 "gl_iformat_to_dtype",
322 "dtype_to_gl_format",
323 "gl_format_to_dtype",
324 "gl_iformat_to_gl_type",
325 "texture_compare_funcs",
326 "texture_compare_modes",
327 "texture_min_filters",
328 "texture_mag_filters",
329 "texture_swizzles",
330 "texture_wrapmodes",
331 "primitive_types",
332 "buffer_usages",
333 "buffer_dimensions_to_primitive",
334 "primitive_to_buffer_dimensions",
335 "blend_functions",
336 "blend_equations",
337 "depth_functions",
338 "draw_buffers",
339 "hints",
340 "provoking_vertices",
341 "logic_op_modes",
342 "provoke_modes",
343 "color_read_formats",
344 "color_read_types",
345 "read_buffers",
346 "transform_feedback_buffer_modes",
347 "client_wait_sync_returns",
348 "framebuffer_status",
349 "cull_face_modes",
350 "front_face_modes",
351 "polygon_modes",
352 ]
353