Blender V4.5
bgl.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
14
15#include <Python.h>
16
17#include "BLI_utildefines.h"
18
19#include "MEM_guardedalloc.h"
20
21#include "GPU_context.hh"
22
23#include "py_capi_utils.hh"
24
25#include <epoxy/gl.h>
26
27#include <algorithm>
28
29#include "CLG_log.h"
30
31/* Forward declare API's defines here. */
32#define USE_BGL_DEPRECATED_API
33#include "bgl.hh" /* Own include. */
34#undef USE_BGL_DEPRECATED_API
35
36static CLG_LogRef LOG = {"bgl"};
37
38/* -------------------------------------------------------------------- */
41
42#ifdef WITH_OPENGL_BACKEND
43static void report_deprecated_call(const char *function_name)
44{
45 /* Only report first 10 deprecated calls. BGL is typically used inside an handler that is
46 * triggered at refresh. */
47 static int times = 0;
48 while (times >= 10) {
49 return;
50 }
51 char message[256];
52 SNPRINTF(message,
53 "'bgl.gl%s' is deprecated and will not work on all platforms. Report or update your "
54 "script to use 'gpu' module.",
55 function_name);
56 CLOG_WARN(&LOG, "%s", message);
57 PyErr_WarnEx(PyExc_DeprecationWarning, message, 1);
58 times++;
59}
60
61static void report_deprecated_call_to_user()
62{
63 /* Only report the first deprecated usage. */
64 if (G.opengl_deprecation_usage_detected) {
65 return;
66 }
67 G.opengl_deprecation_usage_detected = true;
68 PyC_FileAndNum(&G.opengl_deprecation_usage_filename, &G.opengl_deprecation_usage_lineno);
69}
70#endif
71
73
74/* -------------------------------------------------------------------- */
77
78/* By golly George! It looks like fancy pants macro time! */
79
80/* TYPE_str is the string to pass to Py_ArgParse (for the format) */
81/* TYPE_var is the name to pass to the GL function */
82/* TYPE_ref is the pointer to pass to Py_ArgParse (to store in) */
83/* TYPE_def is the C initialization of the variable */
84
85#define void_str ""
86#define void_var(num)
87#define void_ref(num) &bgl_var##num
88#define void_def(num) char bgl_var##num
89
90#if 0
91# define buffer_str "O!"
92# define buffer_var(number) (bgl_buffer##number)->buf.asvoid
93# define buffer_ref(number) &BGL_bufferType, &bgl_buffer##number
94# define buffer_def(number) Buffer *bgl_buffer##number
95#endif
96
97/* GL Pointer fields, handled by buffer type */
98/* GLdoubleP, GLfloatP, GLintP, GLuintP, GLshortP, GLsizeiP, GLcharP */
99
100#define GLbooleanP_str "O!"
101#define GLbooleanP_var(number) (bgl_buffer##number)->buf.asvoid
102#define GLbooleanP_ref(number) &BGL_bufferType, &bgl_buffer##number
103#define GLbooleanP_def(number) Buffer *bgl_buffer##number
104
105#define GLbyteP_str "O!"
106#define GLbyteP_var(number) (bgl_buffer##number)->buf.asvoid
107#define GLbyteP_ref(number) &BGL_bufferType, &bgl_buffer##number
108#define GLbyteP_def(number) Buffer *bgl_buffer##number
109
110#define GLubyteP_str "O!"
111#define GLubyteP_var(number) (bgl_buffer##number)->buf.asvoid
112#define GLubyteP_ref(number) &BGL_bufferType, &bgl_buffer##number
113#define GLubyteP_def(number) Buffer *bgl_buffer##number
114
115#define GLintP_str "O!"
116#define GLintP_var(number) (bgl_buffer##number)->buf.asvoid
117#define GLintP_ref(number) &BGL_bufferType, &bgl_buffer##number
118#define GLintP_def(number) Buffer *bgl_buffer##number
119
120#define GLint64P_str "O!"
121#define GLint64P_var(number) (bgl_buffer##number)->buf.asvoid
122#define GLint64P_ref(number) &BGL_bufferType, &bgl_buffer##number
123#define GLint64P_def(number) Buffer *bgl_buffer##number
124
125#define GLenumP_str "O!"
126#define GLenumP_var(number) (bgl_buffer##number)->buf.asvoid
127#define GLenumP_ref(number) &BGL_bufferType, &bgl_buffer##number
128#define GLenumP_def(number) Buffer *bgl_buffer##number
129
130#define GLuintP_str "O!"
131#define GLuintP_var(number) (bgl_buffer##number)->buf.asvoid
132#define GLuintP_ref(number) &BGL_bufferType, &bgl_buffer##number
133#define GLuintP_def(number) Buffer *bgl_buffer##number
134
135#if 0
136# define GLuint64P_str "O!"
137# define GLuint64P_var(number) (bgl_buffer##number)->buf.asvoid
138# define GLuint64P_ref(number) &BGL_bufferType, &bgl_buffer##number
139# define GLuint64P_def(number) Buffer *bgl_buffer##number
140#endif
141
142#define GLshortP_str "O!"
143#define GLshortP_var(number) (bgl_buffer##number)->buf.asvoid
144#define GLshortP_ref(number) &BGL_bufferType, &bgl_buffer##number
145#define GLshortP_def(number) Buffer *bgl_buffer##number
146
147#define GLushortP_str "O!"
148#define GLushortP_var(number) (bgl_buffer##number)->buf.asvoid
149#define GLushortP_ref(number) &BGL_bufferType, &bgl_buffer##number
150#define GLushortP_def(number) Buffer *bgl_buffer##number
151
152#define GLfloatP_str "O!"
153#define GLfloatP_var(number) (bgl_buffer##number)->buf.asvoid
154#define GLfloatP_ref(number) &BGL_bufferType, &bgl_buffer##number
155#define GLfloatP_def(number) Buffer *bgl_buffer##number
156
157#define GLdoubleP_str "O!"
158#define GLdoubleP_var(number) (bgl_buffer##number)->buf.asvoid
159#define GLdoubleP_ref(number) &BGL_bufferType, &bgl_buffer##number
160#define GLdoubleP_def(number) Buffer *bgl_buffer##number
161
162#if 0
163# define GLclampfP_str "O!"
164# define GLclampfP_var(number) (bgl_buffer##number)->buf.asvoid
165# define GLclampfP_ref(number) &BGL_bufferType, &bgl_buffer##number
166# define GLclampfP_def(number) Buffer *bgl_buffer##number
167#endif
168
170 Buffer *buffer;
171 void *offset;
172};
173
174#define GLvoidP_str "O&"
175#define GLvoidP_var(number) \
176 ((bgl_buffer##number.buffer) ? (bgl_buffer##number.buffer)->buf.asvoid : \
177 (bgl_buffer##number.offset))
178#define GLvoidP_ref(number) BGL_BufferOrOffsetConverter, &bgl_buffer##number
179#define GLvoidP_def(number) BufferOrOffset bgl_buffer##number
180
181#define GLsizeiP_str "O!"
182#define GLsizeiP_var(number) (bgl_buffer##number)->buf.asvoid
183#define GLsizeiP_ref(number) &BGL_bufferType, &bgl_buffer##number
184#define GLsizeiP_def(number) Buffer *bgl_buffer##number
185
186#define GLcharP_str "O!"
187#define GLcharP_var(number) (bgl_buffer##number)->buf.asvoid
188#define GLcharP_ref(number) &BGL_bufferType, &bgl_buffer##number
189#define GLcharP_def(number) Buffer *bgl_buffer##number
190
191#if 0
192# define buffer_str "O!"
193# define buffer_var(number) (bgl_buffer##number)->buf.asvoid
194# define buffer_ref(number) &BGL_bufferType, &bgl_buffer##number
195# define buffer_def(number) Buffer *bgl_buffer##number
196#endif
197
198/* The standard GL typedefs are used as prototypes, we can't
199 * use the GL type directly because Py_ArgParse expects normal
200 * C types.
201 *
202 * Py_ArgParse doesn't grok writing into unsigned variables,
203 * so we use signed everything (even stuff that should be unsigned.
204 */
205
206/* Type: `typedef uint GLenum`. */
207#define GLenum_str "i"
208#define GLenum_var(num) bgl_var##num
209#define GLenum_ref(num) &bgl_var##num
210#define GLenum_def(num) /*unsigned*/ int GLenum_var(num)
211
212/* Type: `typedef uint GLboolean`. */
213#define GLboolean_str "b"
214#define GLboolean_var(num) bgl_var##num
215#define GLboolean_ref(num) &bgl_var##num
216#define GLboolean_def(num) /*unsigned*/ char GLboolean_var(num)
217
218/* Type: `typedef uint GLbitfield`. */
219#define GLbitfield_str "i"
220#define GLbitfield_var(num) bgl_var##num
221#define GLbitfield_ref(num) &bgl_var##num
222#define GLbitfield_def(num) /*unsigned*/ int GLbitfield_var(num)
223
224#if 0
225/* Type: `typedef signed char GLbyte`. */
226# define GLbyte_str "b"
227# define GLbyte_var(num) bgl_var##num
228# define GLbyte_ref(num) &bgl_var##num
229# define GLbyte_def(num) signed char GLbyte_var(num)
230#endif
231
232/* Type: `typedef short GLshort`. */
233#define GLshort_str "h"
234#define GLshort_var(num) bgl_var##num
235#define GLshort_ref(num) &bgl_var##num
236#define GLshort_def(num) short GLshort_var(num)
237
238/* Type: `typedef int GLint`. */
239#define GLint_str "i"
240#define GLint_var(num) bgl_var##num
241#define GLint_ref(num) &bgl_var##num
242#define GLint_def(num) int GLint_var(num)
243
244/* Type: `typedef int GLsizei`. */
245#define GLsizei_str "n"
246#define GLsizei_var(num) bgl_var##num
247#define GLsizei_ref(num) &bgl_var##num
248#define GLsizei_def(num) size_t GLsizei_var(num)
249
250/* Type: `typedef int GLsizeiptr`. */
251#define GLsizeiptr_str "n"
252#define GLsizeiptr_var(num) bgl_var##num
253#define GLsizeiptr_ref(num) &bgl_var##num
254#define GLsizeiptr_def(num) size_t GLsizeiptr_var(num)
255
256/* Type: `typedef int GLintptr`. */
257#define GLintptr_str "n"
258#define GLintptr_var(num) bgl_var##num
259#define GLintptr_ref(num) &bgl_var##num
260#define GLintptr_def(num) size_t GLintptr_var(num)
261
262/* Type: `typedef uchar GLubyte`. */
263#define GLubyte_str "B"
264#define GLubyte_var(num) bgl_var##num
265#define GLubyte_ref(num) &bgl_var##num
266#define GLubyte_def(num) /*unsigned*/ char GLubyte_var(num)
267
268#if 0
269/* Type: `typedef ushort GLushort`. */
270# define GLushort_str "H"
271# define GLushort_var(num) bgl_var##num
272# define GLushort_ref(num) &bgl_var##num
273# define GLushort_def(num) /*unsigned*/ short GLushort_var(num)
274#endif
275
276/* Type: `typedef uint GLuint`. */
277#define GLuint_str "I"
278#define GLuint_var(num) bgl_var##num
279#define GLuint_ref(num) &bgl_var##num
280#define GLuint_def(num) /*unsigned*/ int GLuint_var(num)
281
282/* Type: `typedef uint GLuint64`. */
283#if 0
284# define GLuint64_str "Q"
285# define GLuint64_var(num) bgl_var##num
286# define GLuint64_ref(num) &bgl_var##num
287# define GLuint64_def(num) /*unsigned*/ int GLuint64_var(num)
288#endif
289
290/* Type: `typedef uint GLsync`. */
291#if 0
292# define GLsync_str "I"
293# define GLsync_var(num) bgl_var##num
294# define GLsync_ref(num) &bgl_var##num
295# define GLsync_def(num) /*unsigned*/ int GLsync_var(num)
296#endif
297
298/* Type: `typedef float GLfloat`. */
299#define GLfloat_str "f"
300#define GLfloat_var(num) bgl_var##num
301#define GLfloat_ref(num) &bgl_var##num
302#define GLfloat_def(num) float GLfloat_var(num)
303
304/* Type: `typedef char *GLstring`. */
305#define GLstring_str "s"
306#define GLstring_var(number) bgl_var##number
307#define GLstring_ref(number) &bgl_var##number
308#define GLstring_def(number) char *GLstring_var(number)
309
310/* Type: `typedef float GLclampf`. */
311#if 0
312# define GLclampf_str "f"
313# define GLclampf_var(num) bgl_var##num
314# define GLclampf_ref(num) &bgl_var##num
315# define GLclampf_def(num) float GLclampf_var(num)
316#endif
317
318/* Type: `typedef double GLdouble`. */
319#define GLdouble_str "d"
320#define GLdouble_var(num) bgl_var##num
321#define GLdouble_ref(num) &bgl_var##num
322#define GLdouble_def(num) double GLdouble_var(num)
323
324/* Type: `typedef double GLclampd`. */
325#if 0
326# define GLclampd_str "d"
327# define GLclampd_var(num) bgl_var##num
328# define GLclampd_ref(num) &bgl_var##num
329# define GLclampd_def(num) double GLclampd_var(num)
330#endif
331
332#define _arg_def1(a1) a1##_def(1)
333#define _arg_def2(a1, a2) \
334 _arg_def1(a1); \
335 a2##_def(2)
336#define _arg_def3(a1, a2, a3) \
337 _arg_def2(a1, a2); \
338 a3##_def(3)
339#define _arg_def4(a1, a2, a3, a4) \
340 _arg_def3(a1, a2, a3); \
341 a4##_def(4)
342#define _arg_def5(a1, a2, a3, a4, a5) \
343 _arg_def4(a1, a2, a3, a4); \
344 a5##_def(5)
345#define _arg_def6(a1, a2, a3, a4, a5, a6) \
346 _arg_def5(a1, a2, a3, a4, a5); \
347 a6##_def(6)
348#define _arg_def7(a1, a2, a3, a4, a5, a6, a7) \
349 _arg_def6(a1, a2, a3, a4, a5, a6); \
350 a7##_def(7)
351#define _arg_def8(a1, a2, a3, a4, a5, a6, a7, a8) \
352 _arg_def7(a1, a2, a3, a4, a5, a6, a7); \
353 a8##_def(8)
354#define _arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
355 _arg_def8(a1, a2, a3, a4, a5, a6, a7, a8); \
356 a9##_def(9)
357#define _arg_def10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
358 _arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9); \
359 a10##_def(10)
360#define _arg_def11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
361 _arg_def10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); \
362 a11##_def(11)
363#define arg_def(...) VA_NARGS_CALL_OVERLOAD(_arg_def, __VA_ARGS__)
364
365#define _arg_var1(a1) a1##_var(1)
366#define _arg_var2(a1, a2) _arg_var1(a1), a2##_var(2)
367#define _arg_var3(a1, a2, a3) _arg_var2(a1, a2), a3##_var(3)
368#define _arg_var4(a1, a2, a3, a4) _arg_var3(a1, a2, a3), a4##_var(4)
369#define _arg_var5(a1, a2, a3, a4, a5) _arg_var4(a1, a2, a3, a4), a5##_var(5)
370#define _arg_var6(a1, a2, a3, a4, a5, a6) _arg_var5(a1, a2, a3, a4, a5), a6##_var(6)
371#define _arg_var7(a1, a2, a3, a4, a5, a6, a7) _arg_var6(a1, a2, a3, a4, a5, a6), a7##_var(7)
372#define _arg_var8(a1, a2, a3, a4, a5, a6, a7, a8) \
373 _arg_var7(a1, a2, a3, a4, a5, a6, a7), a8##_var(8)
374#define _arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
375 _arg_var8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_var(9)
376#define _arg_var10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
377 _arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_var(10)
378#define _arg_var11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
379 _arg_var10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), a11##_var(11)
380#define arg_var(...) VA_NARGS_CALL_OVERLOAD(_arg_var, __VA_ARGS__)
381
382#define _arg_ref1(a1) a1##_ref(1)
383#define _arg_ref2(a1, a2) _arg_ref1(a1), a2##_ref(2)
384#define _arg_ref3(a1, a2, a3) _arg_ref2(a1, a2), a3##_ref(3)
385#define _arg_ref4(a1, a2, a3, a4) _arg_ref3(a1, a2, a3), a4##_ref(4)
386#define _arg_ref5(a1, a2, a3, a4, a5) _arg_ref4(a1, a2, a3, a4), a5##_ref(5)
387#define _arg_ref6(a1, a2, a3, a4, a5, a6) _arg_ref5(a1, a2, a3, a4, a5), a6##_ref(6)
388#define _arg_ref7(a1, a2, a3, a4, a5, a6, a7) _arg_ref6(a1, a2, a3, a4, a5, a6), a7##_ref(7)
389#define _arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8) \
390 _arg_ref7(a1, a2, a3, a4, a5, a6, a7), a8##_ref(8)
391#define _arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
392 _arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_ref(9)
393#define _arg_ref10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
394 _arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_ref(10)
395#define _arg_ref11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
396 _arg_ref10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), a11##_ref(11)
397#define arg_ref(...) VA_NARGS_CALL_OVERLOAD(_arg_ref, __VA_ARGS__)
398
399#define _arg_str1(a1) a1##_str
400#define _arg_str2(a1, a2) _arg_str1(a1) a2##_str
401#define _arg_str3(a1, a2, a3) _arg_str2(a1, a2) a3##_str
402#define _arg_str4(a1, a2, a3, a4) _arg_str3(a1, a2, a3) a4##_str
403#define _arg_str5(a1, a2, a3, a4, a5) _arg_str4(a1, a2, a3, a4) a5##_str
404#define _arg_str6(a1, a2, a3, a4, a5, a6) _arg_str5(a1, a2, a3, a4, a5) a6##_str
405#define _arg_str7(a1, a2, a3, a4, a5, a6, a7) _arg_str6(a1, a2, a3, a4, a5, a6) a7##_str
406#define _arg_str8(a1, a2, a3, a4, a5, a6, a7, a8) _arg_str7(a1, a2, a3, a4, a5, a6, a7) a8##_str
407#define _arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
408 _arg_str8(a1, a2, a3, a4, a5, a6, a7, a8) a9##_str
409#define _arg_str10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
410 _arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9) a10##_str
411#define _arg_str11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
412 _arg_str10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a11##_str
413#define arg_str(...) VA_NARGS_CALL_OVERLOAD(_arg_str, __VA_ARGS__)
414
415#define ret_def_void
416#define ret_set_void
417#define ret_default_void
418#define ret_ret_void return Py_INCREF(Py_None), Py_None
419
420#define ret_def_GLint int ret_int
421#define ret_set_GLint ret_int =
422#define ret_default_GLint -1
423#define ret_ret_GLint return PyLong_FromLong(ret_int)
424
425#define ret_def_GLuint uint ret_uint
426#define ret_set_GLuint ret_uint =
427#define ret_default_GLuint 0
428#define ret_ret_GLuint return PyLong_FromLong(long(ret_uint))
429
430#if 0
431# define ret_def_GLsizei size_t ret_size_t
432# define ret_set_GLsizei ret_size_t =
433# define ret_ret_GLsizei return PyLong_FromSsize_t(ret_size_t)
434#endif
435
436#if 0
437# define ret_def_GLsync uint ret_sync
438# define ret_set_GLsync ret_sync =
439# define ret_ret_GLsync return PyLong_FromLong(long(ret_sync))
440#endif
441
442#define ret_def_GLenum uint ret_uint
443#define ret_set_GLenum ret_uint =
444#define ret_default_GLenum 0
445#define ret_ret_GLenum return PyLong_FromLong(long(ret_uint))
446
447#define ret_def_GLboolean uchar ret_bool
448#define ret_set_GLboolean ret_bool =
449#define ret_default_GLboolean GL_FALSE
450#define ret_ret_GLboolean return PyLong_FromLong(long(ret_bool))
451
452#define ret_def_GLstring \
453 const char *default_GLstring = ""; \
454 const uchar *ret_str
455#define ret_set_GLstring ret_str =
456#define ret_default_GLstring (const uchar *)default_GLstring
457
458#define ret_ret_GLstring \
459 if (ret_str) { \
460 return PyUnicode_FromString((const char *)ret_str); \
461 } \
462\
463 PyErr_SetString(PyExc_AttributeError, "could not get opengl string"); \
464 return nullptr;
465
467
468/* -------------------------------------------------------------------- */
469/* Forward Declarations */
470
471static PyObject *Buffer_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
472static PyObject *Method_ShaderSource(PyObject *self, PyObject *args);
473
474/* Buffer sequence methods */
475
476static Py_ssize_t Buffer_len(Buffer *self);
477static PyObject *Buffer_item(Buffer *self, Py_ssize_t i);
478static PyObject *Buffer_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end);
479static int Buffer_ass_item(Buffer *self, Py_ssize_t i, PyObject *v);
480static int Buffer_ass_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end, PyObject *seq);
481static PyObject *Buffer_subscript(Buffer *self, PyObject *item);
482static int Buffer_ass_subscript(Buffer *self, PyObject *item, PyObject *value);
483
484/* -------------------------------------------------------------------- */
487
488int BGL_typeSize(int type)
489{
490 switch (type) {
491 case GL_BYTE:
492 return sizeof(char);
493 case GL_SHORT:
494 return sizeof(short);
495 case GL_INT:
496 return sizeof(int);
497 case GL_FLOAT:
498 return sizeof(float);
499 case GL_DOUBLE:
500 return sizeof(double);
501 }
502 return -1;
503}
504
505static int gl_buffer_type_from_py_buffer(Py_buffer *pybuffer)
506{
507 const char format = PyC_StructFmt_type_from_str(pybuffer->format);
508 const Py_ssize_t itemsize = pybuffer->itemsize;
509
511 if (itemsize == 4) {
512 return GL_FLOAT;
513 }
514 if (itemsize == 8) {
515 return GL_DOUBLE;
516 }
517 }
519 if (itemsize == 1) {
520 return GL_BYTE;
521 }
522 if (itemsize == 2) {
523 return GL_SHORT;
524 }
525 if (itemsize == 4) {
526 return GL_INT;
527 }
528 }
529
530 return -1; /* UNKNOWN */
531}
532
533static bool compare_dimensions(int ndim, const int *dim1, const Py_ssize_t *dim2)
534{
535 for (int i = 0; i < ndim; i++) {
536 if (dim1[i] != dim2[i]) {
537 return false;
538 }
539 }
540 return true;
541}
542
544
545/* -------------------------------------------------------------------- */
548
549static PySequenceMethods Buffer_SeqMethods = {
550 /*sq_length*/ (lenfunc)Buffer_len,
551 /*sq_concat*/ nullptr,
552 /*sq_repeat*/ nullptr,
553 /*sq_item*/ (ssizeargfunc)Buffer_item,
554 /*was_sq_slice*/ nullptr, /* DEPRECATED. Handled by #Buffer_item. */
555 /*sq_ass_item*/ (ssizeobjargproc)Buffer_ass_item,
556 /*was_sq_ass_slice*/ nullptr, /* DEPRECATED. Handled by #Buffer_ass_item. */
557 /*sq_contains*/ nullptr,
558 /*sq_inplace_concat*/ nullptr,
559 /*sq_inplace_repeat*/ nullptr,
560};
561
562static PyMappingMethods Buffer_AsMapping = {
563 /*mp_length*/ (lenfunc)Buffer_len,
564 /*mp_subscript*/ (binaryfunc)Buffer_subscript,
565 /*mp_ass_subscript*/ (objobjargproc)Buffer_ass_subscript,
566};
567
568static void Buffer_dealloc(Buffer *self);
569static PyObject *Buffer_repr(Buffer *self);
570
571static PyObject *Buffer_to_list(Buffer *self)
572{
573 int i, len = self->dimensions[0];
574 PyObject *list = PyList_New(len);
575
576 for (i = 0; i < len; i++) {
577 PyList_SET_ITEM(list, i, Buffer_item(self, i));
578 }
579
580 return list;
581}
582
583static PyObject *Buffer_to_list_recursive(Buffer *self)
584{
585 PyObject *list;
586
587 if (self->ndimensions > 1) {
588 int i, len = self->dimensions[0];
589 list = PyList_New(len);
590
591 for (i = 0; i < len; i++) {
592 Buffer *sub = (Buffer *)Buffer_item(self, i);
593 PyList_SET_ITEM(list, i, Buffer_to_list_recursive(sub));
594 Py_DECREF(sub);
595 }
596 }
597 else {
598 list = Buffer_to_list(self);
599 }
600
601 return list;
602}
603
604static PyObject *Buffer_dimensions(Buffer *self, void * /*arg*/)
605{
606 PyObject *list = PyList_New(self->ndimensions);
607 int i;
608
609 for (i = 0; i < self->ndimensions; i++) {
610 PyList_SET_ITEM(list, i, PyLong_FromLong(self->dimensions[i]));
611 }
612
613 return list;
614}
615
616#ifdef __GNUC__
617# ifdef __clang__
618# pragma clang diagnostic push
619# pragma clang diagnostic ignored "-Wcast-function-type"
620# else
621# pragma GCC diagnostic push
622# pragma GCC diagnostic ignored "-Wcast-function-type"
623# endif
624#endif
625
626static PyMethodDef Buffer_methods[] = {
627 {"to_list", (PyCFunction)Buffer_to_list_recursive, METH_NOARGS, "return the buffer as a list"},
628 {nullptr, nullptr, 0, nullptr},
629};
630
631#ifdef __GNUC__
632# ifdef __clang__
633# pragma clang diagnostic pop
634# else
635# pragma GCC diagnostic pop
636# endif
637#endif
638
639static PyGetSetDef Buffer_getseters[] = {
640 {"dimensions", (getter)Buffer_dimensions, nullptr, nullptr, nullptr},
641 {nullptr, nullptr, nullptr, nullptr, nullptr},
642};
643
644PyTypeObject BGL_bufferType = {
645 /*ob_base*/ PyVarObject_HEAD_INIT(nullptr, 0)
646 /*tp_name*/ "bgl.Buffer",
647 /*tp_basicsize*/ sizeof(Buffer),
648 /*tp_itemsize*/ 0,
649 /*tp_dealloc*/ (destructor)Buffer_dealloc,
650 /*tp_vectorcall_offset*/ 0,
651 /*tp_getattr*/ nullptr,
652 /*tp_setattr*/ nullptr,
653 /*tp_as_async*/ nullptr,
654 /*tp_repr*/ (reprfunc)Buffer_repr,
655 /*tp_as_number*/ nullptr,
656 /*tp_as_sequence*/ &Buffer_SeqMethods,
657 /*tp_as_mapping*/ &Buffer_AsMapping,
658 /*tp_hash*/ nullptr,
659 /*tp_call*/ nullptr,
660 /*tp_str*/ nullptr,
661 /*tp_getattro*/ nullptr,
662 /*tp_setattro*/ nullptr,
663 /*tp_as_buffer*/ nullptr,
664 /*tp_flags*/ Py_TPFLAGS_DEFAULT,
665 /*tp_doc*/ nullptr,
666 /*tp_traverse*/ nullptr,
667 /*tp_clear*/ nullptr,
668 /*tp_richcompare*/ nullptr,
669 /*tp_weaklistoffset*/ 0,
670 /*tp_iter*/ nullptr,
671 /*tp_iternext*/ nullptr,
672 /*tp_methods*/ Buffer_methods,
673 /*tp_members*/ nullptr,
674 /*tp_getset*/ Buffer_getseters,
675 /*tp_base*/ nullptr,
676 /*tp_dict*/ nullptr,
677 /*tp_descr_get*/ nullptr,
678 /*tp_descr_set*/ nullptr,
679 /*tp_dictoffset*/ 0,
680 /*tp_init*/ nullptr,
681 /*tp_alloc*/ nullptr,
682 /*tp_new*/ Buffer_new,
683 /*tp_free*/ nullptr,
684 /*tp_is_gc*/ nullptr,
685 /*tp_bases*/ nullptr,
686 /*tp_mro*/ nullptr,
687 /*tp_cache*/ nullptr,
688 /*tp_subclasses*/ nullptr,
689 /*tp_weaklist*/ nullptr,
690 /*tp_del*/ nullptr,
691 /*tp_version_tag*/ 0,
692 /*tp_finalize*/ nullptr,
693 /*tp_vectorcall*/ nullptr,
694};
695
697 PyObject *parent, int type, int ndimensions, const int *dimensions, void *buf)
698{
699 Buffer *buffer = (Buffer *)PyObject_NEW(Buffer, &BGL_bufferType);
700
701 Py_XINCREF(parent);
702 buffer->parent = parent;
703 buffer->ndimensions = ndimensions;
704 buffer->dimensions = MEM_malloc_arrayN<int>(size_t(ndimensions), "Buffer dimensions");
705 memcpy(buffer->dimensions, dimensions, ndimensions * sizeof(int));
706 buffer->type = type;
707 buffer->buf.asvoid = buf;
708
709 return buffer;
710}
711
712Buffer *BGL_MakeBuffer(int type, int ndimensions, const int *dimensions, const void *initbuffer)
713{
714 Buffer *buffer;
715 void *buf = nullptr;
716 int i, size = BGL_typeSize(type);
717
718 for (i = 0; i < ndimensions; i++) {
719 size *= dimensions[i];
720 }
721
722 buf = MEM_mallocN(size, __func__);
723
724 buffer = BGL_MakeBuffer_FromData(nullptr, type, ndimensions, dimensions, buf);
725
726 if (initbuffer) {
727 memcpy(buffer->buf.asvoid, initbuffer, size);
728 }
729 else {
730 memset(buffer->buf.asvoid, 0, size);
731 }
732 return buffer;
733}
734
735#ifdef WITH_OPENGL_BACKEND
736/* Custom converter function so we can support a buffer, an integer or nullptr.
737 * Many OpenGL API functions can accept both an actual pointer or an offset
738 * into a buffer that is already bound. */
739static int BGL_BufferOrOffsetConverter(PyObject *object, BufferOrOffset *buffer)
740{
741 if (object == Py_None) {
742 buffer->buffer = nullptr;
743 buffer->offset = nullptr;
744 return 1;
745 }
746 if (PyNumber_Check(object)) {
747 const Py_ssize_t offset = PyNumber_AsSsize_t(object, PyExc_IndexError);
748 if (offset == -1 && PyErr_Occurred()) {
749 return 0;
750 }
751
752 buffer->buffer = nullptr;
753 buffer->offset = (void *)offset;
754 return 1;
755 }
756 if (PyObject_TypeCheck(object, &BGL_bufferType)) {
757 buffer->buffer = (Buffer *)object;
758 buffer->offset = nullptr;
759 return 1;
760 }
761
762 PyErr_SetString(PyExc_TypeError, "expected a bgl.Buffer or None");
763 return 0;
764}
765#endif
766
767#define MAX_DIMENSIONS 256
768static PyObject *Buffer_new(PyTypeObject * /*type*/, PyObject *args, PyObject *kwds)
769{
770 PyObject *length_ob = nullptr, *init = nullptr;
771 Buffer *buffer = nullptr;
772 int dimensions[MAX_DIMENSIONS];
773
774 int type;
775 Py_ssize_t i, ndimensions = 0;
776
777 if (kwds && PyDict_Size(kwds)) {
778 PyErr_SetString(PyExc_TypeError, "bgl.Buffer(): takes no keyword args");
779 return nullptr;
780 }
781
782 if (!PyArg_ParseTuple(args, "iO|O: bgl.Buffer", &type, &length_ob, &init)) {
783 return nullptr;
784 }
785 if (!ELEM(type, GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE)) {
786 PyErr_SetString(PyExc_AttributeError,
787 "invalid first argument type, should be one of "
788 "GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT or GL_DOUBLE");
789 return nullptr;
790 }
791
792 if (PyLong_Check(length_ob)) {
793 ndimensions = 1;
794 if ((dimensions[0] = PyLong_AsLong(length_ob)) < 1) {
795 PyErr_SetString(PyExc_AttributeError,
796 "dimensions must be between 1 and " STRINGIFY(MAX_DIMENSIONS));
797 return nullptr;
798 }
799 }
800 else if (PySequence_Check(length_ob)) {
801 ndimensions = PySequence_Size(length_ob);
802 if (ndimensions > MAX_DIMENSIONS) {
803 PyErr_SetString(PyExc_AttributeError,
804 "too many dimensions, max is " STRINGIFY(MAX_DIMENSIONS));
805 return nullptr;
806 }
807 if (ndimensions < 1) {
808 PyErr_SetString(PyExc_AttributeError, "sequence must have at least one dimension");
809 return nullptr;
810 }
811 for (i = 0; i < ndimensions; i++) {
812 PyObject *ob = PySequence_GetItem(length_ob, i);
813
814 if (!PyLong_Check(ob)) {
815 dimensions[i] = 1;
816 }
817 else {
818 dimensions[i] = PyLong_AsLong(ob);
819 }
820 Py_DECREF(ob);
821
822 if (dimensions[i] < 1) {
823 PyErr_SetString(PyExc_AttributeError,
824 "dimensions must be between 1 and " STRINGIFY(MAX_DIMENSIONS));
825 return nullptr;
826 }
827 }
828 }
829 else {
830 PyErr_Format(PyExc_TypeError,
831 "invalid second argument expected a sequence "
832 "or an int, not a %.200s",
833 Py_TYPE(length_ob)->tp_name);
834 return nullptr;
835 }
836
837 if (init && PyObject_CheckBuffer(init)) {
838 Py_buffer pybuffer;
839
840 if (PyObject_GetBuffer(init, &pybuffer, PyBUF_ND | PyBUF_FORMAT) == -1) {
841 /* PyObject_GetBuffer raise a PyExc_BufferError */
842 return nullptr;
843 }
844
845 if (type != gl_buffer_type_from_py_buffer(&pybuffer)) {
846 PyErr_Format(PyExc_TypeError,
847 "`GL_TYPE` and `typestr` of object with buffer interface do not match. '%s'",
848 pybuffer.format);
849 }
850 else if (ndimensions != pybuffer.ndim ||
851 !compare_dimensions(ndimensions, dimensions, pybuffer.shape))
852 {
853 PyErr_Format(PyExc_TypeError, "array size does not match");
854 }
855 else {
856 buffer = BGL_MakeBuffer_FromData(init, type, pybuffer.ndim, dimensions, pybuffer.buf);
857 }
858
859 PyBuffer_Release(&pybuffer);
860 }
861 else {
862 buffer = BGL_MakeBuffer(type, ndimensions, dimensions, nullptr);
863 if (init && Buffer_ass_slice(buffer, 0, dimensions[0], init)) {
864 Py_DECREF(buffer);
865 return nullptr;
866 }
867 }
868
869 return (PyObject *)buffer;
870}
871
872/* Buffer sequence methods */
873
874static Py_ssize_t Buffer_len(Buffer *self)
875{
876 return self->dimensions[0];
877}
878
879static PyObject *Buffer_item(Buffer *self, Py_ssize_t i)
880{
881 if (i >= self->dimensions[0] || i < 0) {
882 PyErr_SetString(PyExc_IndexError, "array index out of range");
883 return nullptr;
884 }
885
886 if (self->ndimensions == 1) {
887 switch (self->type) {
888 case GL_BYTE:
889 return Py_BuildValue("b", self->buf.asbyte[i]);
890 case GL_SHORT:
891 return Py_BuildValue("h", self->buf.asshort[i]);
892 case GL_INT:
893 return Py_BuildValue("i", self->buf.asint[i]);
894 case GL_FLOAT:
895 return PyFloat_FromDouble(self->buf.asfloat[i]);
896 case GL_DOUBLE:
897 return Py_BuildValue("d", self->buf.asdouble[i]);
898 }
899 }
900 else {
901 int j, offset = i * BGL_typeSize(self->type);
902
903 for (j = 1; j < self->ndimensions; j++) {
904 offset *= self->dimensions[j];
905 }
906
907 return (PyObject *)BGL_MakeBuffer_FromData((PyObject *)self,
908 self->type,
909 self->ndimensions - 1,
910 self->dimensions + 1,
911 self->buf.asbyte + offset);
912 }
913
914 return nullptr;
915}
916
917static PyObject *Buffer_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end)
918{
919 PyObject *list;
920
921 begin = std::max<Py_ssize_t>(begin, 0);
922 end = std::min<Py_ssize_t>(end, self->dimensions[0]);
923 begin = std::min(begin, end);
924
925 list = PyList_New(end - begin);
926
927 for (Py_ssize_t count = begin; count < end; count++) {
928 PyList_SET_ITEM(list, count - begin, Buffer_item(self, count));
929 }
930 return list;
931}
932
933static int Buffer_ass_item(Buffer *self, Py_ssize_t i, PyObject *v)
934{
935 if (i >= self->dimensions[0] || i < 0) {
936 PyErr_SetString(PyExc_IndexError, "array assignment index out of range");
937 return -1;
938 }
939
940 if (self->ndimensions != 1) {
941 Buffer *row = (Buffer *)Buffer_item(self, i);
942
943 if (row) {
944 const int ret = Buffer_ass_slice(row, 0, self->dimensions[1], v);
945 Py_DECREF(row);
946 return ret;
947 }
948
949 return -1;
950 }
951
952 switch (self->type) {
953 case GL_BYTE:
954 return PyArg_Parse(v, "b:Expected ints", &self->buf.asbyte[i]) ? 0 : -1;
955 case GL_SHORT:
956 return PyArg_Parse(v, "h:Expected ints", &self->buf.asshort[i]) ? 0 : -1;
957 case GL_INT:
958 return PyArg_Parse(v, "i:Expected ints", &self->buf.asint[i]) ? 0 : -1;
959 case GL_FLOAT:
960 return PyArg_Parse(v, "f:Expected floats", &self->buf.asfloat[i]) ? 0 : -1;
961 case GL_DOUBLE:
962 return PyArg_Parse(v, "d:Expected floats", &self->buf.asdouble[i]) ? 0 : -1;
963 default:
964 return 0; /* should never happen */
965 }
966}
967
968static int Buffer_ass_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end, PyObject *seq)
969{
970 PyObject *item;
971 int err = 0;
972 Py_ssize_t count;
973
974 begin = std::max<Py_ssize_t>(begin, 0);
975 end = std::min<Py_ssize_t>(end, self->dimensions[0]);
976 begin = std::min(begin, end);
977
978 if (!PySequence_Check(seq)) {
979 PyErr_Format(PyExc_TypeError,
980 "buffer[:] = value, invalid assignment. "
981 "Expected a sequence, not an %.200s type",
982 Py_TYPE(seq)->tp_name);
983 return -1;
984 }
985
986 /* Re-use count variable. */
987 if ((count = PySequence_Size(seq)) != (end - begin)) {
988 PyErr_Format(PyExc_TypeError,
989 "buffer[:] = value, size mismatch in assignment. "
990 "Expected: %d (given: %d)",
991 count,
992 end - begin);
993 return -1;
994 }
995
996 for (count = begin; count < end; count++) {
997 item = PySequence_GetItem(seq, count - begin);
998 if (item) {
999 err = Buffer_ass_item(self, count, item);
1000 Py_DECREF(item);
1001 }
1002 else {
1003 err = -1;
1004 }
1005 if (err) {
1006 break;
1007 }
1008 }
1009 return err;
1010}
1011
1012static PyObject *Buffer_subscript(Buffer *self, PyObject *item)
1013{
1014 if (PyIndex_Check(item)) {
1015 Py_ssize_t i;
1016 i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1017 if (i == -1 && PyErr_Occurred()) {
1018 return nullptr;
1019 }
1020 if (i < 0) {
1021 i += self->dimensions[0];
1022 }
1023 return Buffer_item(self, i);
1024 }
1025 if (PySlice_Check(item)) {
1026 Py_ssize_t start, stop, step, slicelength;
1027
1028 if (PySlice_GetIndicesEx(item, self->dimensions[0], &start, &stop, &step, &slicelength) < 0) {
1029 return nullptr;
1030 }
1031
1032 if (slicelength <= 0) {
1033 return PyTuple_New(0);
1034 }
1035 if (step == 1) {
1036 return Buffer_slice(self, start, stop);
1037 }
1038
1039 PyErr_SetString(PyExc_IndexError, "slice steps not supported with vectors");
1040 return nullptr;
1041 }
1042
1043 PyErr_Format(
1044 PyExc_TypeError, "buffer indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1045 return nullptr;
1046}
1047
1048static int Buffer_ass_subscript(Buffer *self, PyObject *item, PyObject *value)
1049{
1050 if (PyIndex_Check(item)) {
1051 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1052 if (i == -1 && PyErr_Occurred()) {
1053 return -1;
1054 }
1055 if (i < 0) {
1056 i += self->dimensions[0];
1057 }
1058 return Buffer_ass_item(self, i, value);
1059 }
1060 if (PySlice_Check(item)) {
1061 Py_ssize_t start, stop, step, slicelength;
1062
1063 if (PySlice_GetIndicesEx(item, self->dimensions[0], &start, &stop, &step, &slicelength) < 0) {
1064 return -1;
1065 }
1066
1067 if (step == 1) {
1068 return Buffer_ass_slice(self, start, stop, value);
1069 }
1070
1071 PyErr_SetString(PyExc_IndexError, "slice steps not supported with vectors");
1072 return -1;
1073 }
1074
1075 PyErr_Format(
1076 PyExc_TypeError, "buffer indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1077 return -1;
1078}
1079
1080static void Buffer_dealloc(Buffer *self)
1081{
1082 if (self->parent) {
1083 Py_DECREF(self->parent);
1084 }
1085 else {
1086 MEM_freeN(self->buf.asvoid);
1087 }
1088
1089 MEM_freeN(self->dimensions);
1090
1091 PyObject_DEL(self);
1092}
1093
1094static PyObject *Buffer_repr(Buffer *self)
1095{
1096 PyObject *list = Buffer_to_list_recursive(self);
1097 PyObject *repr;
1098 const char *typestr;
1099
1100 switch (self->type) {
1101 case GL_BYTE:
1102 typestr = "GL_BYTE";
1103 break;
1104 case GL_SHORT:
1105 typestr = "GL_SHORT";
1106 break;
1107 case GL_INT:
1108 typestr = "GL_INT";
1109 break;
1110 case GL_FLOAT:
1111 typestr = "GL_FLOAT";
1112 break;
1113 case GL_DOUBLE:
1114 typestr = "GL_DOUBLE";
1115 break;
1116 default:
1117 typestr = "UNKNOWN";
1118 break;
1119 }
1120
1121 repr = PyUnicode_FromFormat("Buffer(%s, %R)", typestr, list);
1122 Py_DECREF(list);
1123
1124 return repr;
1125}
1126
1128
1129/* -------------------------------------------------------------------- */
1132
1133#ifdef WITH_OPENGL_BACKEND
1134# define BGL_Wrap(funcname, ret, arg_list) \
1135 static PyObject *Method_##funcname(PyObject * /*self*/, PyObject *args) \
1136 { \
1137 arg_def arg_list; \
1138 ret_def_##ret; \
1139 report_deprecated_call(#funcname); \
1140 if (!PyArg_ParseTuple(args, arg_str arg_list, arg_ref arg_list)) { \
1141 return nullptr; \
1142 } \
1143 const bool has_opengl_backend = GPU_backend_get_type() == GPU_BACKEND_OPENGL; \
1144 if (has_opengl_backend) { \
1145 GPU_bgl_start(); \
1146 ret_set_##ret gl##funcname(arg_var arg_list); \
1147 } \
1148 else { \
1149 report_deprecated_call_to_user(); \
1150 ret_set_##ret ret_default_##ret; \
1151 } \
1152 ret_ret_##ret; \
1153 }
1154#else
1155
1157{
1158 PyErr_SetString(PyExc_RuntimeError, "Built without OpenGL support");
1159}
1160
1161# define BGL_Wrap(funcname, ret, arg_list) \
1162 static PyObject *Method_##funcname(PyObject * /*self*/, PyObject *args) \
1163 { \
1164 (void)args; \
1165 bgl_no_opengl_error(); \
1166 return nullptr; \
1167 }
1168#endif
1169
1170/* GL_VERSION_1_0 */
1171BGL_Wrap(BlendFunc, void, (GLenum, GLenum));
1172BGL_Wrap(Clear, void, (GLbitfield));
1173BGL_Wrap(ClearColor, void, (GLfloat, GLfloat, GLfloat, GLfloat));
1174BGL_Wrap(ClearDepth, void, (GLdouble));
1175BGL_Wrap(ClearStencil, void, (GLint));
1176BGL_Wrap(ColorMask, void, (GLboolean, GLboolean, GLboolean, GLboolean));
1177BGL_Wrap(CullFace, void, (GLenum));
1178BGL_Wrap(DepthFunc, void, (GLenum));
1179BGL_Wrap(DepthMask, void, (GLboolean));
1180BGL_Wrap(DepthRange, void, (GLdouble, GLdouble));
1181BGL_Wrap(Disable, void, (GLenum));
1182BGL_Wrap(DrawBuffer, void, (GLenum));
1183BGL_Wrap(Enable, void, (GLenum));
1184BGL_Wrap(Finish, void, (void));
1185BGL_Wrap(Flush, void, (void));
1186BGL_Wrap(FrontFace, void, (GLenum));
1187BGL_Wrap(GetBooleanv, void, (GLenum, GLbooleanP));
1188BGL_Wrap(GetDoublev, void, (GLenum, GLdoubleP));
1189BGL_Wrap(GetError, GLenum, (void));
1190BGL_Wrap(GetFloatv, void, (GLenum, GLfloatP));
1191BGL_Wrap(GetIntegerv, void, (GLenum, GLintP));
1192BGL_Wrap(GetString, GLstring, (GLenum));
1193BGL_Wrap(GetTexImage, void, (GLenum, GLint, GLenum, GLenum, GLvoidP));
1194BGL_Wrap(GetTexLevelParameterfv, void, (GLenum, GLint, GLenum, GLfloatP));
1195BGL_Wrap(GetTexLevelParameteriv, void, (GLenum, GLint, GLenum, GLintP));
1196BGL_Wrap(GetTexParameterfv, void, (GLenum, GLenum, GLfloatP));
1197BGL_Wrap(GetTexParameteriv, void, (GLenum, GLenum, GLintP));
1198BGL_Wrap(Hint, void, (GLenum, GLenum));
1199BGL_Wrap(IsEnabled, GLboolean, (GLenum));
1200BGL_Wrap(LineWidth, void, (GLfloat));
1201BGL_Wrap(LogicOp, void, (GLenum));
1202BGL_Wrap(PixelStoref, void, (GLenum, GLfloat));
1203BGL_Wrap(PixelStorei, void, (GLenum, GLint));
1204BGL_Wrap(PointSize, void, (GLfloat));
1205BGL_Wrap(PolygonMode, void, (GLenum, GLenum));
1206BGL_Wrap(ReadBuffer, void, (GLenum));
1207BGL_Wrap(ReadPixels, void, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1208BGL_Wrap(Scissor, void, (GLint, GLint, GLsizei, GLsizei));
1209BGL_Wrap(StencilFunc, void, (GLenum, GLint, GLuint));
1210BGL_Wrap(StencilMask, void, (GLuint));
1211BGL_Wrap(StencilOp, void, (GLenum, GLenum, GLenum));
1212BGL_Wrap(TexImage1D, void, (GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1213BGL_Wrap(TexImage2D,
1214 void,
1215 (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1216BGL_Wrap(TexParameterf, void, (GLenum, GLenum, GLfloat));
1217BGL_Wrap(TexParameterfv, void, (GLenum, GLenum, GLfloatP));
1218BGL_Wrap(TexParameteri, void, (GLenum, GLenum, GLint));
1219BGL_Wrap(TexParameteriv, void, (GLenum, GLenum, GLintP));
1220BGL_Wrap(Viewport, void, (GLint, GLint, GLsizei, GLsizei));
1221
1222/* GL_VERSION_1_1 */
1223BGL_Wrap(BindTexture, void, (GLenum, GLuint));
1224BGL_Wrap(CopyTexImage1D, void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint));
1225BGL_Wrap(CopyTexImage2D, void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint));
1226BGL_Wrap(CopyTexSubImage1D, void, (GLenum, GLint, GLint, GLint, GLint, GLsizei));
1227BGL_Wrap(CopyTexSubImage2D, void, (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei));
1228BGL_Wrap(DeleteTextures, void, (GLsizei, GLuintP));
1229BGL_Wrap(DrawArrays, void, (GLenum, GLint, GLsizei));
1230BGL_Wrap(DrawElements, void, (GLenum, GLsizei, GLenum, GLvoidP));
1231BGL_Wrap(GenTextures, void, (GLsizei, GLuintP));
1232BGL_Wrap(IsTexture, GLboolean, (GLuint));
1233BGL_Wrap(PolygonOffset, void, (GLfloat, GLfloat));
1234BGL_Wrap(TexSubImage1D, void, (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, GLvoidP));
1235BGL_Wrap(TexSubImage2D,
1236 void,
1237 (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1238
1239/* GL_VERSION_1_2 */
1240BGL_Wrap(CopyTexSubImage3D,
1241 void,
1242 (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei));
1243BGL_Wrap(DrawRangeElements, void, (GLenum, GLuint, GLuint, GLsizei, GLenum, GLvoidP));
1244BGL_Wrap(TexImage3D,
1245 void,
1246 (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1247BGL_Wrap(TexSubImage3D,
1248 void,
1249 (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1250
1251/* GL_VERSION_1_3 */
1252BGL_Wrap(ActiveTexture, void, (GLenum));
1253BGL_Wrap(CompressedTexImage1D, void, (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, GLvoidP));
1254BGL_Wrap(CompressedTexImage2D,
1255 void,
1256 (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLvoidP));
1257BGL_Wrap(CompressedTexImage3D,
1258 void,
1259 (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, GLvoidP));
1260BGL_Wrap(CompressedTexSubImage1D, void, (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, GLvoidP));
1261BGL_Wrap(CompressedTexSubImage2D,
1262 void,
1263 (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP));
1265 CompressedTexSubImage3D,
1266 void,
1267 (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP));
1268BGL_Wrap(GetCompressedTexImage, void, (GLenum, GLint, GLvoidP));
1269BGL_Wrap(SampleCoverage, void, (GLfloat, GLboolean));
1270
1271/* GL_VERSION_1_4 */
1272BGL_Wrap(BlendColor, void, (GLfloat, GLfloat, GLfloat, GLfloat));
1273BGL_Wrap(BlendEquation, void, (GLenum));
1274
1275/* GL_VERSION_1_5 */
1276BGL_Wrap(BeginQuery, void, (GLenum, GLuint));
1277BGL_Wrap(BindBuffer, void, (GLenum, GLuint));
1278BGL_Wrap(BufferData, void, (GLenum, GLsizeiptr, GLvoidP, GLenum));
1279BGL_Wrap(BufferSubData, void, (GLenum, GLintptr, GLsizeiptr, GLvoidP));
1280BGL_Wrap(DeleteBuffers, void, (GLsizei, GLuintP));
1281BGL_Wrap(DeleteQueries, void, (GLsizei, GLuintP));
1282BGL_Wrap(EndQuery, void, (GLenum));
1283BGL_Wrap(GenBuffers, void, (GLsizei, GLuintP));
1284BGL_Wrap(GenQueries, void, (GLsizei, GLuintP));
1285BGL_Wrap(GetBufferParameteriv, void, (GLenum, GLenum, GLintP));
1286BGL_Wrap(GetBufferPointerv, void, (GLenum, GLenum, GLvoidP));
1287BGL_Wrap(GetBufferSubData, void, (GLenum, GLintptr, GLsizeiptr, GLvoidP));
1288BGL_Wrap(GetQueryObjectiv, void, (GLuint, GLenum, GLintP));
1289BGL_Wrap(GetQueryObjectuiv, void, (GLuint, GLenum, GLuintP));
1290BGL_Wrap(GetQueryiv, void, (GLenum, GLenum, GLintP));
1291BGL_Wrap(IsBuffer, GLboolean, (GLuint));
1292BGL_Wrap(IsQuery, GLboolean, (GLuint));
1293BGL_Wrap(MapBuffer, void, (GLenum, GLenum));
1294BGL_Wrap(UnmapBuffer, GLboolean, (GLenum));
1295
1296/* GL_VERSION_2_0 */
1297BGL_Wrap(AttachShader, void, (GLuint, GLuint));
1298BGL_Wrap(BindAttribLocation, void, (GLuint, GLuint, GLstring));
1299BGL_Wrap(BlendEquationSeparate, void, (GLenum, GLenum));
1300BGL_Wrap(CompileShader, void, (GLuint));
1301BGL_Wrap(CreateProgram, GLuint, (void));
1302BGL_Wrap(CreateShader, GLuint, (GLenum));
1303BGL_Wrap(DeleteProgram, void, (GLuint));
1304BGL_Wrap(DeleteShader, void, (GLuint));
1305BGL_Wrap(DetachShader, void, (GLuint, GLuint));
1306BGL_Wrap(DisableVertexAttribArray, void, (GLuint));
1307BGL_Wrap(DrawBuffers, void, (GLsizei, GLenumP));
1308BGL_Wrap(EnableVertexAttribArray, void, (GLuint));
1309BGL_Wrap(GetActiveAttrib, void, (GLuint, GLuint, GLsizei, GLsizeiP, GLintP, GLenumP, GLcharP));
1310BGL_Wrap(GetActiveUniform, void, (GLuint, GLuint, GLsizei, GLsizeiP, GLintP, GLenumP, GLcharP));
1311BGL_Wrap(GetAttachedShaders, void, (GLuint, GLsizei, GLsizeiP, GLuintP));
1312BGL_Wrap(GetAttribLocation, GLint, (GLuint, GLstring));
1313BGL_Wrap(GetProgramInfoLog, void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1314BGL_Wrap(GetProgramiv, void, (GLuint, GLenum, GLintP));
1315BGL_Wrap(GetShaderInfoLog, void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1316BGL_Wrap(GetShaderSource, void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1317BGL_Wrap(GetShaderiv, void, (GLuint, GLenum, GLintP));
1318BGL_Wrap(GetUniformLocation, GLint, (GLuint, GLstring));
1319BGL_Wrap(GetUniformfv, void, (GLuint, GLint, GLfloatP));
1320BGL_Wrap(GetUniformiv, void, (GLuint, GLint, GLintP));
1321BGL_Wrap(GetVertexAttribPointerv, void, (GLuint, GLenum, GLvoidP));
1322BGL_Wrap(GetVertexAttribdv, void, (GLuint, GLenum, GLdoubleP));
1323BGL_Wrap(GetVertexAttribfv, void, (GLuint, GLenum, GLfloatP));
1324BGL_Wrap(GetVertexAttribiv, void, (GLuint, GLenum, GLintP));
1325BGL_Wrap(IsProgram, GLboolean, (GLuint));
1326BGL_Wrap(IsShader, GLboolean, (GLuint));
1327BGL_Wrap(LinkProgram, void, (GLuint));
1328BGL_Wrap(StencilFuncSeparate, void, (GLenum, GLenum, GLint, GLuint));
1329BGL_Wrap(StencilMaskSeparate, void, (GLenum, GLuint));
1330BGL_Wrap(StencilOpSeparate, void, (GLenum, GLenum, GLenum, GLenum));
1331BGL_Wrap(Uniform1f, void, (GLint, GLfloat));
1332BGL_Wrap(Uniform1fv, void, (GLint, GLsizei, GLfloatP));
1333BGL_Wrap(Uniform1i, void, (GLint, GLint));
1334BGL_Wrap(Uniform1iv, void, (GLint, GLsizei, GLintP));
1335BGL_Wrap(Uniform2f, void, (GLint, GLfloat, GLfloat));
1336BGL_Wrap(Uniform2fv, void, (GLint, GLsizei, GLfloatP));
1337BGL_Wrap(Uniform2i, void, (GLint, GLint, GLint));
1338BGL_Wrap(Uniform2iv, void, (GLint, GLsizei, GLintP));
1339BGL_Wrap(Uniform3f, void, (GLint, GLfloat, GLfloat, GLfloat));
1340BGL_Wrap(Uniform3fv, void, (GLint, GLsizei, GLfloatP));
1341BGL_Wrap(Uniform3i, void, (GLint, GLint, GLint, GLint));
1342BGL_Wrap(Uniform3iv, void, (GLint, GLsizei, GLintP));
1343BGL_Wrap(Uniform4f, void, (GLint, GLfloat, GLfloat, GLfloat, GLfloat));
1344BGL_Wrap(Uniform4fv, void, (GLint, GLsizei, GLfloatP));
1345BGL_Wrap(Uniform4i, void, (GLint, GLint, GLint, GLint, GLint));
1346BGL_Wrap(Uniform4iv, void, (GLint, GLsizei, GLintP));
1347BGL_Wrap(UniformMatrix2fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1348BGL_Wrap(UniformMatrix3fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1349BGL_Wrap(UniformMatrix4fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1350BGL_Wrap(UseProgram, void, (GLuint));
1351BGL_Wrap(ValidateProgram, void, (GLuint));
1352BGL_Wrap(VertexAttrib1d, void, (GLuint, GLdouble));
1353BGL_Wrap(VertexAttrib1dv, void, (GLuint, GLdoubleP));
1354BGL_Wrap(VertexAttrib1f, void, (GLuint, GLfloat));
1355BGL_Wrap(VertexAttrib1fv, void, (GLuint, GLfloatP));
1356BGL_Wrap(VertexAttrib1s, void, (GLuint, GLshort));
1357BGL_Wrap(VertexAttrib1sv, void, (GLuint, GLshortP));
1358BGL_Wrap(VertexAttrib2d, void, (GLuint, GLdouble, GLdouble));
1359BGL_Wrap(VertexAttrib2dv, void, (GLuint, GLdoubleP));
1360BGL_Wrap(VertexAttrib2f, void, (GLuint, GLfloat, GLfloat));
1361BGL_Wrap(VertexAttrib2fv, void, (GLuint, GLfloatP));
1362BGL_Wrap(VertexAttrib2s, void, (GLuint, GLshort, GLshort));
1363BGL_Wrap(VertexAttrib2sv, void, (GLuint, GLshortP));
1364BGL_Wrap(VertexAttrib3d, void, (GLuint, GLdouble, GLdouble, GLdouble));
1365BGL_Wrap(VertexAttrib3dv, void, (GLuint, GLdoubleP));
1366BGL_Wrap(VertexAttrib3f, void, (GLuint, GLfloat, GLfloat, GLfloat));
1367BGL_Wrap(VertexAttrib3fv, void, (GLuint, GLfloatP));
1368BGL_Wrap(VertexAttrib3s, void, (GLuint, GLshort, GLshort, GLshort));
1369BGL_Wrap(VertexAttrib3sv, void, (GLuint, GLshortP));
1370BGL_Wrap(VertexAttrib4Nbv, void, (GLuint, GLbyteP));
1371BGL_Wrap(VertexAttrib4Niv, void, (GLuint, GLintP));
1372BGL_Wrap(VertexAttrib4Nsv, void, (GLuint, GLshortP));
1373BGL_Wrap(VertexAttrib4Nub, void, (GLuint, GLubyte, GLubyte, GLubyte, GLubyte));
1374BGL_Wrap(VertexAttrib4Nubv, void, (GLuint, GLubyteP));
1375BGL_Wrap(VertexAttrib4Nuiv, void, (GLuint, GLuintP));
1376BGL_Wrap(VertexAttrib4Nusv, void, (GLuint, GLushortP));
1377BGL_Wrap(VertexAttrib4bv, void, (GLuint, GLbyteP));
1378BGL_Wrap(VertexAttrib4d, void, (GLuint, GLdouble, GLdouble, GLdouble, GLdouble));
1379BGL_Wrap(VertexAttrib4dv, void, (GLuint, GLdoubleP));
1380BGL_Wrap(VertexAttrib4f, void, (GLuint, GLfloat, GLfloat, GLfloat, GLfloat));
1381BGL_Wrap(VertexAttrib4fv, void, (GLuint, GLfloatP));
1382BGL_Wrap(VertexAttrib4iv, void, (GLuint, GLintP));
1383BGL_Wrap(VertexAttrib4s, void, (GLuint, GLshort, GLshort, GLshort, GLshort));
1384BGL_Wrap(VertexAttrib4sv, void, (GLuint, GLshortP));
1385BGL_Wrap(VertexAttrib4ubv, void, (GLuint, GLubyteP));
1386BGL_Wrap(VertexAttrib4uiv, void, (GLuint, GLuintP));
1387BGL_Wrap(VertexAttrib4usv, void, (GLuint, GLushortP));
1388BGL_Wrap(VertexAttribPointer, void, (GLuint, GLint, GLenum, GLboolean, GLsizei, GLvoidP));
1389
1390/* GL_VERSION_2_1 */
1391BGL_Wrap(UniformMatrix2x3fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1392BGL_Wrap(UniformMatrix2x4fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1393BGL_Wrap(UniformMatrix3x2fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1394BGL_Wrap(UniformMatrix3x4fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1395BGL_Wrap(UniformMatrix4x2fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1396BGL_Wrap(UniformMatrix4x3fv, void, (GLint, GLsizei, GLboolean, GLfloatP));
1397
1398/* GL_VERSION_3_0 */
1399BGL_Wrap(BindFramebuffer, void, (GLenum, GLuint));
1400BGL_Wrap(BindRenderbuffer, void, (GLenum, GLuint));
1401BGL_Wrap(BindVertexArray, void, (GLuint));
1402BGL_Wrap(BlitFramebuffer,
1403 void,
1404 (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum));
1405BGL_Wrap(CheckFramebufferStatus, GLenum, (GLenum));
1406BGL_Wrap(DeleteFramebuffers, void, (GLsizei, GLuintP));
1407BGL_Wrap(DeleteRenderbuffers, void, (GLsizei, GLuintP));
1408BGL_Wrap(DeleteVertexArrays, void, (GLsizei, GLuintP));
1409BGL_Wrap(FramebufferRenderbuffer, void, (GLenum, GLenum, GLenum, GLuint));
1410BGL_Wrap(GenFramebuffers, void, (GLsizei, GLuintP));
1411BGL_Wrap(GenRenderbuffers, void, (GLsizei, GLuintP));
1412BGL_Wrap(GenVertexArrays, void, (GLsizei, GLuintP));
1413BGL_Wrap(GetStringi, GLstring, (GLenum, GLuint));
1414BGL_Wrap(IsVertexArray, GLboolean, (GLuint));
1415BGL_Wrap(RenderbufferStorage, void, (GLenum, GLenum, GLsizei, GLsizei));
1416BGL_Wrap(VertexAttribIPointer, void, (GLuint, GLint, GLenum, GLsizei, GLvoidP));
1417
1418/* GL_VERSION_3_1 */
1419BGL_Wrap(BindBufferBase, void, (GLenum, GLuint, GLuint));
1420BGL_Wrap(BindBufferRange, void, (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr));
1421BGL_Wrap(GetActiveUniformBlockName, void, (GLuint, GLuint, GLsizei, GLsizeiP, GLcharP));
1422BGL_Wrap(GetActiveUniformBlockiv, void, (GLuint, GLuint, GLenum, GLintP));
1423BGL_Wrap(GetActiveUniformName, void, (GLuint, GLuint, GLsizei, GLsizeiP, GLcharP));
1424BGL_Wrap(GetActiveUniformsiv, void, (GLuint, GLsizei, GLuintP, GLenum, GLintP));
1425BGL_Wrap(GetIntegeri_v, void, (GLenum, GLuint, GLintP));
1426BGL_Wrap(GetUniformBlockIndex, GLuint, (GLuint, GLstring));
1427BGL_Wrap(GetUniformIndices, void, (GLuint, GLsizei, GLcharP, GLuintP));
1428BGL_Wrap(UniformBlockBinding, void, (GLuint, GLuint, GLuint));
1429
1430/* GL_VERSION_3_2 */
1431BGL_Wrap(FramebufferTexture, void, (GLenum, GLenum, GLuint, GLint));
1432BGL_Wrap(GetBufferParameteri64v, void, (GLenum, GLenum, GLint64P));
1433BGL_Wrap(GetInteger64i_v, void, (GLenum, GLuint, GLint64P));
1434BGL_Wrap(GetMultisamplefv, void, (GLenum, GLuint, GLfloatP));
1435BGL_Wrap(SampleMaski, void, (GLuint, GLbitfield));
1436BGL_Wrap(TexImage2DMultisample, void, (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean));
1437BGL_Wrap(TexImage3DMultisample,
1438 void,
1439 (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean));
1440
1441/* GL_VERSION_3_3 */
1442/* no new functions besides packed immediate mode (not part of core profile) */
1443
1445
1446/* -------------------------------------------------------------------- */
1449
1450static PyModuleDef BGL_module_def = {
1451 /*m_base*/ PyModuleDef_HEAD_INIT,
1452 /*m_name*/ "bgl",
1453 /*m_doc*/ nullptr,
1454 /*m_size*/ 0,
1455 /*m_methods*/ nullptr,
1456 /*m_slots*/ nullptr,
1457 /*m_traverse*/ nullptr,
1458 /*m_clear*/ nullptr,
1459 /*m_free*/ nullptr,
1460};
1461
1462static void py_module_dict_add_int(PyObject *dict, const char *name, int value)
1463{
1464 PyObject *item;
1465 PyDict_SetItemString(dict, name, item = PyLong_FromLong(value));
1466 Py_DECREF(item);
1467}
1468
1469static void py_module_dict_add_int64(PyObject *dict, const char *name, int64_t value)
1470{
1471 PyObject *item;
1472 PyDict_SetItemString(dict, name, item = PyLong_FromLongLong(value));
1473 Py_DECREF(item);
1474}
1475
1476static void py_module_dict_add_method(PyObject *submodule,
1477 PyObject *dict,
1478 PyMethodDef *method_def,
1479 bool is_valid)
1480{
1481 if (is_valid) {
1482 PyObject *m;
1483 m = PyCFunction_NewEx(method_def, nullptr, submodule);
1484 PyDict_SetItemString(dict, method_def->ml_name, m);
1485 Py_DECREF(m);
1486 }
1487 else {
1488 PyDict_SetItemString(dict, method_def->ml_name, Py_None);
1489 }
1490}
1491
1492/* needed since some function pointers won't be nullptr */
1493#ifdef __GNUC__
1494# pragma GCC diagnostic ignored "-Waddress"
1495#endif
1496
1497#ifdef WITH_OPENGL_BACKEND
1498# define PY_MOD_ADD_METHOD(func) \
1499 { \
1500 static PyMethodDef method_def = {"gl" #func, Method_##func, METH_VARARGS}; \
1501 py_module_dict_add_method(submodule, dict, &method_def, (gl##func != nullptr)); \
1502 } \
1503 ((void)0)
1504#else
1505# define PY_MOD_ADD_METHOD(func) \
1506 { \
1507 static PyMethodDef method_def = {"gl" #func, Method_##func, METH_VARARGS}; \
1508 py_module_dict_add_method(submodule, dict, &method_def, false); \
1509 } \
1510 ((void)0)
1511#endif
1512
1513static void init_bgl_version_1_0_methods(PyObject *submodule, PyObject *dict)
1514{
1515 /* GL_VERSION_1_0 */
1516 PY_MOD_ADD_METHOD(BlendFunc);
1517 PY_MOD_ADD_METHOD(Clear);
1518 PY_MOD_ADD_METHOD(ClearColor);
1519 PY_MOD_ADD_METHOD(ClearDepth);
1520 PY_MOD_ADD_METHOD(ClearStencil);
1521 PY_MOD_ADD_METHOD(ColorMask);
1522 PY_MOD_ADD_METHOD(CullFace);
1523 PY_MOD_ADD_METHOD(DepthFunc);
1524 PY_MOD_ADD_METHOD(DepthMask);
1525 PY_MOD_ADD_METHOD(DepthRange);
1526 PY_MOD_ADD_METHOD(Disable);
1527 PY_MOD_ADD_METHOD(DrawBuffer);
1528 PY_MOD_ADD_METHOD(Enable);
1529 PY_MOD_ADD_METHOD(Finish);
1530 PY_MOD_ADD_METHOD(Flush);
1531 PY_MOD_ADD_METHOD(FrontFace);
1532 PY_MOD_ADD_METHOD(GetBooleanv);
1533 PY_MOD_ADD_METHOD(GetDoublev);
1534 PY_MOD_ADD_METHOD(GetError);
1535 PY_MOD_ADD_METHOD(GetFloatv);
1536 PY_MOD_ADD_METHOD(GetIntegerv);
1537 PY_MOD_ADD_METHOD(GetString);
1538 PY_MOD_ADD_METHOD(GetTexImage);
1539 PY_MOD_ADD_METHOD(GetTexLevelParameterfv);
1540 PY_MOD_ADD_METHOD(GetTexLevelParameteriv);
1541 PY_MOD_ADD_METHOD(GetTexParameterfv);
1542 PY_MOD_ADD_METHOD(GetTexParameteriv);
1543 PY_MOD_ADD_METHOD(Hint);
1544 PY_MOD_ADD_METHOD(IsEnabled);
1545 PY_MOD_ADD_METHOD(LineWidth);
1546 PY_MOD_ADD_METHOD(LogicOp);
1547 PY_MOD_ADD_METHOD(PixelStoref);
1548 PY_MOD_ADD_METHOD(PixelStorei);
1549 PY_MOD_ADD_METHOD(PointSize);
1550 PY_MOD_ADD_METHOD(PolygonMode);
1551 PY_MOD_ADD_METHOD(ReadBuffer);
1552 PY_MOD_ADD_METHOD(ReadPixels);
1553 PY_MOD_ADD_METHOD(Scissor);
1554 PY_MOD_ADD_METHOD(StencilFunc);
1555 PY_MOD_ADD_METHOD(StencilMask);
1556 PY_MOD_ADD_METHOD(StencilOp);
1557 PY_MOD_ADD_METHOD(TexImage1D);
1558 PY_MOD_ADD_METHOD(TexImage2D);
1559 PY_MOD_ADD_METHOD(TexParameterf);
1560 PY_MOD_ADD_METHOD(TexParameterfv);
1561 PY_MOD_ADD_METHOD(TexParameteri);
1562 PY_MOD_ADD_METHOD(TexParameteriv);
1563 PY_MOD_ADD_METHOD(Viewport);
1564}
1565static void init_bgl_version_1_1_methods(PyObject *submodule, PyObject *dict)
1566{
1567 /* GL_VERSION_1_1 */
1568 PY_MOD_ADD_METHOD(BindTexture);
1569 PY_MOD_ADD_METHOD(CopyTexImage1D);
1570 PY_MOD_ADD_METHOD(CopyTexImage2D);
1571 PY_MOD_ADD_METHOD(CopyTexSubImage1D);
1572 PY_MOD_ADD_METHOD(CopyTexSubImage2D);
1573 PY_MOD_ADD_METHOD(DeleteTextures);
1574 PY_MOD_ADD_METHOD(DrawArrays);
1575 PY_MOD_ADD_METHOD(DrawElements);
1576 PY_MOD_ADD_METHOD(GenTextures);
1577 PY_MOD_ADD_METHOD(IsTexture);
1578 PY_MOD_ADD_METHOD(PolygonOffset);
1579 PY_MOD_ADD_METHOD(TexSubImage1D);
1580 PY_MOD_ADD_METHOD(TexSubImage2D);
1581}
1582static void init_bgl_version_1_2_methods(PyObject *submodule, PyObject *dict)
1583{
1584 /* GL_VERSION_1_2 */
1585 PY_MOD_ADD_METHOD(CopyTexSubImage3D);
1586 PY_MOD_ADD_METHOD(DrawRangeElements);
1587 PY_MOD_ADD_METHOD(TexImage3D);
1588 PY_MOD_ADD_METHOD(TexSubImage3D);
1589}
1590static void init_bgl_version_1_3_methods(PyObject *submodule, PyObject *dict)
1591{
1592 /* GL_VERSION_1_3 */
1593 PY_MOD_ADD_METHOD(ActiveTexture);
1594 PY_MOD_ADD_METHOD(CompressedTexImage1D);
1595 PY_MOD_ADD_METHOD(CompressedTexImage2D);
1596 PY_MOD_ADD_METHOD(CompressedTexImage3D);
1597 PY_MOD_ADD_METHOD(CompressedTexSubImage1D);
1598 PY_MOD_ADD_METHOD(CompressedTexSubImage2D);
1599 PY_MOD_ADD_METHOD(CompressedTexSubImage3D);
1600 PY_MOD_ADD_METHOD(GetCompressedTexImage);
1601 PY_MOD_ADD_METHOD(SampleCoverage);
1602}
1603static void init_bgl_version_1_4_methods(PyObject *submodule, PyObject *dict)
1604{
1605 /* GL_VERSION_1_4 */
1606 PY_MOD_ADD_METHOD(BlendColor);
1607 PY_MOD_ADD_METHOD(BlendEquation);
1608}
1609static void init_bgl_version_1_5_methods(PyObject *submodule, PyObject *dict)
1610/* GL_VERSION_1_5 */
1611{
1612 PY_MOD_ADD_METHOD(BeginQuery);
1613 PY_MOD_ADD_METHOD(BindBuffer);
1614 PY_MOD_ADD_METHOD(BufferData);
1615 PY_MOD_ADD_METHOD(BufferSubData);
1616 PY_MOD_ADD_METHOD(DeleteBuffers);
1617 PY_MOD_ADD_METHOD(DeleteQueries);
1618 PY_MOD_ADD_METHOD(EndQuery);
1619 PY_MOD_ADD_METHOD(GenBuffers);
1620 PY_MOD_ADD_METHOD(GenQueries);
1621 PY_MOD_ADD_METHOD(GetBufferParameteriv);
1622 PY_MOD_ADD_METHOD(GetBufferPointerv);
1623 PY_MOD_ADD_METHOD(GetBufferSubData);
1624 PY_MOD_ADD_METHOD(GetQueryObjectiv);
1625 PY_MOD_ADD_METHOD(GetQueryObjectuiv);
1626 PY_MOD_ADD_METHOD(GetQueryiv);
1627 PY_MOD_ADD_METHOD(IsBuffer);
1628 PY_MOD_ADD_METHOD(IsQuery);
1629 PY_MOD_ADD_METHOD(MapBuffer);
1630 PY_MOD_ADD_METHOD(UnmapBuffer);
1631}
1632static void init_bgl_version_2_0_methods(PyObject *submodule, PyObject *dict)
1633{
1634 /* GL_VERSION_2_0 */
1635 PY_MOD_ADD_METHOD(AttachShader);
1636 PY_MOD_ADD_METHOD(BindAttribLocation);
1637 PY_MOD_ADD_METHOD(BlendEquationSeparate);
1638 PY_MOD_ADD_METHOD(CompileShader);
1639 PY_MOD_ADD_METHOD(CreateProgram);
1640 PY_MOD_ADD_METHOD(CreateShader);
1641 PY_MOD_ADD_METHOD(DeleteProgram);
1642 PY_MOD_ADD_METHOD(DeleteShader);
1643 PY_MOD_ADD_METHOD(DetachShader);
1644 PY_MOD_ADD_METHOD(DisableVertexAttribArray);
1645 PY_MOD_ADD_METHOD(DrawBuffers);
1646 PY_MOD_ADD_METHOD(EnableVertexAttribArray);
1647 PY_MOD_ADD_METHOD(GetActiveAttrib);
1648 PY_MOD_ADD_METHOD(GetActiveUniform);
1649 PY_MOD_ADD_METHOD(GetAttachedShaders);
1650 PY_MOD_ADD_METHOD(GetAttribLocation);
1651 PY_MOD_ADD_METHOD(GetProgramInfoLog);
1652 PY_MOD_ADD_METHOD(GetProgramiv);
1653 PY_MOD_ADD_METHOD(GetShaderInfoLog);
1654 PY_MOD_ADD_METHOD(GetShaderSource);
1655 PY_MOD_ADD_METHOD(GetShaderiv);
1656 PY_MOD_ADD_METHOD(GetUniformLocation);
1657 PY_MOD_ADD_METHOD(GetUniformfv);
1658 PY_MOD_ADD_METHOD(GetUniformiv);
1659 PY_MOD_ADD_METHOD(GetVertexAttribPointerv);
1660 PY_MOD_ADD_METHOD(GetVertexAttribdv);
1661 PY_MOD_ADD_METHOD(GetVertexAttribfv);
1662 PY_MOD_ADD_METHOD(GetVertexAttribiv);
1663 PY_MOD_ADD_METHOD(IsProgram);
1664 PY_MOD_ADD_METHOD(IsShader);
1665 PY_MOD_ADD_METHOD(LinkProgram);
1666 PY_MOD_ADD_METHOD(ShaderSource);
1667 PY_MOD_ADD_METHOD(StencilFuncSeparate);
1668 PY_MOD_ADD_METHOD(StencilMaskSeparate);
1669 PY_MOD_ADD_METHOD(StencilOpSeparate);
1670 PY_MOD_ADD_METHOD(Uniform1f);
1671 PY_MOD_ADD_METHOD(Uniform1fv);
1672 PY_MOD_ADD_METHOD(Uniform1i);
1673 PY_MOD_ADD_METHOD(Uniform1iv);
1674 PY_MOD_ADD_METHOD(Uniform2f);
1675 PY_MOD_ADD_METHOD(Uniform2fv);
1676 PY_MOD_ADD_METHOD(Uniform2i);
1677 PY_MOD_ADD_METHOD(Uniform2iv);
1678 PY_MOD_ADD_METHOD(Uniform3f);
1679 PY_MOD_ADD_METHOD(Uniform3fv);
1680 PY_MOD_ADD_METHOD(Uniform3i);
1681 PY_MOD_ADD_METHOD(Uniform3iv);
1682 PY_MOD_ADD_METHOD(Uniform4f);
1683 PY_MOD_ADD_METHOD(Uniform4fv);
1684 PY_MOD_ADD_METHOD(Uniform4i);
1685 PY_MOD_ADD_METHOD(Uniform4iv);
1686 PY_MOD_ADD_METHOD(UniformMatrix2fv);
1687 PY_MOD_ADD_METHOD(UniformMatrix3fv);
1688 PY_MOD_ADD_METHOD(UniformMatrix4fv);
1689 PY_MOD_ADD_METHOD(UseProgram);
1690 PY_MOD_ADD_METHOD(ValidateProgram);
1691 PY_MOD_ADD_METHOD(VertexAttrib1d);
1692 PY_MOD_ADD_METHOD(VertexAttrib1dv);
1693 PY_MOD_ADD_METHOD(VertexAttrib1f);
1694 PY_MOD_ADD_METHOD(VertexAttrib1fv);
1695 PY_MOD_ADD_METHOD(VertexAttrib1s);
1696 PY_MOD_ADD_METHOD(VertexAttrib1sv);
1697 PY_MOD_ADD_METHOD(VertexAttrib2d);
1698 PY_MOD_ADD_METHOD(VertexAttrib2dv);
1699 PY_MOD_ADD_METHOD(VertexAttrib2f);
1700 PY_MOD_ADD_METHOD(VertexAttrib2fv);
1701 PY_MOD_ADD_METHOD(VertexAttrib2s);
1702 PY_MOD_ADD_METHOD(VertexAttrib2sv);
1703 PY_MOD_ADD_METHOD(VertexAttrib3d);
1704 PY_MOD_ADD_METHOD(VertexAttrib3dv);
1705 PY_MOD_ADD_METHOD(VertexAttrib3f);
1706 PY_MOD_ADD_METHOD(VertexAttrib3fv);
1707 PY_MOD_ADD_METHOD(VertexAttrib3s);
1708 PY_MOD_ADD_METHOD(VertexAttrib3sv);
1709 PY_MOD_ADD_METHOD(VertexAttrib4Nbv);
1710 PY_MOD_ADD_METHOD(VertexAttrib4Niv);
1711 PY_MOD_ADD_METHOD(VertexAttrib4Nsv);
1712 PY_MOD_ADD_METHOD(VertexAttrib4Nub);
1713 PY_MOD_ADD_METHOD(VertexAttrib4Nubv);
1714 PY_MOD_ADD_METHOD(VertexAttrib4Nuiv);
1715 PY_MOD_ADD_METHOD(VertexAttrib4Nusv);
1716 PY_MOD_ADD_METHOD(VertexAttrib4bv);
1717 PY_MOD_ADD_METHOD(VertexAttrib4d);
1718 PY_MOD_ADD_METHOD(VertexAttrib4dv);
1719 PY_MOD_ADD_METHOD(VertexAttrib4f);
1720 PY_MOD_ADD_METHOD(VertexAttrib4fv);
1721 PY_MOD_ADD_METHOD(VertexAttrib4iv);
1722 PY_MOD_ADD_METHOD(VertexAttrib4s);
1723 PY_MOD_ADD_METHOD(VertexAttrib4sv);
1724 PY_MOD_ADD_METHOD(VertexAttrib4ubv);
1725 PY_MOD_ADD_METHOD(VertexAttrib4uiv);
1726 PY_MOD_ADD_METHOD(VertexAttrib4usv);
1727 PY_MOD_ADD_METHOD(VertexAttribPointer);
1728}
1729static void init_bgl_version_2_1_methods(PyObject *submodule, PyObject *dict)
1730{
1731 /* GL_VERSION_2_1 */
1732 PY_MOD_ADD_METHOD(UniformMatrix2x3fv);
1733 PY_MOD_ADD_METHOD(UniformMatrix2x4fv);
1734 PY_MOD_ADD_METHOD(UniformMatrix3x2fv);
1735 PY_MOD_ADD_METHOD(UniformMatrix3x4fv);
1736 PY_MOD_ADD_METHOD(UniformMatrix4x2fv);
1737 PY_MOD_ADD_METHOD(UniformMatrix4x3fv);
1738}
1739static void init_bgl_version_3_0_methods(PyObject *submodule, PyObject *dict)
1740{
1741 /* GL_VERSION_3_0 */
1742 PY_MOD_ADD_METHOD(BindFramebuffer);
1743 PY_MOD_ADD_METHOD(BindRenderbuffer);
1744 PY_MOD_ADD_METHOD(BindVertexArray);
1745 PY_MOD_ADD_METHOD(BlitFramebuffer);
1746 PY_MOD_ADD_METHOD(CheckFramebufferStatus);
1747 PY_MOD_ADD_METHOD(DeleteFramebuffers);
1748 PY_MOD_ADD_METHOD(DeleteRenderbuffers);
1749 PY_MOD_ADD_METHOD(DeleteVertexArrays);
1750 PY_MOD_ADD_METHOD(FramebufferRenderbuffer);
1751 PY_MOD_ADD_METHOD(GenFramebuffers);
1752 PY_MOD_ADD_METHOD(GenRenderbuffers);
1753 PY_MOD_ADD_METHOD(GenVertexArrays);
1754 PY_MOD_ADD_METHOD(GetStringi);
1755 PY_MOD_ADD_METHOD(IsVertexArray);
1756 PY_MOD_ADD_METHOD(RenderbufferStorage);
1757 PY_MOD_ADD_METHOD(VertexAttribIPointer);
1758}
1759static void init_bgl_version_3_1_methods(PyObject *submodule, PyObject *dict)
1760{
1761 /* GL_VERSION_3_1 */
1762 PY_MOD_ADD_METHOD(BindBufferBase);
1763 PY_MOD_ADD_METHOD(BindBufferRange);
1764 PY_MOD_ADD_METHOD(GetActiveUniformBlockName);
1765 PY_MOD_ADD_METHOD(GetActiveUniformBlockiv);
1766 PY_MOD_ADD_METHOD(GetActiveUniformName);
1767 PY_MOD_ADD_METHOD(GetActiveUniformsiv);
1768 PY_MOD_ADD_METHOD(GetIntegeri_v);
1769 PY_MOD_ADD_METHOD(GetUniformBlockIndex);
1770 PY_MOD_ADD_METHOD(GetUniformIndices);
1771 PY_MOD_ADD_METHOD(UniformBlockBinding);
1772}
1773static void init_bgl_version_3_2_methods(PyObject *submodule, PyObject *dict)
1774{
1775 /* GL_VERSION_3_2 */
1776 PY_MOD_ADD_METHOD(FramebufferTexture);
1777 PY_MOD_ADD_METHOD(GetBufferParameteri64v);
1778 PY_MOD_ADD_METHOD(GetInteger64i_v);
1779 PY_MOD_ADD_METHOD(GetMultisamplefv);
1780 PY_MOD_ADD_METHOD(SampleMaski);
1781 PY_MOD_ADD_METHOD(TexImage2DMultisample);
1782 PY_MOD_ADD_METHOD(TexImage3DMultisample);
1783}
1784static void init_bgl_version_3_3_methods(PyObject * /*submodule*/, PyObject * /*dict*/)
1785{
1786 /* GL_VERSION_3_3 */
1787}
1788
1789#define PY_DICT_ADD_INT(x) py_module_dict_add_int(dict, #x, x)
1790#define PY_DICT_ADD_INT64(x) py_module_dict_add_int64(dict, #x, x)
1791
1792static void init_bgl_version_1_1_constants(PyObject *dict)
1793{
1794 /* GL_VERSION_1_1 */
1795 PY_DICT_ADD_INT(GL_ALPHA);
1796 PY_DICT_ADD_INT(GL_ALWAYS);
1797 PY_DICT_ADD_INT(GL_AND);
1798 PY_DICT_ADD_INT(GL_AND_INVERTED);
1799 PY_DICT_ADD_INT(GL_AND_REVERSE);
1800 PY_DICT_ADD_INT(GL_BACK);
1801 PY_DICT_ADD_INT(GL_BACK_LEFT);
1802 PY_DICT_ADD_INT(GL_BACK_RIGHT);
1803 PY_DICT_ADD_INT(GL_BLEND);
1804 PY_DICT_ADD_INT(GL_BLEND_DST);
1805 PY_DICT_ADD_INT(GL_BLEND_SRC);
1806 PY_DICT_ADD_INT(GL_BLUE);
1807 PY_DICT_ADD_INT(GL_BYTE);
1808 PY_DICT_ADD_INT(GL_CCW);
1809 PY_DICT_ADD_INT(GL_CLEAR);
1810 PY_DICT_ADD_INT(GL_COLOR);
1811 PY_DICT_ADD_INT(GL_COLOR_BUFFER_BIT);
1812 PY_DICT_ADD_INT(GL_COLOR_CLEAR_VALUE);
1813 PY_DICT_ADD_INT(GL_COLOR_LOGIC_OP);
1814 PY_DICT_ADD_INT(GL_COLOR_WRITEMASK);
1815 PY_DICT_ADD_INT(GL_COPY);
1816 PY_DICT_ADD_INT(GL_COPY_INVERTED);
1817 PY_DICT_ADD_INT(GL_CULL_FACE);
1818 PY_DICT_ADD_INT(GL_CULL_FACE_MODE);
1819 PY_DICT_ADD_INT(GL_CW);
1820 PY_DICT_ADD_INT(GL_DECR);
1821 PY_DICT_ADD_INT(GL_DEPTH);
1822 PY_DICT_ADD_INT(GL_DEPTH_BUFFER_BIT);
1823 PY_DICT_ADD_INT(GL_DEPTH_CLEAR_VALUE);
1824 PY_DICT_ADD_INT(GL_DEPTH_COMPONENT);
1825 PY_DICT_ADD_INT(GL_DEPTH_FUNC);
1826 PY_DICT_ADD_INT(GL_DEPTH_RANGE);
1827 PY_DICT_ADD_INT(GL_DEPTH_TEST);
1828 PY_DICT_ADD_INT(GL_DEPTH_WRITEMASK);
1829 PY_DICT_ADD_INT(GL_DITHER);
1830 PY_DICT_ADD_INT(GL_DONT_CARE);
1831 PY_DICT_ADD_INT(GL_DOUBLE);
1832 PY_DICT_ADD_INT(GL_DOUBLEBUFFER);
1833 PY_DICT_ADD_INT(GL_DRAW_BUFFER);
1834 PY_DICT_ADD_INT(GL_DST_ALPHA);
1835 PY_DICT_ADD_INT(GL_DST_COLOR);
1836 PY_DICT_ADD_INT(GL_EQUAL);
1837 PY_DICT_ADD_INT(GL_EQUIV);
1838 PY_DICT_ADD_INT(GL_EXTENSIONS);
1839 PY_DICT_ADD_INT(GL_FALSE);
1840 PY_DICT_ADD_INT(GL_FASTEST);
1841 PY_DICT_ADD_INT(GL_FILL);
1842 PY_DICT_ADD_INT(GL_FLOAT);
1843 PY_DICT_ADD_INT(GL_FRONT);
1844 PY_DICT_ADD_INT(GL_FRONT_AND_BACK);
1845 PY_DICT_ADD_INT(GL_FRONT_FACE);
1846 PY_DICT_ADD_INT(GL_FRONT_LEFT);
1847 PY_DICT_ADD_INT(GL_FRONT_RIGHT);
1848 PY_DICT_ADD_INT(GL_GEQUAL);
1849 PY_DICT_ADD_INT(GL_GREATER);
1850 PY_DICT_ADD_INT(GL_GREEN);
1851 PY_DICT_ADD_INT(GL_INCR);
1852 PY_DICT_ADD_INT(GL_INT);
1853 PY_DICT_ADD_INT(GL_INVALID_ENUM);
1854 PY_DICT_ADD_INT(GL_INVALID_OPERATION);
1855 PY_DICT_ADD_INT(GL_INVALID_VALUE);
1856 PY_DICT_ADD_INT(GL_INVERT);
1857 PY_DICT_ADD_INT(GL_KEEP);
1858 PY_DICT_ADD_INT(GL_LEFT);
1859 PY_DICT_ADD_INT(GL_LEQUAL);
1860 PY_DICT_ADD_INT(GL_LESS);
1861 PY_DICT_ADD_INT(GL_LINE);
1862 PY_DICT_ADD_INT(GL_LINEAR);
1863 PY_DICT_ADD_INT(GL_LINEAR_MIPMAP_LINEAR);
1864 PY_DICT_ADD_INT(GL_LINEAR_MIPMAP_NEAREST);
1865 PY_DICT_ADD_INT(GL_LINES);
1866 PY_DICT_ADD_INT(GL_LINE_LOOP);
1867 PY_DICT_ADD_INT(GL_LINE_SMOOTH);
1868 PY_DICT_ADD_INT(GL_LINE_SMOOTH_HINT);
1869 PY_DICT_ADD_INT(GL_LINE_STRIP);
1870 PY_DICT_ADD_INT(GL_LINE_WIDTH);
1871 PY_DICT_ADD_INT(GL_LINE_WIDTH_GRANULARITY);
1872 PY_DICT_ADD_INT(GL_LINE_WIDTH_RANGE);
1873 PY_DICT_ADD_INT(GL_LOGIC_OP_MODE);
1874 PY_DICT_ADD_INT(GL_MAX_TEXTURE_SIZE);
1875 PY_DICT_ADD_INT(GL_MAX_VIEWPORT_DIMS);
1876 PY_DICT_ADD_INT(GL_NAND);
1877 PY_DICT_ADD_INT(GL_NEAREST);
1878 PY_DICT_ADD_INT(GL_NEAREST_MIPMAP_LINEAR);
1879 PY_DICT_ADD_INT(GL_NEAREST_MIPMAP_NEAREST);
1880 PY_DICT_ADD_INT(GL_NEVER);
1881 PY_DICT_ADD_INT(GL_NICEST);
1882 PY_DICT_ADD_INT(GL_NONE);
1883 PY_DICT_ADD_INT(GL_NOOP);
1884 PY_DICT_ADD_INT(GL_NOR);
1885 PY_DICT_ADD_INT(GL_NOTEQUAL);
1886 PY_DICT_ADD_INT(GL_NO_ERROR);
1887 PY_DICT_ADD_INT(GL_ONE);
1888 PY_DICT_ADD_INT(GL_ONE_MINUS_DST_ALPHA);
1889 PY_DICT_ADD_INT(GL_ONE_MINUS_DST_COLOR);
1890 PY_DICT_ADD_INT(GL_ONE_MINUS_SRC_ALPHA);
1891 PY_DICT_ADD_INT(GL_ONE_MINUS_SRC_COLOR);
1892 PY_DICT_ADD_INT(GL_OR);
1893 PY_DICT_ADD_INT(GL_OR_INVERTED);
1894 PY_DICT_ADD_INT(GL_OR_REVERSE);
1895 PY_DICT_ADD_INT(GL_OUT_OF_MEMORY);
1896 PY_DICT_ADD_INT(GL_PACK_ALIGNMENT);
1897 PY_DICT_ADD_INT(GL_PACK_LSB_FIRST);
1898 PY_DICT_ADD_INT(GL_PACK_ROW_LENGTH);
1899 PY_DICT_ADD_INT(GL_PACK_SKIP_PIXELS);
1900 PY_DICT_ADD_INT(GL_PACK_SKIP_ROWS);
1901 PY_DICT_ADD_INT(GL_PACK_SWAP_BYTES);
1902 PY_DICT_ADD_INT(GL_POINT);
1903 PY_DICT_ADD_INT(GL_POINTS);
1904 PY_DICT_ADD_INT(GL_POINT_SIZE);
1905 PY_DICT_ADD_INT(GL_POLYGON_MODE);
1906 PY_DICT_ADD_INT(GL_POLYGON_OFFSET_FACTOR);
1907 PY_DICT_ADD_INT(GL_POLYGON_OFFSET_FILL);
1908 PY_DICT_ADD_INT(GL_POLYGON_OFFSET_LINE);
1909 PY_DICT_ADD_INT(GL_POLYGON_OFFSET_POINT);
1910 PY_DICT_ADD_INT(GL_POLYGON_OFFSET_UNITS);
1911 PY_DICT_ADD_INT(GL_POLYGON_SMOOTH);
1912 PY_DICT_ADD_INT(GL_POLYGON_SMOOTH_HINT);
1913 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_1D);
1914 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_2D);
1915 PY_DICT_ADD_INT(GL_R3_G3_B2);
1916 PY_DICT_ADD_INT(GL_READ_BUFFER);
1917 PY_DICT_ADD_INT(GL_RED);
1918 PY_DICT_ADD_INT(GL_RENDERER);
1919 PY_DICT_ADD_INT(GL_REPEAT);
1920 PY_DICT_ADD_INT(GL_REPLACE);
1921 PY_DICT_ADD_INT(GL_RGB);
1922 PY_DICT_ADD_INT(GL_RGB10);
1923 PY_DICT_ADD_INT(GL_RGB10_A2);
1924 PY_DICT_ADD_INT(GL_RGB12);
1925 PY_DICT_ADD_INT(GL_RGB16);
1926 PY_DICT_ADD_INT(GL_RGB4);
1927 PY_DICT_ADD_INT(GL_RGB5);
1928 PY_DICT_ADD_INT(GL_RGB5_A1);
1929 PY_DICT_ADD_INT(GL_RGB8);
1930 PY_DICT_ADD_INT(GL_RGBA);
1931 PY_DICT_ADD_INT(GL_RGBA12);
1932 PY_DICT_ADD_INT(GL_RGBA16);
1933 PY_DICT_ADD_INT(GL_RGBA2);
1934 PY_DICT_ADD_INT(GL_RGBA4);
1935 PY_DICT_ADD_INT(GL_RGBA8);
1936 PY_DICT_ADD_INT(GL_RIGHT);
1937 PY_DICT_ADD_INT(GL_SCISSOR_BOX);
1938 PY_DICT_ADD_INT(GL_SCISSOR_TEST);
1939 PY_DICT_ADD_INT(GL_SET);
1940 PY_DICT_ADD_INT(GL_SHORT);
1941 PY_DICT_ADD_INT(GL_SRC_ALPHA);
1942 PY_DICT_ADD_INT(GL_SRC_ALPHA_SATURATE);
1943 PY_DICT_ADD_INT(GL_SRC_COLOR);
1944 PY_DICT_ADD_INT(GL_STENCIL);
1945 PY_DICT_ADD_INT(GL_STENCIL_BUFFER_BIT);
1946 PY_DICT_ADD_INT(GL_STENCIL_CLEAR_VALUE);
1947 PY_DICT_ADD_INT(GL_STENCIL_FAIL);
1948 PY_DICT_ADD_INT(GL_STENCIL_FUNC);
1949 PY_DICT_ADD_INT(GL_STENCIL_INDEX);
1950 PY_DICT_ADD_INT(GL_STENCIL_PASS_DEPTH_FAIL);
1951 PY_DICT_ADD_INT(GL_STENCIL_PASS_DEPTH_PASS);
1952 PY_DICT_ADD_INT(GL_STENCIL_REF);
1953 PY_DICT_ADD_INT(GL_STENCIL_TEST);
1954 PY_DICT_ADD_INT(GL_STENCIL_VALUE_MASK);
1955 PY_DICT_ADD_INT(GL_STENCIL_WRITEMASK);
1956 PY_DICT_ADD_INT(GL_STEREO);
1957 PY_DICT_ADD_INT(GL_SUBPIXEL_BITS);
1958 PY_DICT_ADD_INT(GL_TEXTURE);
1959 PY_DICT_ADD_INT(GL_TEXTURE_1D);
1960 PY_DICT_ADD_INT(GL_TEXTURE_2D);
1961 PY_DICT_ADD_INT(GL_TEXTURE_ALPHA_SIZE);
1962 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_1D);
1963 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_2D);
1964 PY_DICT_ADD_INT(GL_TEXTURE_BLUE_SIZE);
1965 PY_DICT_ADD_INT(GL_TEXTURE_BORDER_COLOR);
1966 PY_DICT_ADD_INT(GL_TEXTURE_GREEN_SIZE);
1967 PY_DICT_ADD_INT(GL_TEXTURE_HEIGHT);
1968 PY_DICT_ADD_INT(GL_TEXTURE_INTERNAL_FORMAT);
1969 PY_DICT_ADD_INT(GL_TEXTURE_MAG_FILTER);
1970 PY_DICT_ADD_INT(GL_TEXTURE_MIN_FILTER);
1971 PY_DICT_ADD_INT(GL_TEXTURE_RED_SIZE);
1972 PY_DICT_ADD_INT(GL_TEXTURE_WIDTH);
1973 PY_DICT_ADD_INT(GL_TEXTURE_WRAP_S);
1974 PY_DICT_ADD_INT(GL_TEXTURE_WRAP_T);
1975 PY_DICT_ADD_INT(GL_TRIANGLES);
1976 PY_DICT_ADD_INT(GL_TRIANGLE_FAN);
1977 PY_DICT_ADD_INT(GL_TRIANGLE_STRIP);
1978 PY_DICT_ADD_INT(GL_TRUE);
1979 PY_DICT_ADD_INT(GL_UNPACK_ALIGNMENT);
1980 PY_DICT_ADD_INT(GL_UNPACK_LSB_FIRST);
1981 PY_DICT_ADD_INT(GL_UNPACK_ROW_LENGTH);
1982 PY_DICT_ADD_INT(GL_UNPACK_SKIP_PIXELS);
1983 PY_DICT_ADD_INT(GL_UNPACK_SKIP_ROWS);
1984 PY_DICT_ADD_INT(GL_UNPACK_SWAP_BYTES);
1985 PY_DICT_ADD_INT(GL_UNSIGNED_BYTE);
1986 PY_DICT_ADD_INT(GL_UNSIGNED_INT);
1987 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT);
1988 PY_DICT_ADD_INT(GL_VENDOR);
1989 PY_DICT_ADD_INT(GL_VERSION);
1990 PY_DICT_ADD_INT(GL_VIEWPORT);
1991 PY_DICT_ADD_INT(GL_XOR);
1992 PY_DICT_ADD_INT(GL_ZERO);
1993}
1994static void init_bgl_version_1_2_constants(PyObject *dict)
1995{
1996 /* GL_VERSION_1_2 */
1997 PY_DICT_ADD_INT(GL_ALIASED_LINE_WIDTH_RANGE);
1998 PY_DICT_ADD_INT(GL_BGR);
1999 PY_DICT_ADD_INT(GL_BGRA);
2000 PY_DICT_ADD_INT(GL_CLAMP_TO_EDGE);
2001 PY_DICT_ADD_INT(GL_MAX_3D_TEXTURE_SIZE);
2002 PY_DICT_ADD_INT(GL_MAX_ELEMENTS_INDICES);
2003 PY_DICT_ADD_INT(GL_MAX_ELEMENTS_VERTICES);
2004 PY_DICT_ADD_INT(GL_PACK_IMAGE_HEIGHT);
2005 PY_DICT_ADD_INT(GL_PACK_SKIP_IMAGES);
2006 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_3D);
2007 PY_DICT_ADD_INT(GL_SMOOTH_LINE_WIDTH_GRANULARITY);
2008 PY_DICT_ADD_INT(GL_SMOOTH_LINE_WIDTH_RANGE);
2009 PY_DICT_ADD_INT(GL_SMOOTH_POINT_SIZE_GRANULARITY);
2010 PY_DICT_ADD_INT(GL_SMOOTH_POINT_SIZE_RANGE);
2011 PY_DICT_ADD_INT(GL_TEXTURE_3D);
2012 PY_DICT_ADD_INT(GL_TEXTURE_BASE_LEVEL);
2013 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_3D);
2014 PY_DICT_ADD_INT(GL_TEXTURE_DEPTH);
2015 PY_DICT_ADD_INT(GL_TEXTURE_MAX_LEVEL);
2016 PY_DICT_ADD_INT(GL_TEXTURE_MAX_LOD);
2017 PY_DICT_ADD_INT(GL_TEXTURE_MIN_LOD);
2018 PY_DICT_ADD_INT(GL_TEXTURE_WRAP_R);
2019 PY_DICT_ADD_INT(GL_UNPACK_IMAGE_HEIGHT);
2020 PY_DICT_ADD_INT(GL_UNPACK_SKIP_IMAGES);
2021 PY_DICT_ADD_INT(GL_UNSIGNED_BYTE_2_3_3_REV);
2022 PY_DICT_ADD_INT(GL_UNSIGNED_BYTE_3_3_2);
2023 PY_DICT_ADD_INT(GL_UNSIGNED_INT_10_10_10_2);
2024 PY_DICT_ADD_INT(GL_UNSIGNED_INT_2_10_10_10_REV);
2025 PY_DICT_ADD_INT(GL_UNSIGNED_INT_8_8_8_8);
2026 PY_DICT_ADD_INT(GL_UNSIGNED_INT_8_8_8_8_REV);
2027 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_1_5_5_5_REV);
2028 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_4_4_4_4);
2029 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_4_4_4_4_REV);
2030 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_5_5_5_1);
2031 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_5_6_5);
2032 PY_DICT_ADD_INT(GL_UNSIGNED_SHORT_5_6_5_REV);
2033}
2034static void init_bgl_version_1_3_constants(PyObject *dict)
2035{
2036 /* GL_VERSION_1_3 */
2037 PY_DICT_ADD_INT(GL_ACTIVE_TEXTURE);
2038 PY_DICT_ADD_INT(GL_CLAMP_TO_BORDER);
2039 PY_DICT_ADD_INT(GL_COMPRESSED_RGB);
2040 PY_DICT_ADD_INT(GL_COMPRESSED_RGBA);
2041 PY_DICT_ADD_INT(GL_COMPRESSED_TEXTURE_FORMATS);
2042 PY_DICT_ADD_INT(GL_MAX_CUBE_MAP_TEXTURE_SIZE);
2043 PY_DICT_ADD_INT(GL_MULTISAMPLE);
2044 PY_DICT_ADD_INT(GL_NUM_COMPRESSED_TEXTURE_FORMATS);
2045 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_CUBE_MAP);
2046 PY_DICT_ADD_INT(GL_SAMPLES);
2047 PY_DICT_ADD_INT(GL_SAMPLE_ALPHA_TO_COVERAGE);
2048 PY_DICT_ADD_INT(GL_SAMPLE_ALPHA_TO_ONE);
2049 PY_DICT_ADD_INT(GL_SAMPLE_BUFFERS);
2050 PY_DICT_ADD_INT(GL_SAMPLE_COVERAGE);
2051 PY_DICT_ADD_INT(GL_SAMPLE_COVERAGE_INVERT);
2052 PY_DICT_ADD_INT(GL_SAMPLE_COVERAGE_VALUE);
2053 PY_DICT_ADD_INT(GL_TEXTURE0);
2054 PY_DICT_ADD_INT(GL_TEXTURE1);
2055 PY_DICT_ADD_INT(GL_TEXTURE10);
2056 PY_DICT_ADD_INT(GL_TEXTURE11);
2057 PY_DICT_ADD_INT(GL_TEXTURE12);
2058 PY_DICT_ADD_INT(GL_TEXTURE13);
2059 PY_DICT_ADD_INT(GL_TEXTURE14);
2060 PY_DICT_ADD_INT(GL_TEXTURE15);
2061 PY_DICT_ADD_INT(GL_TEXTURE16);
2062 PY_DICT_ADD_INT(GL_TEXTURE17);
2063 PY_DICT_ADD_INT(GL_TEXTURE18);
2064 PY_DICT_ADD_INT(GL_TEXTURE19);
2065 PY_DICT_ADD_INT(GL_TEXTURE2);
2066 PY_DICT_ADD_INT(GL_TEXTURE20);
2067 PY_DICT_ADD_INT(GL_TEXTURE21);
2068 PY_DICT_ADD_INT(GL_TEXTURE22);
2069 PY_DICT_ADD_INT(GL_TEXTURE23);
2070 PY_DICT_ADD_INT(GL_TEXTURE24);
2071 PY_DICT_ADD_INT(GL_TEXTURE25);
2072 PY_DICT_ADD_INT(GL_TEXTURE26);
2073 PY_DICT_ADD_INT(GL_TEXTURE27);
2074 PY_DICT_ADD_INT(GL_TEXTURE28);
2075 PY_DICT_ADD_INT(GL_TEXTURE29);
2076 PY_DICT_ADD_INT(GL_TEXTURE3);
2077 PY_DICT_ADD_INT(GL_TEXTURE30);
2078 PY_DICT_ADD_INT(GL_TEXTURE31);
2079 PY_DICT_ADD_INT(GL_TEXTURE4);
2080 PY_DICT_ADD_INT(GL_TEXTURE5);
2081 PY_DICT_ADD_INT(GL_TEXTURE6);
2082 PY_DICT_ADD_INT(GL_TEXTURE7);
2083 PY_DICT_ADD_INT(GL_TEXTURE8);
2084 PY_DICT_ADD_INT(GL_TEXTURE9);
2085 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_CUBE_MAP);
2086 PY_DICT_ADD_INT(GL_TEXTURE_COMPRESSED);
2087 PY_DICT_ADD_INT(GL_TEXTURE_COMPRESSED_IMAGE_SIZE);
2088 PY_DICT_ADD_INT(GL_TEXTURE_COMPRESSION_HINT);
2089 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP);
2090 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
2091 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
2092 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
2093 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_POSITIVE_X);
2094 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
2095 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
2096}
2097static void init_bgl_version_1_4_constants(PyObject *dict)
2098{
2099 /* GL_VERSION_1_4 */
2100 PY_DICT_ADD_INT(GL_BLEND_DST_ALPHA);
2101 PY_DICT_ADD_INT(GL_BLEND_DST_RGB);
2102 PY_DICT_ADD_INT(GL_BLEND_SRC_ALPHA);
2103 PY_DICT_ADD_INT(GL_BLEND_SRC_RGB);
2104 PY_DICT_ADD_INT(GL_CONSTANT_ALPHA);
2105 PY_DICT_ADD_INT(GL_CONSTANT_COLOR);
2106 PY_DICT_ADD_INT(GL_DECR_WRAP);
2107 PY_DICT_ADD_INT(GL_DEPTH_COMPONENT16);
2108 PY_DICT_ADD_INT(GL_DEPTH_COMPONENT24);
2109 PY_DICT_ADD_INT(GL_DEPTH_COMPONENT32);
2110 PY_DICT_ADD_INT(GL_FUNC_ADD);
2111 PY_DICT_ADD_INT(GL_FUNC_REVERSE_SUBTRACT);
2112 PY_DICT_ADD_INT(GL_FUNC_SUBTRACT);
2113 PY_DICT_ADD_INT(GL_INCR_WRAP);
2114 PY_DICT_ADD_INT(GL_MAX);
2115 PY_DICT_ADD_INT(GL_MAX_TEXTURE_LOD_BIAS);
2116 PY_DICT_ADD_INT(GL_MIN);
2117 PY_DICT_ADD_INT(GL_MIRRORED_REPEAT);
2118 PY_DICT_ADD_INT(GL_ONE_MINUS_CONSTANT_ALPHA);
2119 PY_DICT_ADD_INT(GL_ONE_MINUS_CONSTANT_COLOR);
2120 PY_DICT_ADD_INT(GL_POINT_FADE_THRESHOLD_SIZE);
2121 PY_DICT_ADD_INT(GL_TEXTURE_COMPARE_FUNC);
2122 PY_DICT_ADD_INT(GL_TEXTURE_COMPARE_MODE);
2123 PY_DICT_ADD_INT(GL_TEXTURE_DEPTH_SIZE);
2124 PY_DICT_ADD_INT(GL_TEXTURE_LOD_BIAS);
2125}
2126static void init_bgl_version_1_5_constants(PyObject *dict)
2127{
2128 /* GL_VERSION_1_5 */
2129 PY_DICT_ADD_INT(GL_ARRAY_BUFFER);
2130 PY_DICT_ADD_INT(GL_ARRAY_BUFFER_BINDING);
2131 PY_DICT_ADD_INT(GL_BUFFER_ACCESS);
2132 PY_DICT_ADD_INT(GL_BUFFER_MAPPED);
2133 PY_DICT_ADD_INT(GL_BUFFER_MAP_POINTER);
2134 PY_DICT_ADD_INT(GL_BUFFER_SIZE);
2135 PY_DICT_ADD_INT(GL_BUFFER_USAGE);
2136 PY_DICT_ADD_INT(GL_CURRENT_QUERY);
2137 PY_DICT_ADD_INT(GL_DYNAMIC_COPY);
2138 PY_DICT_ADD_INT(GL_DYNAMIC_DRAW);
2139 PY_DICT_ADD_INT(GL_DYNAMIC_READ);
2140 PY_DICT_ADD_INT(GL_ELEMENT_ARRAY_BUFFER);
2141 PY_DICT_ADD_INT(GL_ELEMENT_ARRAY_BUFFER_BINDING);
2142 PY_DICT_ADD_INT(GL_QUERY_COUNTER_BITS);
2143 PY_DICT_ADD_INT(GL_QUERY_RESULT);
2144 PY_DICT_ADD_INT(GL_QUERY_RESULT_AVAILABLE);
2145 PY_DICT_ADD_INT(GL_READ_ONLY);
2146 PY_DICT_ADD_INT(GL_READ_WRITE);
2147 PY_DICT_ADD_INT(GL_SAMPLES_PASSED);
2148 PY_DICT_ADD_INT(GL_STATIC_COPY);
2149 PY_DICT_ADD_INT(GL_STATIC_DRAW);
2150 PY_DICT_ADD_INT(GL_STATIC_READ);
2151 PY_DICT_ADD_INT(GL_STREAM_COPY);
2152 PY_DICT_ADD_INT(GL_STREAM_DRAW);
2153 PY_DICT_ADD_INT(GL_STREAM_READ);
2154 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING);
2155 PY_DICT_ADD_INT(GL_WRITE_ONLY);
2156}
2157static void init_bgl_version_2_0_constants(PyObject *dict)
2158{
2159 /* GL_VERSION_2_0 */
2160 PY_DICT_ADD_INT(GL_ACTIVE_ATTRIBUTES);
2161 PY_DICT_ADD_INT(GL_ACTIVE_ATTRIBUTE_MAX_LENGTH);
2162 PY_DICT_ADD_INT(GL_ACTIVE_UNIFORMS);
2163 PY_DICT_ADD_INT(GL_ACTIVE_UNIFORM_MAX_LENGTH);
2164 PY_DICT_ADD_INT(GL_ATTACHED_SHADERS);
2165 PY_DICT_ADD_INT(GL_BLEND_EQUATION_ALPHA);
2166 PY_DICT_ADD_INT(GL_BLEND_EQUATION_RGB);
2167 PY_DICT_ADD_INT(GL_BOOL);
2168 PY_DICT_ADD_INT(GL_BOOL_VEC2);
2169 PY_DICT_ADD_INT(GL_BOOL_VEC3);
2170 PY_DICT_ADD_INT(GL_BOOL_VEC4);
2171 PY_DICT_ADD_INT(GL_COMPILE_STATUS);
2172 PY_DICT_ADD_INT(GL_CURRENT_PROGRAM);
2173 PY_DICT_ADD_INT(GL_CURRENT_VERTEX_ATTRIB);
2174 PY_DICT_ADD_INT(GL_DELETE_STATUS);
2175 PY_DICT_ADD_INT(GL_DRAW_BUFFER0);
2176 PY_DICT_ADD_INT(GL_DRAW_BUFFER1);
2177 PY_DICT_ADD_INT(GL_DRAW_BUFFER10);
2178 PY_DICT_ADD_INT(GL_DRAW_BUFFER11);
2179 PY_DICT_ADD_INT(GL_DRAW_BUFFER12);
2180 PY_DICT_ADD_INT(GL_DRAW_BUFFER13);
2181 PY_DICT_ADD_INT(GL_DRAW_BUFFER14);
2182 PY_DICT_ADD_INT(GL_DRAW_BUFFER15);
2183 PY_DICT_ADD_INT(GL_DRAW_BUFFER2);
2184 PY_DICT_ADD_INT(GL_DRAW_BUFFER3);
2185 PY_DICT_ADD_INT(GL_DRAW_BUFFER4);
2186 PY_DICT_ADD_INT(GL_DRAW_BUFFER5);
2187 PY_DICT_ADD_INT(GL_DRAW_BUFFER6);
2188 PY_DICT_ADD_INT(GL_DRAW_BUFFER7);
2189 PY_DICT_ADD_INT(GL_DRAW_BUFFER8);
2190 PY_DICT_ADD_INT(GL_DRAW_BUFFER9);
2191 PY_DICT_ADD_INT(GL_FLOAT_MAT2);
2192 PY_DICT_ADD_INT(GL_FLOAT_MAT3);
2193 PY_DICT_ADD_INT(GL_FLOAT_MAT4);
2194 PY_DICT_ADD_INT(GL_FLOAT_VEC2);
2195 PY_DICT_ADD_INT(GL_FLOAT_VEC3);
2196 PY_DICT_ADD_INT(GL_FLOAT_VEC4);
2197 PY_DICT_ADD_INT(GL_FRAGMENT_SHADER);
2198 PY_DICT_ADD_INT(GL_FRAGMENT_SHADER_DERIVATIVE_HINT);
2199 PY_DICT_ADD_INT(GL_INFO_LOG_LENGTH);
2200 PY_DICT_ADD_INT(GL_INT_VEC2);
2201 PY_DICT_ADD_INT(GL_INT_VEC3);
2202 PY_DICT_ADD_INT(GL_INT_VEC4);
2203 PY_DICT_ADD_INT(GL_LINK_STATUS);
2204 PY_DICT_ADD_INT(GL_LOWER_LEFT);
2205 PY_DICT_ADD_INT(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
2206 PY_DICT_ADD_INT(GL_MAX_DRAW_BUFFERS);
2207 PY_DICT_ADD_INT(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS);
2208 PY_DICT_ADD_INT(GL_MAX_TEXTURE_IMAGE_UNITS);
2209 PY_DICT_ADD_INT(GL_MAX_VARYING_FLOATS);
2210 PY_DICT_ADD_INT(GL_MAX_VERTEX_ATTRIBS);
2211 PY_DICT_ADD_INT(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS);
2212 PY_DICT_ADD_INT(GL_MAX_VERTEX_UNIFORM_COMPONENTS);
2213 PY_DICT_ADD_INT(GL_POINT_SPRITE_COORD_ORIGIN);
2214 PY_DICT_ADD_INT(GL_SAMPLER_1D);
2215 PY_DICT_ADD_INT(GL_SAMPLER_1D_SHADOW);
2216 PY_DICT_ADD_INT(GL_SAMPLER_2D);
2217 PY_DICT_ADD_INT(GL_SAMPLER_2D_SHADOW);
2218 PY_DICT_ADD_INT(GL_SAMPLER_3D);
2219 PY_DICT_ADD_INT(GL_SAMPLER_CUBE);
2220 PY_DICT_ADD_INT(GL_SHADER_SOURCE_LENGTH);
2221 PY_DICT_ADD_INT(GL_SHADER_TYPE);
2222 PY_DICT_ADD_INT(GL_SHADING_LANGUAGE_VERSION);
2223 PY_DICT_ADD_INT(GL_STENCIL_BACK_FAIL);
2224 PY_DICT_ADD_INT(GL_STENCIL_BACK_FUNC);
2225 PY_DICT_ADD_INT(GL_STENCIL_BACK_PASS_DEPTH_FAIL);
2226 PY_DICT_ADD_INT(GL_STENCIL_BACK_PASS_DEPTH_PASS);
2227 PY_DICT_ADD_INT(GL_STENCIL_BACK_REF);
2228 PY_DICT_ADD_INT(GL_STENCIL_BACK_VALUE_MASK);
2229 PY_DICT_ADD_INT(GL_STENCIL_BACK_WRITEMASK);
2230 PY_DICT_ADD_INT(GL_UPPER_LEFT);
2231 PY_DICT_ADD_INT(GL_VALIDATE_STATUS);
2232 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_ENABLED);
2233 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED);
2234 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_POINTER);
2235 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_SIZE);
2236 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_STRIDE);
2237 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_TYPE);
2238 PY_DICT_ADD_INT(GL_VERTEX_PROGRAM_POINT_SIZE);
2239 PY_DICT_ADD_INT(GL_VERTEX_SHADER);
2240}
2241static void init_bgl_version_2_1_constants(PyObject *dict)
2242{
2243 /* GL_VERSION_2_1 */
2244 PY_DICT_ADD_INT(GL_COMPRESSED_SRGB);
2245 PY_DICT_ADD_INT(GL_COMPRESSED_SRGB_ALPHA);
2246 PY_DICT_ADD_INT(GL_FLOAT_MAT2x3);
2247 PY_DICT_ADD_INT(GL_FLOAT_MAT2x4);
2248 PY_DICT_ADD_INT(GL_FLOAT_MAT3x2);
2249 PY_DICT_ADD_INT(GL_FLOAT_MAT3x4);
2250 PY_DICT_ADD_INT(GL_FLOAT_MAT4x2);
2251 PY_DICT_ADD_INT(GL_FLOAT_MAT4x3);
2252 PY_DICT_ADD_INT(GL_PIXEL_PACK_BUFFER);
2253 PY_DICT_ADD_INT(GL_PIXEL_PACK_BUFFER_BINDING);
2254 PY_DICT_ADD_INT(GL_PIXEL_UNPACK_BUFFER);
2255 PY_DICT_ADD_INT(GL_PIXEL_UNPACK_BUFFER_BINDING);
2256 PY_DICT_ADD_INT(GL_SRGB);
2257 PY_DICT_ADD_INT(GL_SRGB8);
2258 PY_DICT_ADD_INT(GL_SRGB8_ALPHA8);
2259 PY_DICT_ADD_INT(GL_SRGB_ALPHA);
2260}
2261static void init_bgl_version_3_0_constants(PyObject *dict)
2262{
2263 /* GL_VERSION_3_0 */
2264 PY_DICT_ADD_INT(GL_BGRA_INTEGER);
2265 PY_DICT_ADD_INT(GL_BGR_INTEGER);
2266 PY_DICT_ADD_INT(GL_BLUE_INTEGER);
2267 PY_DICT_ADD_INT(GL_BUFFER_ACCESS_FLAGS);
2268 PY_DICT_ADD_INT(GL_BUFFER_MAP_LENGTH);
2269 PY_DICT_ADD_INT(GL_BUFFER_MAP_OFFSET);
2270 PY_DICT_ADD_INT(GL_CLAMP_READ_COLOR);
2271 PY_DICT_ADD_INT(GL_CLIP_DISTANCE0);
2272 PY_DICT_ADD_INT(GL_CLIP_DISTANCE1);
2273 PY_DICT_ADD_INT(GL_CLIP_DISTANCE2);
2274 PY_DICT_ADD_INT(GL_CLIP_DISTANCE3);
2275 PY_DICT_ADD_INT(GL_CLIP_DISTANCE4);
2276 PY_DICT_ADD_INT(GL_CLIP_DISTANCE5);
2277#if 0
2278 PY_DICT_ADD_INT(GL_CLIP_DISTANCE6);
2279 PY_DICT_ADD_INT(GL_CLIP_DISTANCE7);
2280#endif
2281 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT0);
2282 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT1);
2283 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT2);
2284 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT3);
2285 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT4);
2286 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT5);
2287 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT6);
2288 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT7);
2289 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT8);
2290 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT9);
2291 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT10);
2292 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT11);
2293 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT12);
2294 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT13);
2295 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT14);
2296 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT15);
2297#if 0
2298 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT16);
2299 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT17);
2300 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT18);
2301 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT19);
2302 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT20);
2303 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT21);
2304 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT22);
2305 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT23);
2306 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT24);
2307 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT25);
2308 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT26);
2309 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT27);
2310 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT28);
2311 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT29);
2312 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT30);
2313 PY_DICT_ADD_INT(GL_COLOR_ATTACHMENT31);
2314#endif
2315 PY_DICT_ADD_INT(GL_COMPARE_REF_TO_TEXTURE);
2316 PY_DICT_ADD_INT(GL_COMPRESSED_RED);
2317 PY_DICT_ADD_INT(GL_COMPRESSED_RED_RGTC1);
2318 PY_DICT_ADD_INT(GL_COMPRESSED_RG);
2319 PY_DICT_ADD_INT(GL_COMPRESSED_RG_RGTC2);
2320 PY_DICT_ADD_INT(GL_COMPRESSED_SIGNED_RED_RGTC1);
2321 PY_DICT_ADD_INT(GL_COMPRESSED_SIGNED_RG_RGTC2);
2322 PY_DICT_ADD_INT(GL_CONTEXT_FLAGS);
2323 PY_DICT_ADD_INT(GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT);
2324 PY_DICT_ADD_INT(GL_DEPTH24_STENCIL8);
2325 PY_DICT_ADD_INT(GL_DEPTH32F_STENCIL8);
2326 PY_DICT_ADD_INT(GL_DEPTH_ATTACHMENT);
2327 PY_DICT_ADD_INT(GL_DEPTH_COMPONENT32F);
2328 PY_DICT_ADD_INT(GL_DEPTH_STENCIL);
2329 PY_DICT_ADD_INT(GL_DEPTH_STENCIL_ATTACHMENT);
2330 PY_DICT_ADD_INT(GL_DRAW_FRAMEBUFFER);
2331 PY_DICT_ADD_INT(GL_DRAW_FRAMEBUFFER_BINDING);
2332 PY_DICT_ADD_INT(GL_FIXED_ONLY);
2333 PY_DICT_ADD_INT(GL_FLOAT_32_UNSIGNED_INT_24_8_REV);
2334 PY_DICT_ADD_INT(GL_FRAMEBUFFER);
2335 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE);
2336 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE);
2337 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING);
2338 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE);
2339 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE);
2340 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE);
2341 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME);
2342 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
2343 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE);
2344 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE);
2345 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE);
2346 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER);
2347 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL);
2348 PY_DICT_ADD_INT(GL_FRAMEBUFFER_BINDING);
2349 PY_DICT_ADD_INT(GL_FRAMEBUFFER_COMPLETE);
2350 PY_DICT_ADD_INT(GL_FRAMEBUFFER_DEFAULT);
2351 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT);
2352 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER);
2353 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);
2354 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE);
2355 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER);
2356 PY_DICT_ADD_INT(GL_FRAMEBUFFER_SRGB);
2357 PY_DICT_ADD_INT(GL_FRAMEBUFFER_UNDEFINED);
2358 PY_DICT_ADD_INT(GL_FRAMEBUFFER_UNSUPPORTED);
2359 PY_DICT_ADD_INT(GL_GREEN_INTEGER);
2360 PY_DICT_ADD_INT(GL_HALF_FLOAT);
2361 PY_DICT_ADD_INT(GL_INDEX);
2362 PY_DICT_ADD_INT(GL_INTERLEAVED_ATTRIBS);
2363 PY_DICT_ADD_INT(GL_INT_SAMPLER_1D);
2364 PY_DICT_ADD_INT(GL_INT_SAMPLER_1D_ARRAY);
2365 PY_DICT_ADD_INT(GL_INT_SAMPLER_2D);
2366 PY_DICT_ADD_INT(GL_INT_SAMPLER_2D_ARRAY);
2367 PY_DICT_ADD_INT(GL_INT_SAMPLER_3D);
2368 PY_DICT_ADD_INT(GL_INT_SAMPLER_CUBE);
2369 PY_DICT_ADD_INT(GL_INVALID_FRAMEBUFFER_OPERATION);
2370 PY_DICT_ADD_INT(GL_MAJOR_VERSION);
2371 PY_DICT_ADD_INT(GL_MAP_FLUSH_EXPLICIT_BIT);
2372 PY_DICT_ADD_INT(GL_MAP_INVALIDATE_BUFFER_BIT);
2373 PY_DICT_ADD_INT(GL_MAP_INVALIDATE_RANGE_BIT);
2374 PY_DICT_ADD_INT(GL_MAP_READ_BIT);
2375 PY_DICT_ADD_INT(GL_MAP_UNSYNCHRONIZED_BIT);
2376 PY_DICT_ADD_INT(GL_MAP_WRITE_BIT);
2377 PY_DICT_ADD_INT(GL_MAX_ARRAY_TEXTURE_LAYERS);
2378 PY_DICT_ADD_INT(GL_MAX_CLIP_DISTANCES);
2379 PY_DICT_ADD_INT(GL_MAX_COLOR_ATTACHMENTS);
2380 PY_DICT_ADD_INT(GL_MAX_PROGRAM_TEXEL_OFFSET);
2381 PY_DICT_ADD_INT(GL_MAX_RENDERBUFFER_SIZE);
2382 PY_DICT_ADD_INT(GL_MAX_SAMPLES);
2383 PY_DICT_ADD_INT(GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS);
2384 PY_DICT_ADD_INT(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS);
2385 PY_DICT_ADD_INT(GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS);
2386 PY_DICT_ADD_INT(GL_MAX_VARYING_COMPONENTS);
2387 PY_DICT_ADD_INT(GL_MINOR_VERSION);
2388 PY_DICT_ADD_INT(GL_MIN_PROGRAM_TEXEL_OFFSET);
2389 PY_DICT_ADD_INT(GL_NUM_EXTENSIONS);
2390 PY_DICT_ADD_INT(GL_PRIMITIVES_GENERATED);
2391 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_1D_ARRAY);
2392 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_2D_ARRAY);
2393 PY_DICT_ADD_INT(GL_QUERY_BY_REGION_NO_WAIT);
2394 PY_DICT_ADD_INT(GL_QUERY_BY_REGION_WAIT);
2395 PY_DICT_ADD_INT(GL_QUERY_NO_WAIT);
2396 PY_DICT_ADD_INT(GL_QUERY_WAIT);
2397 PY_DICT_ADD_INT(GL_R11F_G11F_B10F);
2398 PY_DICT_ADD_INT(GL_R16);
2399 PY_DICT_ADD_INT(GL_R16F);
2400 PY_DICT_ADD_INT(GL_R16I);
2401 PY_DICT_ADD_INT(GL_R16UI);
2402 PY_DICT_ADD_INT(GL_R32F);
2403 PY_DICT_ADD_INT(GL_R32I);
2404 PY_DICT_ADD_INT(GL_R32UI);
2405 PY_DICT_ADD_INT(GL_R8);
2406 PY_DICT_ADD_INT(GL_R8I);
2407 PY_DICT_ADD_INT(GL_R8UI);
2408 PY_DICT_ADD_INT(GL_RASTERIZER_DISCARD);
2409 PY_DICT_ADD_INT(GL_READ_FRAMEBUFFER);
2410 PY_DICT_ADD_INT(GL_READ_FRAMEBUFFER_BINDING);
2411 PY_DICT_ADD_INT(GL_RED_INTEGER);
2412 PY_DICT_ADD_INT(GL_RENDERBUFFER);
2413 PY_DICT_ADD_INT(GL_RENDERBUFFER_ALPHA_SIZE);
2414 PY_DICT_ADD_INT(GL_RENDERBUFFER_BINDING);
2415 PY_DICT_ADD_INT(GL_RENDERBUFFER_BLUE_SIZE);
2416 PY_DICT_ADD_INT(GL_RENDERBUFFER_DEPTH_SIZE);
2417 PY_DICT_ADD_INT(GL_RENDERBUFFER_GREEN_SIZE);
2418 PY_DICT_ADD_INT(GL_RENDERBUFFER_HEIGHT);
2419 PY_DICT_ADD_INT(GL_RENDERBUFFER_INTERNAL_FORMAT);
2420 PY_DICT_ADD_INT(GL_RENDERBUFFER_RED_SIZE);
2421 PY_DICT_ADD_INT(GL_RENDERBUFFER_SAMPLES);
2422 PY_DICT_ADD_INT(GL_RENDERBUFFER_STENCIL_SIZE);
2423 PY_DICT_ADD_INT(GL_RENDERBUFFER_WIDTH);
2424 PY_DICT_ADD_INT(GL_RG);
2425 PY_DICT_ADD_INT(GL_RG16);
2426 PY_DICT_ADD_INT(GL_RG16F);
2427 PY_DICT_ADD_INT(GL_RG16I);
2428 PY_DICT_ADD_INT(GL_RG16UI);
2429 PY_DICT_ADD_INT(GL_RG32F);
2430 PY_DICT_ADD_INT(GL_RG32I);
2431 PY_DICT_ADD_INT(GL_RG32UI);
2432 PY_DICT_ADD_INT(GL_RG8);
2433 PY_DICT_ADD_INT(GL_RG8I);
2434 PY_DICT_ADD_INT(GL_RG8UI);
2435 PY_DICT_ADD_INT(GL_RGB16F);
2436 PY_DICT_ADD_INT(GL_RGB16I);
2437 PY_DICT_ADD_INT(GL_RGB16UI);
2438 PY_DICT_ADD_INT(GL_RGB32F);
2439 PY_DICT_ADD_INT(GL_RGB32I);
2440 PY_DICT_ADD_INT(GL_RGB32UI);
2441 PY_DICT_ADD_INT(GL_RGB8I);
2442 PY_DICT_ADD_INT(GL_RGB8UI);
2443 PY_DICT_ADD_INT(GL_RGB9_E5);
2444 PY_DICT_ADD_INT(GL_RGBA16F);
2445 PY_DICT_ADD_INT(GL_RGBA16I);
2446 PY_DICT_ADD_INT(GL_RGBA16UI);
2447 PY_DICT_ADD_INT(GL_RGBA32F);
2448 PY_DICT_ADD_INT(GL_RGBA32I);
2449 PY_DICT_ADD_INT(GL_RGBA32UI);
2450 PY_DICT_ADD_INT(GL_RGBA8I);
2451 PY_DICT_ADD_INT(GL_RGBA8UI);
2452 PY_DICT_ADD_INT(GL_RGBA_INTEGER);
2453 PY_DICT_ADD_INT(GL_RGB_INTEGER);
2454 PY_DICT_ADD_INT(GL_RG_INTEGER);
2455 PY_DICT_ADD_INT(GL_SAMPLER_1D_ARRAY);
2456 PY_DICT_ADD_INT(GL_SAMPLER_1D_ARRAY_SHADOW);
2457 PY_DICT_ADD_INT(GL_SAMPLER_2D_ARRAY);
2458 PY_DICT_ADD_INT(GL_SAMPLER_2D_ARRAY_SHADOW);
2459 PY_DICT_ADD_INT(GL_SAMPLER_CUBE_SHADOW);
2460 PY_DICT_ADD_INT(GL_SEPARATE_ATTRIBS);
2461 PY_DICT_ADD_INT(GL_STENCIL_ATTACHMENT);
2462 PY_DICT_ADD_INT(GL_STENCIL_INDEX1);
2463 PY_DICT_ADD_INT(GL_STENCIL_INDEX16);
2464 PY_DICT_ADD_INT(GL_STENCIL_INDEX4);
2465 PY_DICT_ADD_INT(GL_STENCIL_INDEX8);
2466 PY_DICT_ADD_INT(GL_TEXTURE_1D_ARRAY);
2467 PY_DICT_ADD_INT(GL_TEXTURE_2D_ARRAY);
2468 PY_DICT_ADD_INT(GL_TEXTURE_ALPHA_TYPE);
2469 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_1D_ARRAY);
2470 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_2D_ARRAY);
2471 PY_DICT_ADD_INT(GL_TEXTURE_BLUE_TYPE);
2472 PY_DICT_ADD_INT(GL_TEXTURE_DEPTH_TYPE);
2473 PY_DICT_ADD_INT(GL_TEXTURE_GREEN_TYPE);
2474 PY_DICT_ADD_INT(GL_TEXTURE_RED_TYPE);
2475 PY_DICT_ADD_INT(GL_TEXTURE_SHARED_SIZE);
2476 PY_DICT_ADD_INT(GL_TEXTURE_STENCIL_SIZE);
2477 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_BUFFER);
2478 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING);
2479 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_BUFFER_MODE);
2480 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_BUFFER_SIZE);
2481 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_BUFFER_START);
2482 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN);
2483 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_VARYINGS);
2484 PY_DICT_ADD_INT(GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH);
2485 PY_DICT_ADD_INT(GL_UNSIGNED_INT_10F_11F_11F_REV);
2486 PY_DICT_ADD_INT(GL_UNSIGNED_INT_24_8);
2487 PY_DICT_ADD_INT(GL_UNSIGNED_INT_5_9_9_9_REV);
2488 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_1D);
2489 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_1D_ARRAY);
2490 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_2D);
2491 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_2D_ARRAY);
2492 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_3D);
2493 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_CUBE);
2494 PY_DICT_ADD_INT(GL_UNSIGNED_INT_VEC2);
2495 PY_DICT_ADD_INT(GL_UNSIGNED_INT_VEC3);
2496 PY_DICT_ADD_INT(GL_UNSIGNED_INT_VEC4);
2497 PY_DICT_ADD_INT(GL_UNSIGNED_NORMALIZED);
2498 PY_DICT_ADD_INT(GL_VERTEX_ARRAY_BINDING);
2499 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_INTEGER);
2500}
2501static void init_bgl_version_3_1_constants(PyObject *dict)
2502{
2503 /* GL_VERSION_3_1 */
2504 PY_DICT_ADD_INT(GL_ACTIVE_UNIFORM_BLOCKS);
2505 PY_DICT_ADD_INT(GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH);
2506 PY_DICT_ADD_INT(GL_COPY_READ_BUFFER);
2507 PY_DICT_ADD_INT(GL_COPY_WRITE_BUFFER);
2508 PY_DICT_ADD_INT(GL_INT_SAMPLER_2D_RECT);
2509 PY_DICT_ADD_INT(GL_INT_SAMPLER_BUFFER);
2510 PY_DICT_ADD_INT(GL_INVALID_INDEX);
2511 PY_DICT_ADD_INT(GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS);
2512 PY_DICT_ADD_INT(GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS);
2513 PY_DICT_ADD_INT(GL_MAX_COMBINED_UNIFORM_BLOCKS);
2514 PY_DICT_ADD_INT(GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS);
2515 PY_DICT_ADD_INT(GL_MAX_FRAGMENT_UNIFORM_BLOCKS);
2516 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_UNIFORM_BLOCKS);
2517 PY_DICT_ADD_INT(GL_MAX_RECTANGLE_TEXTURE_SIZE);
2518 PY_DICT_ADD_INT(GL_MAX_TEXTURE_BUFFER_SIZE);
2519 PY_DICT_ADD_INT(GL_MAX_UNIFORM_BLOCK_SIZE);
2520 PY_DICT_ADD_INT(GL_MAX_UNIFORM_BUFFER_BINDINGS);
2521 PY_DICT_ADD_INT(GL_MAX_VERTEX_UNIFORM_BLOCKS);
2522 PY_DICT_ADD_INT(GL_PRIMITIVE_RESTART);
2523 PY_DICT_ADD_INT(GL_PRIMITIVE_RESTART_INDEX);
2524 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_RECTANGLE);
2525 PY_DICT_ADD_INT(GL_R16_SNORM);
2526 PY_DICT_ADD_INT(GL_R8_SNORM);
2527 PY_DICT_ADD_INT(GL_RG16_SNORM);
2528 PY_DICT_ADD_INT(GL_RG8_SNORM);
2529 PY_DICT_ADD_INT(GL_RGB16_SNORM);
2530 PY_DICT_ADD_INT(GL_RGB8_SNORM);
2531 PY_DICT_ADD_INT(GL_RGBA16_SNORM);
2532 PY_DICT_ADD_INT(GL_RGBA8_SNORM);
2533 PY_DICT_ADD_INT(GL_SAMPLER_2D_RECT);
2534 PY_DICT_ADD_INT(GL_SAMPLER_2D_RECT_SHADOW);
2535 PY_DICT_ADD_INT(GL_SAMPLER_BUFFER);
2536 PY_DICT_ADD_INT(GL_SIGNED_NORMALIZED);
2537 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_BUFFER);
2538 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_RECTANGLE);
2539 PY_DICT_ADD_INT(GL_TEXTURE_BUFFER);
2540 PY_DICT_ADD_INT(GL_TEXTURE_BUFFER_DATA_STORE_BINDING);
2541 PY_DICT_ADD_INT(GL_TEXTURE_RECTANGLE);
2542 PY_DICT_ADD_INT(GL_UNIFORM_ARRAY_STRIDE);
2543 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS);
2544 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES);
2545 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_BINDING);
2546 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_DATA_SIZE);
2547 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_INDEX);
2548 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_NAME_LENGTH);
2549 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER);
2550 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER);
2551 PY_DICT_ADD_INT(GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER);
2552 PY_DICT_ADD_INT(GL_UNIFORM_BUFFER);
2553 PY_DICT_ADD_INT(GL_UNIFORM_BUFFER_BINDING);
2554 PY_DICT_ADD_INT(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT);
2555 PY_DICT_ADD_INT(GL_UNIFORM_BUFFER_SIZE);
2556 PY_DICT_ADD_INT(GL_UNIFORM_BUFFER_START);
2557 PY_DICT_ADD_INT(GL_UNIFORM_IS_ROW_MAJOR);
2558 PY_DICT_ADD_INT(GL_UNIFORM_MATRIX_STRIDE);
2559 PY_DICT_ADD_INT(GL_UNIFORM_NAME_LENGTH);
2560 PY_DICT_ADD_INT(GL_UNIFORM_OFFSET);
2561 PY_DICT_ADD_INT(GL_UNIFORM_SIZE);
2562 PY_DICT_ADD_INT(GL_UNIFORM_TYPE);
2563 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_2D_RECT);
2564 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_BUFFER);
2565}
2566static void init_bgl_version_3_2_constants(PyObject *dict)
2567/* GL_VERSION_3_2 */
2568{
2569 PY_DICT_ADD_INT(GL_ALREADY_SIGNALED);
2570 PY_DICT_ADD_INT(GL_CONDITION_SATISFIED);
2571 PY_DICT_ADD_INT(GL_CONTEXT_COMPATIBILITY_PROFILE_BIT);
2572 PY_DICT_ADD_INT(GL_CONTEXT_CORE_PROFILE_BIT);
2573 PY_DICT_ADD_INT(GL_CONTEXT_PROFILE_MASK);
2574 PY_DICT_ADD_INT(GL_DEPTH_CLAMP);
2575 PY_DICT_ADD_INT(GL_FIRST_VERTEX_CONVENTION);
2576 PY_DICT_ADD_INT(GL_FRAMEBUFFER_ATTACHMENT_LAYERED);
2577 PY_DICT_ADD_INT(GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS);
2578 PY_DICT_ADD_INT(GL_GEOMETRY_INPUT_TYPE);
2579 PY_DICT_ADD_INT(GL_GEOMETRY_OUTPUT_TYPE);
2580 PY_DICT_ADD_INT(GL_GEOMETRY_SHADER);
2581 PY_DICT_ADD_INT(GL_GEOMETRY_VERTICES_OUT);
2582 PY_DICT_ADD_INT(GL_INT_SAMPLER_2D_MULTISAMPLE);
2583 PY_DICT_ADD_INT(GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY);
2584 PY_DICT_ADD_INT(GL_LAST_VERTEX_CONVENTION);
2585 PY_DICT_ADD_INT(GL_LINES_ADJACENCY);
2586 PY_DICT_ADD_INT(GL_LINE_STRIP_ADJACENCY);
2587 PY_DICT_ADD_INT(GL_MAX_COLOR_TEXTURE_SAMPLES);
2588 PY_DICT_ADD_INT(GL_MAX_DEPTH_TEXTURE_SAMPLES);
2589 PY_DICT_ADD_INT(GL_MAX_FRAGMENT_INPUT_COMPONENTS);
2590 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_INPUT_COMPONENTS);
2591 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_OUTPUT_COMPONENTS);
2592 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_OUTPUT_VERTICES);
2593 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS);
2594 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS);
2595 PY_DICT_ADD_INT(GL_MAX_GEOMETRY_UNIFORM_COMPONENTS);
2596 PY_DICT_ADD_INT(GL_MAX_INTEGER_SAMPLES);
2597 PY_DICT_ADD_INT(GL_MAX_SAMPLE_MASK_WORDS);
2598 PY_DICT_ADD_INT(GL_MAX_SERVER_WAIT_TIMEOUT);
2599 PY_DICT_ADD_INT(GL_MAX_VERTEX_OUTPUT_COMPONENTS);
2600 PY_DICT_ADD_INT(GL_OBJECT_TYPE);
2601 PY_DICT_ADD_INT(GL_PROGRAM_POINT_SIZE);
2602 PY_DICT_ADD_INT(GL_PROVOKING_VERTEX);
2603 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_2D_MULTISAMPLE);
2604 PY_DICT_ADD_INT(GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY);
2605 PY_DICT_ADD_INT(GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION);
2606 PY_DICT_ADD_INT(GL_SAMPLER_2D_MULTISAMPLE);
2607 PY_DICT_ADD_INT(GL_SAMPLER_2D_MULTISAMPLE_ARRAY);
2608 PY_DICT_ADD_INT(GL_SAMPLE_MASK);
2609 PY_DICT_ADD_INT(GL_SAMPLE_MASK_VALUE);
2610 PY_DICT_ADD_INT(GL_SAMPLE_POSITION);
2611 PY_DICT_ADD_INT(GL_SIGNALED);
2612 PY_DICT_ADD_INT(GL_SYNC_CONDITION);
2613 PY_DICT_ADD_INT(GL_SYNC_FENCE);
2614 PY_DICT_ADD_INT(GL_SYNC_FLAGS);
2615 PY_DICT_ADD_INT(GL_SYNC_FLUSH_COMMANDS_BIT);
2616 PY_DICT_ADD_INT(GL_SYNC_GPU_COMMANDS_COMPLETE);
2617 PY_DICT_ADD_INT(GL_SYNC_STATUS);
2618 PY_DICT_ADD_INT(GL_TEXTURE_2D_MULTISAMPLE);
2619 PY_DICT_ADD_INT(GL_TEXTURE_2D_MULTISAMPLE_ARRAY);
2620 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_2D_MULTISAMPLE);
2621 PY_DICT_ADD_INT(GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY);
2622 PY_DICT_ADD_INT(GL_TEXTURE_CUBE_MAP_SEAMLESS);
2623 PY_DICT_ADD_INT(GL_TEXTURE_FIXED_SAMPLE_LOCATIONS);
2624 PY_DICT_ADD_INT(GL_TEXTURE_SAMPLES);
2625 PY_DICT_ADD_INT(GL_TIMEOUT_EXPIRED);
2626 PY_DICT_ADD_INT64(GL_TIMEOUT_IGNORED);
2627 PY_DICT_ADD_INT(GL_TRIANGLES_ADJACENCY);
2628 PY_DICT_ADD_INT(GL_TRIANGLE_STRIP_ADJACENCY);
2629 PY_DICT_ADD_INT(GL_UNSIGNALED);
2630 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE);
2631 PY_DICT_ADD_INT(GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY);
2632 PY_DICT_ADD_INT(GL_WAIT_FAILED);
2633}
2634static void init_bgl_version_3_3_constants(PyObject *dict)
2635{
2636 /* GL_VERSION_3_3 */
2637 PY_DICT_ADD_INT(GL_ANY_SAMPLES_PASSED);
2638 PY_DICT_ADD_INT(GL_INT_2_10_10_10_REV);
2639 PY_DICT_ADD_INT(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS);
2640 PY_DICT_ADD_INT(GL_ONE_MINUS_SRC1_ALPHA);
2641 PY_DICT_ADD_INT(GL_ONE_MINUS_SRC1_COLOR);
2642 PY_DICT_ADD_INT(GL_RGB10_A2UI);
2643 PY_DICT_ADD_INT(GL_SAMPLER_BINDING);
2644 PY_DICT_ADD_INT(GL_SRC1_COLOR);
2645 PY_DICT_ADD_INT(GL_TEXTURE_SWIZZLE_A);
2646 PY_DICT_ADD_INT(GL_TEXTURE_SWIZZLE_B);
2647 PY_DICT_ADD_INT(GL_TEXTURE_SWIZZLE_G);
2648 PY_DICT_ADD_INT(GL_TEXTURE_SWIZZLE_R);
2649 PY_DICT_ADD_INT(GL_TEXTURE_SWIZZLE_RGBA);
2650 PY_DICT_ADD_INT(GL_TIMESTAMP);
2651 PY_DICT_ADD_INT(GL_TIME_ELAPSED);
2652 PY_DICT_ADD_INT(GL_VERTEX_ATTRIB_ARRAY_DIVISOR);
2653}
2654
2655PyObject *BPyInit_bgl()
2656{
2657 PyObject *submodule, *dict;
2658 submodule = PyModule_Create(&BGL_module_def);
2659 dict = PyModule_GetDict(submodule);
2660
2661 if (PyType_Ready(&BGL_bufferType) < 0) {
2662 return nullptr; /* should never happen */
2663 }
2664
2665/* Building as a Python module loads all modules
2666 * (see code comment around #PyImport_ExtendInittab usage).
2667 * The result of this is the `bgl` warning would always show when importing `bpy`.
2668 * In the case of Blender as a Python module, suppress the warning. */
2669#ifndef WITH_PYTHON_MODULE
2671 CLOG_WARN(&LOG,
2672 "'bgl' imported without an OpenGL backend. Please update your add-ons to use the "
2673 "'gpu' module.");
2674 }
2675#else
2677#endif
2678
2679 PyModule_AddObjectRef(submodule, "Buffer", (PyObject *)&BGL_bufferType);
2680
2681 init_bgl_version_1_0_methods(submodule, dict);
2682 init_bgl_version_1_1_methods(submodule, dict);
2683 init_bgl_version_1_2_methods(submodule, dict);
2684 init_bgl_version_1_3_methods(submodule, dict);
2685 init_bgl_version_1_4_methods(submodule, dict);
2686 init_bgl_version_1_5_methods(submodule, dict);
2687 init_bgl_version_2_0_methods(submodule, dict);
2688 init_bgl_version_2_1_methods(submodule, dict);
2689 init_bgl_version_3_0_methods(submodule, dict);
2690 init_bgl_version_3_1_methods(submodule, dict);
2691 init_bgl_version_3_2_methods(submodule, dict);
2692 init_bgl_version_3_3_methods(submodule, dict);
2693
2705
2706 return submodule;
2707}
2708
2709static PyObject *Method_ShaderSource(PyObject * /*self*/, PyObject *args)
2710{
2711 uint shader;
2712 const char *source;
2713
2714 if (!PyArg_ParseTuple(args, "Is", &shader, &source)) {
2715 return nullptr;
2716 }
2717
2718#ifdef WITH_OPENGL
2719 glShaderSource(shader, 1, (const char **)&source, nullptr);
2720 Py_RETURN_NONE;
2721#else
2723 return nullptr;
2724#endif
2725}
2726
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:599
unsigned int uint
#define UNUSED_VARS(...)
#define STRINGIFY(x)
#define ELEM(...)
#define CLOG_WARN(clg_ref,...)
Definition CLG_log.h:181
eGPUBackendType GPU_backend_get_type()
Read Guarded memory(de)allocation.
bool stop
Definition WM_types.hh:1016
static int gl_buffer_type_from_py_buffer(Py_buffer *pybuffer)
Definition bgl.cc:505
static void bgl_no_opengl_error()
Definition bgl.cc:1156
static void py_module_dict_add_method(PyObject *submodule, PyObject *dict, PyMethodDef *method_def, bool is_valid)
Definition bgl.cc:1476
static int Buffer_ass_subscript(Buffer *self, PyObject *item, PyObject *value)
Definition bgl.cc:1048
static PyGetSetDef Buffer_getseters[]
Definition bgl.cc:639
static PyObject * Buffer_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end)
Definition bgl.cc:917
static void init_bgl_version_1_2_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1582
static void Buffer_dealloc(Buffer *self)
Definition bgl.cc:1080
static void init_bgl_version_3_0_constants(PyObject *dict)
Definition bgl.cc:2261
int BGL_typeSize(int type)
Definition bgl.cc:488
PyTypeObject BGL_bufferType
Definition bgl.cc:644
static void init_bgl_version_3_0_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1739
static PyObject * Buffer_dimensions(Buffer *self, void *)
Definition bgl.cc:604
static void py_module_dict_add_int(PyObject *dict, const char *name, int value)
Definition bgl.cc:1462
static PySequenceMethods Buffer_SeqMethods
Definition bgl.cc:549
#define BGL_Wrap(funcname, ret, arg_list)
Definition bgl.cc:1161
static void init_bgl_version_2_1_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1729
#define MAX_DIMENSIONS
Definition bgl.cc:767
static void init_bgl_version_1_3_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1590
static void init_bgl_version_1_4_constants(PyObject *dict)
Definition bgl.cc:2097
static PyObject * Buffer_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
Definition bgl.cc:768
static PyMappingMethods Buffer_AsMapping
Definition bgl.cc:562
static void init_bgl_version_3_2_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1773
static PyModuleDef BGL_module_def
Definition bgl.cc:1450
static Py_ssize_t Buffer_len(Buffer *self)
Definition bgl.cc:874
#define PY_DICT_ADD_INT(x)
Definition bgl.cc:1789
static void init_bgl_version_1_0_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1513
static int Buffer_ass_slice(Buffer *self, Py_ssize_t begin, Py_ssize_t end, PyObject *seq)
Definition bgl.cc:968
static void init_bgl_version_1_2_constants(PyObject *dict)
Definition bgl.cc:1994
static Buffer * BGL_MakeBuffer_FromData(PyObject *parent, int type, int ndimensions, const int *dimensions, void *buf)
Definition bgl.cc:696
static void init_bgl_version_1_5_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1609
static PyObject * Method_ShaderSource(PyObject *self, PyObject *args)
Definition bgl.cc:2709
static void init_bgl_version_3_3_methods(PyObject *, PyObject *)
Definition bgl.cc:1784
static PyObject * Buffer_to_list(Buffer *self)
Definition bgl.cc:571
static void init_bgl_version_2_1_constants(PyObject *dict)
Definition bgl.cc:2241
static PyObject * Buffer_subscript(Buffer *self, PyObject *item)
Definition bgl.cc:1012
#define PY_DICT_ADD_INT64(x)
Definition bgl.cc:1790
static void init_bgl_version_1_1_constants(PyObject *dict)
Definition bgl.cc:1792
#define PY_MOD_ADD_METHOD(func)
Definition bgl.cc:1505
static PyObject * Buffer_item(Buffer *self, Py_ssize_t i)
Definition bgl.cc:879
static PyObject * Buffer_repr(Buffer *self)
Definition bgl.cc:1094
static void init_bgl_version_1_4_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1603
static PyMethodDef Buffer_methods[]
Definition bgl.cc:626
Buffer * BGL_MakeBuffer(int type, int ndimensions, const int *dimensions, const void *initbuffer)
Definition bgl.cc:712
static PyObject * Buffer_to_list_recursive(Buffer *self)
Definition bgl.cc:583
static void init_bgl_version_3_2_constants(PyObject *dict)
Definition bgl.cc:2566
static void init_bgl_version_1_3_constants(PyObject *dict)
Definition bgl.cc:2034
static void init_bgl_version_1_1_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1565
static bool compare_dimensions(int ndim, const int *dim1, const Py_ssize_t *dim2)
Definition bgl.cc:533
static void init_bgl_version_2_0_constants(PyObject *dict)
Definition bgl.cc:2157
static void init_bgl_version_2_0_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1632
static void init_bgl_version_3_1_methods(PyObject *submodule, PyObject *dict)
Definition bgl.cc:1759
static void init_bgl_version_1_5_constants(PyObject *dict)
Definition bgl.cc:2126
static void py_module_dict_add_int64(PyObject *dict, const char *name, int64_t value)
Definition bgl.cc:1469
PyObject * BPyInit_bgl()
Definition bgl.cc:2655
static void init_bgl_version_3_3_constants(PyObject *dict)
Definition bgl.cc:2634
static void init_bgl_version_3_1_constants(PyObject *dict)
Definition bgl.cc:2501
static int Buffer_ass_item(Buffer *self, Py_ssize_t i, PyObject *v)
Definition bgl.cc:933
iter begin(iter)
ATTR_WARN_UNUSED_RESULT const BMVert * v
PyObject * self
long long int int64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
int count
format
#define LOG(severity)
Definition log.h:32
void * MEM_mallocN(size_t len, const char *str)
Definition mallocn.cc:128
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
Definition mallocn.cc:133
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
#define G(x, y, z)
static void init(bNodeTree *, bNode *node)
char PyC_StructFmt_type_from_str(const char *typestr)
bool PyC_StructFmt_type_is_int_any(char format)
bool PyC_StructFmt_type_is_byte(char format)
void PyC_FileAndNum(const char **r_filename, int *r_lineno)
bool PyC_StructFmt_type_is_float_any(char format)
return ret
void * offset
Definition bgl.cc:171
Buffer * buffer
Definition bgl.cc:170
i
Definition text_draw.cc:230
uint len