34 #include "../generic/py_capi_utils.h"
53 #define void_ref(num) &bgl_var##num
54 #define void_def(num) char bgl_var##num
57 # define buffer_str "O!"
58 # define buffer_var(number) (bgl_buffer##number)->buf.asvoid
59 # define buffer_ref(number) &BGL_bufferType, &bgl_buffer##number
60 # define buffer_def(number) Buffer *bgl_buffer##number
66 #define GLbooleanP_str "O!"
67 #define GLbooleanP_var(number) (bgl_buffer##number)->buf.asvoid
68 #define GLbooleanP_ref(number) &BGL_bufferType, &bgl_buffer##number
69 #define GLbooleanP_def(number) Buffer *bgl_buffer##number
71 #define GLbyteP_str "O!"
72 #define GLbyteP_var(number) (bgl_buffer##number)->buf.asvoid
73 #define GLbyteP_ref(number) &BGL_bufferType, &bgl_buffer##number
74 #define GLbyteP_def(number) Buffer *bgl_buffer##number
76 #define GLubyteP_str "O!"
77 #define GLubyteP_var(number) (bgl_buffer##number)->buf.asvoid
78 #define GLubyteP_ref(number) &BGL_bufferType, &bgl_buffer##number
79 #define GLubyteP_def(number) Buffer *bgl_buffer##number
81 #define GLintP_str "O!"
82 #define GLintP_var(number) (bgl_buffer##number)->buf.asvoid
83 #define GLintP_ref(number) &BGL_bufferType, &bgl_buffer##number
84 #define GLintP_def(number) Buffer *bgl_buffer##number
86 #define GLint64P_str "O!"
87 #define GLint64P_var(number) (bgl_buffer##number)->buf.asvoid
88 #define GLint64P_ref(number) &BGL_bufferType, &bgl_buffer##number
89 #define GLint64P_def(number) Buffer *bgl_buffer##number
91 #define GLenumP_str "O!"
92 #define GLenumP_var(number) (bgl_buffer##number)->buf.asvoid
93 #define GLenumP_ref(number) &BGL_bufferType, &bgl_buffer##number
94 #define GLenumP_def(number) Buffer *bgl_buffer##number
96 #define GLuintP_str "O!"
97 #define GLuintP_var(number) (bgl_buffer##number)->buf.asvoid
98 #define GLuintP_ref(number) &BGL_bufferType, &bgl_buffer##number
99 #define GLuintP_def(number) Buffer *bgl_buffer##number
102 # define GLuint64P_str "O!"
103 # define GLuint64P_var(number) (bgl_buffer##number)->buf.asvoid
104 # define GLuint64P_ref(number) &BGL_bufferType, &bgl_buffer##number
105 # define GLuint64P_def(number) Buffer *bgl_buffer##number
108 #define GLshortP_str "O!"
109 #define GLshortP_var(number) (bgl_buffer##number)->buf.asvoid
110 #define GLshortP_ref(number) &BGL_bufferType, &bgl_buffer##number
111 #define GLshortP_def(number) Buffer *bgl_buffer##number
113 #define GLushortP_str "O!"
114 #define GLushortP_var(number) (bgl_buffer##number)->buf.asvoid
115 #define GLushortP_ref(number) &BGL_bufferType, &bgl_buffer##number
116 #define GLushortP_def(number) Buffer *bgl_buffer##number
118 #define GLfloatP_str "O!"
119 #define GLfloatP_var(number) (bgl_buffer##number)->buf.asvoid
120 #define GLfloatP_ref(number) &BGL_bufferType, &bgl_buffer##number
121 #define GLfloatP_def(number) Buffer *bgl_buffer##number
123 #define GLdoubleP_str "O!"
124 #define GLdoubleP_var(number) (bgl_buffer##number)->buf.asvoid
125 #define GLdoubleP_ref(number) &BGL_bufferType, &bgl_buffer##number
126 #define GLdoubleP_def(number) Buffer *bgl_buffer##number
129 # define GLclampfP_str "O!"
130 # define GLclampfP_var(number) (bgl_buffer##number)->buf.asvoid
131 # define GLclampfP_ref(number) &BGL_bufferType, &bgl_buffer##number
132 # define GLclampfP_def(number) Buffer *bgl_buffer##number
140 #define GLvoidP_str "O&"
141 #define GLvoidP_var(number) \
142 ((bgl_buffer##number.buffer) ? (bgl_buffer##number.buffer)->buf.asvoid : \
143 (bgl_buffer##number.offset))
144 #define GLvoidP_ref(number) BGL_BufferOrOffsetConverter, &bgl_buffer##number
145 #define GLvoidP_def(number) BufferOrOffset bgl_buffer##number
147 #define GLsizeiP_str "O!"
148 #define GLsizeiP_var(number) (bgl_buffer##number)->buf.asvoid
149 #define GLsizeiP_ref(number) &BGL_bufferType, &bgl_buffer##number
150 #define GLsizeiP_def(number) Buffer *bgl_buffer##number
152 #define GLcharP_str "O!"
153 #define GLcharP_var(number) (bgl_buffer##number)->buf.asvoid
154 #define GLcharP_ref(number) &BGL_bufferType, &bgl_buffer##number
155 #define GLcharP_def(number) Buffer *bgl_buffer##number
158 # define buffer_str "O!"
159 # define buffer_var(number) (bgl_buffer##number)->buf.asvoid
160 # define buffer_ref(number) &BGL_bufferType, &bgl_buffer##number
161 # define buffer_def(number) Buffer *bgl_buffer##number
173 #define GLenum_str "i"
174 #define GLenum_var(num) bgl_var##num
175 #define GLenum_ref(num) &bgl_var##num
176 #define GLenum_def(num) int GLenum_var(num)
179 #define GLboolean_str "b"
180 #define GLboolean_var(num) bgl_var##num
181 #define GLboolean_ref(num) &bgl_var##num
182 #define GLboolean_def(num) char GLboolean_var(num)
185 #define GLbitfield_str "i"
186 #define GLbitfield_var(num) bgl_var##num
187 #define GLbitfield_ref(num) &bgl_var##num
188 #define GLbitfield_def(num) int GLbitfield_var(num)
192 # define GLbyte_str "b"
193 # define GLbyte_var(num) bgl_var##num
194 # define GLbyte_ref(num) &bgl_var##num
195 # define GLbyte_def(num) signed char GLbyte_var(num)
199 #define GLshort_str "h"
200 #define GLshort_var(num) bgl_var##num
201 #define GLshort_ref(num) &bgl_var##num
202 #define GLshort_def(num) short GLshort_var(num)
205 #define GLint_str "i"
206 #define GLint_var(num) bgl_var##num
207 #define GLint_ref(num) &bgl_var##num
208 #define GLint_def(num) int GLint_var(num)
211 #define GLsizei_str "n"
212 #define GLsizei_var(num) bgl_var##num
213 #define GLsizei_ref(num) &bgl_var##num
214 #define GLsizei_def(num) size_t GLsizei_var(num)
217 #define GLsizeiptr_str "n"
218 #define GLsizeiptr_var(num) bgl_var##num
219 #define GLsizeiptr_ref(num) &bgl_var##num
220 #define GLsizeiptr_def(num) size_t GLsizeiptr_var(num)
223 #define GLintptr_str "n"
224 #define GLintptr_var(num) bgl_var##num
225 #define GLintptr_ref(num) &bgl_var##num
226 #define GLintptr_def(num) size_t GLintptr_var(num)
229 #define GLubyte_str "B"
230 #define GLubyte_var(num) bgl_var##num
231 #define GLubyte_ref(num) &bgl_var##num
232 #define GLubyte_def(num) char GLubyte_var(num)
236 # define GLushort_str "H"
237 # define GLushort_var(num) bgl_var##num
238 # define GLushort_ref(num) &bgl_var##num
239 # define GLushort_def(num) short GLushort_var(num)
243 #define GLuint_str "I"
244 #define GLuint_var(num) bgl_var##num
245 #define GLuint_ref(num) &bgl_var##num
246 #define GLuint_def(num) int GLuint_var(num)
250 # define GLuint64_str "Q"
251 # define GLuint64_var(num) bgl_var##num
252 # define GLuint64_ref(num) &bgl_var##num
253 # define GLuint64_def(num) int GLuint64_var(num)
258 # define GLsync_str "I"
259 # define GLsync_var(num) bgl_var##num
260 # define GLsync_ref(num) &bgl_var##num
261 # define GLsync_def(num) int GLsync_var(num)
265 #define GLfloat_str "f"
266 #define GLfloat_var(num) bgl_var##num
267 #define GLfloat_ref(num) &bgl_var##num
268 #define GLfloat_def(num) float GLfloat_var(num)
271 #define GLstring_str "s"
272 #define GLstring_var(number) bgl_var##number
273 #define GLstring_ref(number) &bgl_var##number
274 #define GLstring_def(number) char *GLstring_var(number)
278 # define GLclampf_str "f"
279 # define GLclampf_var(num) bgl_var##num
280 # define GLclampf_ref(num) &bgl_var##num
281 # define GLclampf_def(num) float GLclampf_var(num)
285 #define GLdouble_str "d"
286 #define GLdouble_var(num) bgl_var##num
287 #define GLdouble_ref(num) &bgl_var##num
288 #define GLdouble_def(num) double GLdouble_var(num)
292 # define GLclampd_str "d"
293 # define GLclampd_var(num) bgl_var##num
294 # define GLclampd_ref(num) &bgl_var##num
295 # define GLclampd_def(num) double GLclampd_var(num)
298 #define _arg_def1(a1) a1##_def(1)
299 #define _arg_def2(a1, a2) \
302 #define _arg_def3(a1, a2, a3) \
305 #define _arg_def4(a1, a2, a3, a4) \
306 _arg_def3(a1, a2, a3); \
308 #define _arg_def5(a1, a2, a3, a4, a5) \
309 _arg_def4(a1, a2, a3, a4); \
311 #define _arg_def6(a1, a2, a3, a4, a5, a6) \
312 _arg_def5(a1, a2, a3, a4, a5); \
314 #define _arg_def7(a1, a2, a3, a4, a5, a6, a7) \
315 _arg_def6(a1, a2, a3, a4, a5, a6); \
317 #define _arg_def8(a1, a2, a3, a4, a5, a6, a7, a8) \
318 _arg_def7(a1, a2, a3, a4, a5, a6, a7); \
320 #define _arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
321 _arg_def8(a1, a2, a3, a4, a5, a6, a7, a8); \
323 #define _arg_def10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
324 _arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9); \
326 #define _arg_def11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
327 _arg_def10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10); \
329 #define arg_def(...) VA_NARGS_CALL_OVERLOAD(_arg_def, __VA_ARGS__)
331 #define _arg_var1(a1) a1##_var(1)
332 #define _arg_var2(a1, a2) _arg_var1(a1), a2##_var(2)
333 #define _arg_var3(a1, a2, a3) _arg_var2(a1, a2), a3##_var(3)
334 #define _arg_var4(a1, a2, a3, a4) _arg_var3(a1, a2, a3), a4##_var(4)
335 #define _arg_var5(a1, a2, a3, a4, a5) _arg_var4(a1, a2, a3, a4), a5##_var(5)
336 #define _arg_var6(a1, a2, a3, a4, a5, a6) _arg_var5(a1, a2, a3, a4, a5), a6##_var(6)
337 #define _arg_var7(a1, a2, a3, a4, a5, a6, a7) _arg_var6(a1, a2, a3, a4, a5, a6), a7##_var(7)
338 #define _arg_var8(a1, a2, a3, a4, a5, a6, a7, a8) \
339 _arg_var7(a1, a2, a3, a4, a5, a6, a7), a8##_var(8)
340 #define _arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
341 _arg_var8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_var(9)
342 #define _arg_var10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
343 _arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_var(10)
344 #define _arg_var11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
345 _arg_var10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), a11##_var(11)
346 #define arg_var(...) VA_NARGS_CALL_OVERLOAD(_arg_var, __VA_ARGS__)
348 #define _arg_ref1(a1) a1##_ref(1)
349 #define _arg_ref2(a1, a2) _arg_ref1(a1), a2##_ref(2)
350 #define _arg_ref3(a1, a2, a3) _arg_ref2(a1, a2), a3##_ref(3)
351 #define _arg_ref4(a1, a2, a3, a4) _arg_ref3(a1, a2, a3), a4##_ref(4)
352 #define _arg_ref5(a1, a2, a3, a4, a5) _arg_ref4(a1, a2, a3, a4), a5##_ref(5)
353 #define _arg_ref6(a1, a2, a3, a4, a5, a6) _arg_ref5(a1, a2, a3, a4, a5), a6##_ref(6)
354 #define _arg_ref7(a1, a2, a3, a4, a5, a6, a7) _arg_ref6(a1, a2, a3, a4, a5, a6), a7##_ref(7)
355 #define _arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8) \
356 _arg_ref7(a1, a2, a3, a4, a5, a6, a7), a8##_ref(8)
357 #define _arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
358 _arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_ref(9)
359 #define _arg_ref10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
360 _arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_ref(10)
361 #define _arg_ref11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
362 _arg_ref10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), a11##_ref(11)
363 #define arg_ref(...) VA_NARGS_CALL_OVERLOAD(_arg_ref, __VA_ARGS__)
365 #define _arg_str1(a1) a1##_str
366 #define _arg_str2(a1, a2) _arg_str1(a1) a2##_str
367 #define _arg_str3(a1, a2, a3) _arg_str2(a1, a2) a3##_str
368 #define _arg_str4(a1, a2, a3, a4) _arg_str3(a1, a2, a3) a4##_str
369 #define _arg_str5(a1, a2, a3, a4, a5) _arg_str4(a1, a2, a3, a4) a5##_str
370 #define _arg_str6(a1, a2, a3, a4, a5, a6) _arg_str5(a1, a2, a3, a4, a5) a6##_str
371 #define _arg_str7(a1, a2, a3, a4, a5, a6, a7) _arg_str6(a1, a2, a3, a4, a5, a6) a7##_str
372 #define _arg_str8(a1, a2, a3, a4, a5, a6, a7, a8) _arg_str7(a1, a2, a3, a4, a5, a6, a7) a8##_str
373 #define _arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
374 _arg_str8(a1, a2, a3, a4, a5, a6, a7, a8) a9##_str
375 #define _arg_str10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
376 _arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9) a10##_str
377 #define _arg_str11(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) \
378 _arg_str10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) a11##_str
379 #define arg_str(...) VA_NARGS_CALL_OVERLOAD(_arg_str, __VA_ARGS__)
383 #define ret_ret_void return Py_INCREF(Py_None), Py_None
385 #define ret_def_GLint int ret_int
386 #define ret_set_GLint ret_int =
387 #define ret_ret_GLint return PyLong_FromLong(ret_int)
389 #define ret_def_GLuint uint ret_uint
390 #define ret_set_GLuint ret_uint =
391 #define ret_ret_GLuint return PyLong_FromLong((long)ret_uint)
394 # define ret_def_GLsizei size_t ret_size_t
395 # define ret_set_GLsizei ret_size_t =
396 # define ret_ret_GLsizei return PyLong_FromSsize_t(ret_size_t)
400 # define ret_def_GLsync uint ret_sync
401 # define ret_set_GLsync ret_sync =
402 # define ret_ret_GLsync return PyLong_FromLong((long)ret_sync)
405 #define ret_def_GLenum uint ret_uint
406 #define ret_set_GLenum ret_uint =
407 #define ret_ret_GLenum return PyLong_FromLong((long)ret_uint)
409 #define ret_def_GLboolean uchar ret_bool
410 #define ret_set_GLboolean ret_bool =
411 #define ret_ret_GLboolean return PyLong_FromLong((long)ret_bool)
413 #define ret_def_GLstring const uchar *ret_str
414 #define ret_set_GLstring ret_str =
416 #define ret_ret_GLstring \
418 return PyUnicode_FromString((const char *)ret_str); \
421 PyErr_SetString(PyExc_AttributeError, "could not get opengl string"); \
452 return sizeof(short);
456 return sizeof(
float);
466 const Py_ssize_t itemsize = pybuffer->itemsize;
493 for (
int i = 0; i < ndim; i++) {
494 if (dim1[i] != dim2[i]) {
512 (ssizessizeargfunc)
NULL,
514 (ssizessizeobjargproc)
NULL,
531 int i,
len =
self->dimensions[0];
532 PyObject *list = PyList_New(
len);
534 for (i = 0; i <
len; i++) {
545 if (
self->ndimensions > 1) {
546 int i,
len =
self->dimensions[0];
547 list = PyList_New(
len);
549 for (i = 0; i <
len; i++) {
564 PyObject *list = PyList_New(
self->ndimensions);
567 for (i = 0; i <
self->ndimensions; i++) {
568 PyList_SET_ITEM(list, i, PyLong_FromLong(
self->dimensions[i]));
585 PyVarObject_HEAD_INIT(
NULL, 0)
"bgl.Buffer",
654 PyObject *parent,
int type,
int ndimensions,
int *dimensions,
void *buf)
660 buffer->ndimensions = ndimensions;
661 buffer->dimensions =
MEM_mallocN(ndimensions *
sizeof(
int),
"Buffer dimensions");
662 memcpy(
buffer->dimensions, dimensions, ndimensions *
sizeof(
int));
682 for (i = 0; i < ndimensions; i++) {
683 size *= dimensions[i];
704 if (
object == Py_None) {
709 if (PyNumber_Check(
object)) {
710 const Py_ssize_t offset = PyNumber_AsSsize_t(
object, PyExc_IndexError);
711 if (offset == -1 && PyErr_Occurred()) {
716 buffer->offset = (
void *)offset;
725 PyErr_SetString(PyExc_TypeError,
"expected a bgl.Buffer or None");
729 #define MAX_DIMENSIONS 256
737 Py_ssize_t i, ndimensions = 0;
739 if (kwds && PyDict_Size(kwds)) {
740 PyErr_SetString(PyExc_TypeError,
"bgl.Buffer(): takes no keyword args");
744 if (!PyArg_ParseTuple(args,
"iO|O: bgl.Buffer", &
type, &length_ob, &
init)) {
747 if (!
ELEM(
type, GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE)) {
748 PyErr_SetString(PyExc_AttributeError,
749 "invalid first argument type, should be one of "
750 "GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT or GL_DOUBLE");
754 if (PyLong_Check(length_ob)) {
756 if (((dimensions[0] = PyLong_AsLong(length_ob)) < 1)) {
757 PyErr_SetString(PyExc_AttributeError,
762 else if (PySequence_Check(length_ob)) {
763 ndimensions = PySequence_Size(length_ob);
765 PyErr_SetString(PyExc_AttributeError,
769 if (ndimensions < 1) {
770 PyErr_SetString(PyExc_AttributeError,
"sequence must have at least one dimension");
773 for (i = 0; i < ndimensions; i++) {
774 PyObject *ob = PySequence_GetItem(length_ob, i);
776 if (!PyLong_Check(ob)) {
780 dimensions[i] = PyLong_AsLong(ob);
784 if (dimensions[i] < 1) {
785 PyErr_SetString(PyExc_AttributeError,
792 PyErr_Format(PyExc_TypeError,
793 "invalid second argument argument expected a sequence "
794 "or an int, not a %.200s",
795 Py_TYPE(length_ob)->tp_name);
799 if (
init && PyObject_CheckBuffer(
init)) {
802 if (PyObject_GetBuffer(
init, &pybuffer, PyBUF_ND | PyBUF_FORMAT) == -1) {
808 PyErr_Format(PyExc_TypeError,
809 "`GL_TYPE` and `typestr` of object with buffer interface do not match. '%s'",
812 else if (ndimensions != pybuffer.ndim ||
814 PyErr_Format(PyExc_TypeError,
"array size does not match");
820 PyBuffer_Release(&pybuffer);
830 return (PyObject *)
buffer;
837 return self->dimensions[0];
842 if (i >=
self->dimensions[0] || i < 0) {
843 PyErr_SetString(PyExc_IndexError,
"array index out of range");
847 if (
self->ndimensions == 1) {
848 switch (
self->type) {
850 return Py_BuildValue(
"b",
self->buf.asbyte[i]);
852 return Py_BuildValue(
"h",
self->buf.asshort[i]);
854 return Py_BuildValue(
"i",
self->buf.asint[i]);
856 return PyFloat_FromDouble(
self->buf.asfloat[i]);
858 return Py_BuildValue(
"d",
self->buf.asdouble[i]);
864 for (j = 1; j <
self->ndimensions; j++) {
865 offset *=
self->dimensions[j];
870 self->ndimensions - 1,
871 self->dimensions + 1,
872 self->buf.asbyte + offset);
886 if (end >
self->dimensions[0]) {
887 end =
self->dimensions[0];
893 list = PyList_New(end - begin);
903 if (i >=
self->dimensions[0] || i < 0) {
904 PyErr_SetString(PyExc_IndexError,
"array assignment index out of range");
908 if (
self->ndimensions != 1) {
920 switch (
self->type) {
922 return PyArg_Parse(
v,
"b:Expected ints", &
self->buf.asbyte[i]) ? 0 : -1;
924 return PyArg_Parse(
v,
"h:Expected ints", &
self->buf.asshort[i]) ? 0 : -1;
926 return PyArg_Parse(
v,
"i:Expected ints", &
self->buf.asint[i]) ? 0 : -1;
928 return PyArg_Parse(
v,
"f:Expected floats", &
self->buf.asfloat[i]) ? 0 : -1;
930 return PyArg_Parse(
v,
"d:Expected floats", &
self->buf.asdouble[i]) ? 0 : -1;
944 if (end >
self->dimensions[0]) {
945 end =
self->dimensions[0];
951 if (!PySequence_Check(seq)) {
952 PyErr_Format(PyExc_TypeError,
953 "buffer[:] = value, invalid assignment. "
954 "Expected a sequence, not an %.200s type",
955 Py_TYPE(seq)->tp_name);
960 if ((
count = PySequence_Size(seq)) != (end - begin)) {
961 PyErr_Format(PyExc_TypeError,
962 "buffer[:] = value, size mismatch in assignment. "
963 "Expected: %d (given: %d)",
970 item = PySequence_GetItem(seq,
count - begin);
987 if (PyIndex_Check(item)) {
989 i = PyNumber_AsSsize_t(item, PyExc_IndexError);
990 if (i == -1 && PyErr_Occurred()) {
994 i +=
self->dimensions[0];
998 if (PySlice_Check(item)) {
999 Py_ssize_t start, stop, step, slicelength;
1001 if (PySlice_GetIndicesEx(item,
self->dimensions[0], &start, &stop, &step, &slicelength) < 0) {
1005 if (slicelength <= 0) {
1006 return PyTuple_New(0);
1012 PyErr_SetString(PyExc_IndexError,
"slice steps not supported with vectors");
1017 PyExc_TypeError,
"buffer indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1023 if (PyIndex_Check(item)) {
1024 Py_ssize_t i = PyNumber_AsSsize_t(item, PyExc_IndexError);
1025 if (i == -1 && PyErr_Occurred()) {
1029 i +=
self->dimensions[0];
1033 if (PySlice_Check(item)) {
1034 Py_ssize_t start, stop, step, slicelength;
1036 if (PySlice_GetIndicesEx(item,
self->dimensions[0], &start, &stop, &step, &slicelength) < 0) {
1044 PyErr_SetString(PyExc_IndexError,
"slice steps not supported with vectors");
1049 PyExc_TypeError,
"buffer indices must be integers, not %.200s", Py_TYPE(item)->tp_name);
1056 Py_DECREF(
self->parent);
1071 const char *typestr;
1073 switch (
self->type) {
1075 typestr =
"GL_BYTE";
1078 typestr =
"GL_SHORT";
1084 typestr =
"GL_FLOAT";
1087 typestr =
"GL_DOUBLE";
1090 typestr =
"UNKNOWN";
1094 repr = PyUnicode_FromFormat(
"Buffer(%s, %R)", typestr, list);
1106 #define BGL_Wrap(funcname, ret, arg_list) \
1107 static PyObject *Method_##funcname(PyObject *UNUSED(self), PyObject *args) \
1111 if (!PyArg_ParseTuple(args, arg_str arg_list, arg_ref arg_list)) { \
1115 ret_set_##ret gl##funcname(arg_var arg_list); \
1122 BGL_Wrap(ClearColor,
void, (GLfloat, GLfloat, GLfloat, GLfloat));
1125 BGL_Wrap(ColorMask,
void, (GLboolean, GLboolean, GLboolean, GLboolean));
1142 BGL_Wrap(GetTexImage,
void, (GLenum, GLint, GLenum, GLenum, GLvoidP));
1143 BGL_Wrap(GetTexLevelParameterfv,
void, (GLenum, GLint, GLenum, GLfloatP));
1144 BGL_Wrap(GetTexLevelParameteriv,
void, (GLenum, GLint, GLenum, GLintP));
1145 BGL_Wrap(GetTexParameterfv,
void, (GLenum, GLenum, GLfloatP));
1146 BGL_Wrap(GetTexParameteriv,
void, (GLenum, GLenum, GLintP));
1156 BGL_Wrap(ReadPixels,
void, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1157 BGL_Wrap(Scissor,
void, (GLint, GLint, GLsizei, GLsizei));
1161 BGL_Wrap(TexImage1D,
void, (GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1164 (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1165 BGL_Wrap(TexParameterf,
void, (GLenum, GLenum, GLfloat));
1166 BGL_Wrap(TexParameterfv,
void, (GLenum, GLenum, GLfloatP));
1167 BGL_Wrap(TexParameteri,
void, (GLenum, GLenum, GLint));
1168 BGL_Wrap(TexParameteriv,
void, (GLenum, GLenum, GLintP));
1169 BGL_Wrap(Viewport,
void, (GLint, GLint, GLsizei, GLsizei));
1173 BGL_Wrap(CopyTexImage1D,
void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint));
1174 BGL_Wrap(CopyTexImage2D,
void, (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint));
1175 BGL_Wrap(CopyTexSubImage1D,
void, (GLenum, GLint, GLint, GLint, GLint, GLsizei));
1176 BGL_Wrap(CopyTexSubImage2D,
void, (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei));
1179 BGL_Wrap(DrawElements,
void, (GLenum, GLsizei, GLenum, GLvoidP));
1183 BGL_Wrap(TexSubImage1D,
void, (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, GLvoidP));
1186 (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1191 (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei));
1192 BGL_Wrap(DrawRangeElements,
void, (GLenum, GLuint, GLuint, GLsizei, GLenum, GLvoidP));
1195 (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, GLvoidP));
1198 (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLvoidP));
1202 BGL_Wrap(CompressedTexImage1D,
void, (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, GLvoidP));
1205 (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, GLvoidP));
1208 (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, GLvoidP));
1209 BGL_Wrap(CompressedTexSubImage1D,
void, (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, GLvoidP));
1212 (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP));
1214 CompressedTexSubImage3D,
1216 (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, GLvoidP));
1217 BGL_Wrap(GetCompressedTexImage,
void, (GLenum, GLint, GLvoidP));
1221 BGL_Wrap(BlendColor,
void, (GLfloat, GLfloat, GLfloat, GLfloat));
1227 BGL_Wrap(BufferData,
void, (GLenum, GLsizeiptr, GLvoidP, GLenum));
1228 BGL_Wrap(BufferSubData,
void, (GLenum, GLintptr, GLsizeiptr, GLvoidP));
1234 BGL_Wrap(GetBufferParameteriv,
void, (GLenum, GLenum, GLintP));
1235 BGL_Wrap(GetBufferPointerv,
void, (GLenum, GLenum, GLvoidP));
1236 BGL_Wrap(GetBufferSubData,
void, (GLenum, GLintptr, GLsizeiptr, GLvoidP));
1237 BGL_Wrap(GetQueryObjectiv,
void, (GLuint, GLenum, GLintP));
1238 BGL_Wrap(GetQueryObjectuiv,
void, (GLuint, GLenum, GLuintP));
1247 BGL_Wrap(BindAttribLocation,
void, (GLuint, GLuint, GLstring));
1248 BGL_Wrap(BlendEquationSeparate,
void, (GLenum, GLenum));
1258 BGL_Wrap(GetActiveAttrib,
void, (GLuint, GLuint, GLsizei, GLsizeiP, GLintP, GLenumP, GLcharP));
1259 BGL_Wrap(GetActiveUniform,
void, (GLuint, GLuint, GLsizei, GLsizeiP, GLintP, GLenumP, GLcharP));
1260 BGL_Wrap(GetAttachedShaders,
void, (GLuint, GLsizei, GLsizeiP, GLuintP));
1261 BGL_Wrap(GetAttribLocation, GLint, (GLuint, GLstring));
1262 BGL_Wrap(GetProgramInfoLog,
void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1263 BGL_Wrap(GetProgramiv,
void, (GLuint, GLenum, GLintP));
1264 BGL_Wrap(GetShaderInfoLog,
void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1265 BGL_Wrap(GetShaderSource,
void, (GLuint, GLsizei, GLsizeiP, GLcharP));
1267 BGL_Wrap(GetUniformLocation, GLint, (GLuint, GLstring));
1268 BGL_Wrap(GetUniformfv,
void, (GLuint, GLint, GLfloatP));
1270 BGL_Wrap(GetVertexAttribPointerv,
void, (GLuint, GLenum, GLvoidP));
1271 BGL_Wrap(GetVertexAttribdv,
void, (GLuint, GLenum, GLdoubleP));
1272 BGL_Wrap(GetVertexAttribfv,
void, (GLuint, GLenum, GLfloatP));
1273 BGL_Wrap(GetVertexAttribiv,
void, (GLuint, GLenum, GLintP));
1277 BGL_Wrap(StencilFuncSeparate,
void, (GLenum, GLenum, GLint, GLuint));
1279 BGL_Wrap(StencilOpSeparate,
void, (GLenum, GLenum, GLenum, GLenum));
1281 BGL_Wrap(Uniform1fv,
void, (GLint, GLsizei, GLfloatP));
1285 BGL_Wrap(Uniform2fv,
void, (GLint, GLsizei, GLfloatP));
1288 BGL_Wrap(Uniform3f,
void, (GLint, GLfloat, GLfloat, GLfloat));
1289 BGL_Wrap(Uniform3fv,
void, (GLint, GLsizei, GLfloatP));
1290 BGL_Wrap(Uniform3i,
void, (GLint, GLint, GLint, GLint));
1292 BGL_Wrap(Uniform4f,
void, (GLint, GLfloat, GLfloat, GLfloat, GLfloat));
1293 BGL_Wrap(Uniform4fv,
void, (GLint, GLsizei, GLfloatP));
1294 BGL_Wrap(Uniform4i,
void, (GLint, GLint, GLint, GLint, GLint));
1296 BGL_Wrap(UniformMatrix2fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1297 BGL_Wrap(UniformMatrix3fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1298 BGL_Wrap(UniformMatrix4fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1307 BGL_Wrap(VertexAttrib2d,
void, (GLuint, GLdouble, GLdouble));
1309 BGL_Wrap(VertexAttrib2f,
void, (GLuint, GLfloat, GLfloat));
1311 BGL_Wrap(VertexAttrib2s,
void, (GLuint, GLshort, GLshort));
1313 BGL_Wrap(VertexAttrib3d,
void, (GLuint, GLdouble, GLdouble, GLdouble));
1315 BGL_Wrap(VertexAttrib3f,
void, (GLuint, GLfloat, GLfloat, GLfloat));
1317 BGL_Wrap(VertexAttrib3s,
void, (GLuint, GLshort, GLshort, GLshort));
1322 BGL_Wrap(VertexAttrib4Nub,
void, (GLuint, GLubyte, GLubyte, GLubyte, GLubyte));
1325 BGL_Wrap(VertexAttrib4Nusv,
void, (GLuint, GLushortP));
1327 BGL_Wrap(VertexAttrib4d,
void, (GLuint, GLdouble, GLdouble, GLdouble, GLdouble));
1329 BGL_Wrap(VertexAttrib4f,
void, (GLuint, GLfloat, GLfloat, GLfloat, GLfloat));
1332 BGL_Wrap(VertexAttrib4s,
void, (GLuint, GLshort, GLshort, GLshort, GLshort));
1337 BGL_Wrap(VertexAttribPointer,
void, (GLuint, GLint, GLenum, GLboolean, GLsizei, GLvoidP));
1340 BGL_Wrap(UniformMatrix2x3fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1341 BGL_Wrap(UniformMatrix2x4fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1342 BGL_Wrap(UniformMatrix3x2fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1343 BGL_Wrap(UniformMatrix3x4fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1344 BGL_Wrap(UniformMatrix4x2fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1345 BGL_Wrap(UniformMatrix4x3fv,
void, (GLint, GLsizei, GLboolean, GLfloatP));
1353 (GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum));
1355 BGL_Wrap(DeleteFramebuffers,
void, (GLsizei, GLuintP));
1356 BGL_Wrap(DeleteRenderbuffers,
void, (GLsizei, GLuintP));
1357 BGL_Wrap(DeleteVertexArrays,
void, (GLsizei, GLuintP));
1358 BGL_Wrap(FramebufferRenderbuffer,
void, (GLenum, GLenum, GLenum, GLuint));
1364 BGL_Wrap(RenderbufferStorage,
void, (GLenum, GLenum, GLsizei, GLsizei));
1365 BGL_Wrap(VertexAttribIPointer,
void, (GLuint, GLint, GLenum, GLsizei, GLvoidP));
1368 BGL_Wrap(BindBufferBase,
void, (GLenum, GLuint, GLuint));
1369 BGL_Wrap(BindBufferRange,
void, (GLenum, GLuint, GLuint, GLintptr, GLsizeiptr));
1370 BGL_Wrap(GetActiveUniformBlockName,
void, (GLuint, GLuint, GLsizei, GLsizeiP, GLcharP));
1371 BGL_Wrap(GetActiveUniformBlockiv,
void, (GLuint, GLuint, GLenum, GLintP));
1372 BGL_Wrap(GetActiveUniformName,
void, (GLuint, GLuint, GLsizei, GLsizeiP, GLcharP));
1373 BGL_Wrap(GetActiveUniformsiv,
void, (GLuint, GLsizei, GLuintP, GLenum, GLintP));
1374 BGL_Wrap(GetIntegeri_v,
void, (GLenum, GLuint, GLintP));
1375 BGL_Wrap(GetUniformBlockIndex, GLuint, (GLuint, GLstring));
1376 BGL_Wrap(GetUniformIndices,
void, (GLuint, GLsizei, GLcharP, GLuintP));
1377 BGL_Wrap(UniformBlockBinding,
void, (GLuint, GLuint, GLuint));
1380 BGL_Wrap(FramebufferTexture,
void, (GLenum, GLenum, GLuint, GLint));
1381 BGL_Wrap(GetBufferParameteri64v,
void, (GLenum, GLenum, GLint64P));
1382 BGL_Wrap(GetInteger64i_v,
void, (GLenum, GLuint, GLint64P));
1383 BGL_Wrap(GetMultisamplefv,
void, (GLenum, GLuint, GLfloatP));
1385 BGL_Wrap(TexImage2DMultisample,
void, (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean));
1388 (GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean));
1400 PyModuleDef_HEAD_INIT,
1414 PyDict_SetItemString(dict, name, item = PyLong_FromLong(value));
1421 PyDict_SetItemString(dict, name, item = PyLong_FromLongLong(value));
1427 PyMethodDef *method_def,
1432 m = PyCFunction_NewEx(method_def,
NULL, submodule);
1433 PyDict_SetItemString(dict, method_def->ml_name, m);
1437 PyDict_SetItemString(dict, method_def->ml_name, Py_None);
1443 # pragma GCC diagnostic ignored "-Waddress"
1445 #define PY_MOD_ADD_METHOD(func) \
1447 static PyMethodDef method_def = {"gl" #func, Method_##func, METH_VARARGS}; \
1448 py_module_dict_add_method(submodule, dict, &method_def, (gl##func != NULL)); \
1728 #define PY_DICT_ADD_INT(x) py_module_dict_add_int(dict, #x, x)
1729 #define PY_DICT_ADD_INT64(x) py_module_dict_add_int64(dict, #x, x)
2596 PyObject *submodule, *dict;
2598 dict = PyModule_GetDict(submodule);
2604 PyModule_AddObject(submodule,
"Buffer", (PyObject *)&
BGL_bufferType);
2640 if (!PyArg_ParseTuple(args,
"Is", &
shader, &source)) {
2644 glShaderSource(
shader, 1, (
const char **)&source,
NULL);
typedef float(TangentPoint)[2]
typedef double(DMatrix)[4][4]
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
static int gl_buffer_type_from_py_buffer(Py_buffer *pybuffer)
static PyObject * Buffer_dimensions(Buffer *self, void *UNUSED(arg))
static PyObject * Buffer_slice(Buffer *self, int begin, int end)
static void py_module_dict_add_method(PyObject *submodule, PyObject *dict, PyMethodDef *method_def, bool is_valid)
static int Buffer_ass_subscript(Buffer *self, PyObject *item, PyObject *value)
static PyGetSetDef Buffer_getseters[]
static PyObject * Buffer_to_list(Buffer *self)
static void init_bgl_version_1_2_methods(PyObject *submodule, PyObject *dict)
static PyObject * Buffer_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
static void Buffer_dealloc(Buffer *self)
static void init_bgl_version_3_0_constants(PyObject *dict)
PyObject * BPyInit_bgl(void)
static PyObject * Buffer_item(Buffer *self, int i)
int BGL_typeSize(int type)
PyTypeObject BGL_bufferType
static PyObject * Buffer_to_list_recursive(Buffer *self)
static void init_bgl_version_3_0_methods(PyObject *submodule, PyObject *dict)
static void py_module_dict_add_int(PyObject *dict, const char *name, int value)
static PySequenceMethods Buffer_SeqMethods
#define BGL_Wrap(funcname, ret, arg_list)
static void init_bgl_version_2_1_methods(PyObject *submodule, PyObject *dict)
static PyObject * Method_ShaderSource(PyObject *self, PyObject *args)
static int BGL_BufferOrOffsetConverter(PyObject *object, BufferOrOffset *buffer)
static void init_bgl_version_1_3_methods(PyObject *submodule, PyObject *dict)
static void init_bgl_version_1_4_constants(PyObject *dict)
static PyMappingMethods Buffer_AsMapping
static void init_bgl_version_3_2_methods(PyObject *submodule, PyObject *dict)
#define PY_DICT_ADD_INT(x)
static void init_bgl_version_1_0_methods(PyObject *submodule, PyObject *dict)
static void init_bgl_version_1_2_constants(PyObject *dict)
struct BufferOrOffset BufferOrOffset
static void init_bgl_version_1_5_methods(PyObject *submodule, PyObject *dict)
static void init_bgl_version_2_1_constants(PyObject *dict)
static PyObject * Buffer_subscript(Buffer *self, PyObject *item)
#define PY_DICT_ADD_INT64(x)
static int Buffer_ass_item(Buffer *self, int i, PyObject *v)
static void init_bgl_version_1_1_constants(PyObject *dict)
#define PY_MOD_ADD_METHOD(func)
static PyObject * Buffer_repr(Buffer *self)
static void init_bgl_version_1_4_methods(PyObject *submodule, PyObject *dict)
static PyMethodDef Buffer_methods[]
static void init_bgl_version_3_2_constants(PyObject *dict)
static void init_bgl_version_3_3_methods(PyObject *UNUSED(submodule), PyObject *UNUSED(dict))
static void init_bgl_version_1_3_constants(PyObject *dict)
static void init_bgl_version_1_1_methods(PyObject *submodule, PyObject *dict)
static int Buffer_len(Buffer *self)
static bool compare_dimensions(int ndim, const int *dim1, const Py_ssize_t *dim2)
static void init_bgl_version_2_0_constants(PyObject *dict)
static int Buffer_ass_slice(Buffer *self, int begin, int end, PyObject *seq)
static void init_bgl_version_2_0_methods(PyObject *submodule, PyObject *dict)
static struct PyModuleDef BGL_module_def
static void init_bgl_version_3_1_methods(PyObject *submodule, PyObject *dict)
static Buffer * BGL_MakeBuffer_FromData(PyObject *parent, int type, int ndimensions, int *dimensions, void *buf)
static void init_bgl_version_1_5_constants(PyObject *dict)
Buffer * BGL_MakeBuffer(int type, int ndimensions, int *dimensions, void *initbuffer)
static void py_module_dict_add_int64(PyObject *dict, const char *name, int64_t value)
static void init_bgl_version_3_3_constants(PyObject *dict)
static void init_bgl_version_3_1_constants(PyObject *dict)
ATTR_WARN_UNUSED_RESULT const BMVert * v
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void KERNEL_FUNCTION_FULL_NAME() shader(KernelGlobals *kg, uint4 *input, float4 *output, int type, int filter, int i, int offset, int sample)
__kernel void ccl_constant KernelData ccl_global void ccl_global char ccl_global int ccl_global char ccl_global unsigned int ccl_global float * buffer
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
static void Flush(png_structp png_ptr)
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)
bool PyC_StructFmt_type_is_float_any(char format)