2
* $Id: BGL.h 16515 2008-09-14 05:10:45Z campbellbarton $
4
* ***** BEGIN GPL LICENSE BLOCK *****
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software Foundation,
18
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
21
* All rights reserved.
23
* This is a new part of Blender.
25
* Contributor(s): Willian P. Germano
27
* ***** END GPL LICENSE BLOCK *****
30
/* This is the Blender.BGL part of opy_draw.c, from the old bpython/intern
31
* dir, with minor changes to adapt it to the new Python implementation.
32
* The BGL submodule "wraps" OpenGL functions and constants, allowing script
33
* writers to make OpenGL calls in their Python scripts for Blender. The
34
* more important original comments are marked with an @ symbol. */
48
/*@ For Python access to OpenGL functions requiring a pointer. */
50
typedef struct _Buffer {
54
int type; /* GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT */
70
/*@ By golly George! It looks like fancy pants macro time!!! */
74
#define int_var(number) bgl_int##number
75
#define int_ref(number) &bgl_int##number
76
#define int_def(number) int int_var(number)
79
#define float_var(number) bgl_float##number
80
#define float_ref(number) &bgl_float##number
81
#define float_def(number) float float_var(number)
84
/* TYPE_str is the string to pass to Py_ArgParse (for the format) */
85
/* TYPE_var is the name to pass to the GL function */
86
/* TYPE_ref is the pointer to pass to Py_ArgParse (to store in) */
87
/* TYPE_def is the C initialization of the variable */
91
#define void_ref(num) &bgl_var##num
92
#define void_def(num) char bgl_var##num
94
#define buffer_str "O!"
95
#define buffer_var(number) (bgl_buffer##number)->buf.asvoid
96
#define buffer_ref(number) &buffer_Type, &bgl_buffer##number
97
#define buffer_def(number) Buffer *bgl_buffer##number
99
/* GL Pointer fields, handled by buffer type */
100
/* GLdoubleP, GLfloatP, GLintP, GLuintP, GLshortP */
102
#define GLbooleanP_str "O!"
103
#define GLbooleanP_var(number) (bgl_buffer##number)->buf.asvoid
104
#define GLbooleanP_ref(number) &buffer_Type, &bgl_buffer##number
105
#define GLbooleanP_def(number) Buffer *bgl_buffer##number
107
#define GLbyteP_str "O!"
108
#define GLbyteP_var(number) (bgl_buffer##number)->buf.asvoid
109
#define GLbyteP_ref(number) &buffer_Type, &bgl_buffer##number
110
#define GLbyteP_def(number) Buffer *bgl_buffer##number
112
#define GLubyteP_str "O!"
113
#define GLubyteP_var(number) (bgl_buffer##number)->buf.asvoid
114
#define GLubyteP_ref(number) &buffer_Type, &bgl_buffer##number
115
#define GLubyteP_def(number) Buffer *bgl_buffer##number
117
#define GLintP_str "O!"
118
#define GLintP_var(number) (bgl_buffer##number)->buf.asvoid
119
#define GLintP_ref(number) &buffer_Type, &bgl_buffer##number
120
#define GLintP_def(number) Buffer *bgl_buffer##number
122
#define GLuintP_str "O!"
123
#define GLuintP_var(number) (bgl_buffer##number)->buf.asvoid
124
#define GLuintP_ref(number) &buffer_Type, &bgl_buffer##number
125
#define GLuintP_def(number) Buffer *bgl_buffer##number
127
#define GLshortP_str "O!"
128
#define GLshortP_var(number) (bgl_buffer##number)->buf.asvoid
129
#define GLshortP_ref(number) &buffer_Type, &bgl_buffer##number
130
#define GLshortP_def(number) Buffer *bgl_buffer##number
132
#define GLushortP_str "O!"
133
#define GLushortP_var(number) (bgl_buffer##number)->buf.asvoid
134
#define GLushortP_ref(number) &buffer_Type, &bgl_buffer##number
135
#define GLushortP_def(number) Buffer *bgl_buffer##number
137
#define GLfloatP_str "O!"
138
#define GLfloatP_var(number) (bgl_buffer##number)->buf.asvoid
139
#define GLfloatP_ref(number) &buffer_Type, &bgl_buffer##number
140
#define GLfloatP_def(number) Buffer *bgl_buffer##number
142
#define GLdoubleP_str "O!"
143
#define GLdoubleP_var(number) (bgl_buffer##number)->buf.asvoid
144
#define GLdoubleP_ref(number) &buffer_Type, &bgl_buffer##number
145
#define GLdoubleP_def(number) Buffer *bgl_buffer##number
147
#define GLclampfP_str "O!"
148
#define GLclampfP_var(number) (bgl_buffer##number)->buf.asvoid
149
#define GLclampfP_ref(number) &buffer_Type, &bgl_buffer##number
150
#define GLclampfP_def(number) Buffer *bgl_buffer##number
152
#define GLvoidP_str "O!"
153
#define GLvoidP_var(number) (bgl_buffer##number)->buf.asvoid
154
#define GLvoidP_ref(number) &buffer_Type, &bgl_buffer##number
155
#define GLvoidP_def(number) Buffer *bgl_buffer##number
157
#define buffer_str "O!"
158
#define buffer_var(number) (bgl_buffer##number)->buf.asvoid
159
#define buffer_ref(number) &buffer_Type, &bgl_buffer##number
160
#define buffer_def(number) Buffer *bgl_buffer##number
162
/*@The standard GL typedefs are used as prototypes, we can't
163
* use the GL type directly because Py_ArgParse expects normal
166
* Py_ArgParse doesn't grok writing into unsigned variables,
167
* so we use signed everything (even stuff that should be unsigned.
170
/* typedef unsigned int GLenum; */
171
#define GLenum_str "i"
172
#define GLenum_var(num) bgl_var##num
173
#define GLenum_ref(num) &bgl_var##num
174
#define GLenum_def(num) /* unsigned */ int GLenum_var(num)
176
/* typedef unsigned int GLboolean; */
177
#define GLboolean_str "b"
178
#define GLboolean_var(num) bgl_var##num
179
#define GLboolean_ref(num) &bgl_var##num
180
#define GLboolean_def(num) /* unsigned */ char GLboolean_var(num)
182
/* typedef unsigned int GLbitfield; */
183
#define GLbitfield_str "i"
184
#define GLbitfield_var(num) bgl_var##num
185
#define GLbitfield_ref(num) &bgl_var##num
186
#define GLbitfield_def(num) /* unsigned */ int GLbitfield_var(num)
188
/* typedef signed char GLbyte; */
189
#define GLbyte_str "b"
190
#define GLbyte_var(num) bgl_var##num
191
#define GLbyte_ref(num) &bgl_var##num
192
#define GLbyte_def(num) signed char GLbyte_var(num)
194
/* typedef short GLshort; */
195
#define GLshort_str "h"
196
#define GLshort_var(num) bgl_var##num
197
#define GLshort_ref(num) &bgl_var##num
198
#define GLshort_def(num) short GLshort_var(num)
200
/* typedef int GLint; */
201
#define GLint_str "i"
202
#define GLint_var(num) bgl_var##num
203
#define GLint_ref(num) &bgl_var##num
204
#define GLint_def(num) int GLint_var(num)
206
/* typedef int GLsizei; */
207
#define GLsizei_str "i"
208
#define GLsizei_var(num) bgl_var##num
209
#define GLsizei_ref(num) &bgl_var##num
210
#define GLsizei_def(num) int GLsizei_var(num)
212
/* typedef unsigned char GLubyte; */
213
#define GLubyte_str "b"
214
#define GLubyte_var(num) bgl_var##num
215
#define GLubyte_ref(num) &bgl_var##num
216
#define GLubyte_def(num) /* unsigned */ char GLubyte_var(num)
218
/* typedef unsigned short GLushort; */
219
#define GLushort_str "h"
220
#define GLushort_var(num) bgl_var##num
221
#define GLushort_ref(num) &bgl_var##num
222
#define GLushort_def(num) /* unsigned */ short GLushort_var(num)
224
/* typedef unsigned int GLuint; */
225
#define GLuint_str "i"
226
#define GLuint_var(num) bgl_var##num
227
#define GLuint_ref(num) &bgl_var##num
228
#define GLuint_def(num) /* unsigned */ int GLuint_var(num)
230
/* typedef float GLfloat; */
231
#define GLfloat_str "f"
232
#define GLfloat_var(num) bgl_var##num
233
#define GLfloat_ref(num) &bgl_var##num
234
#define GLfloat_def(num) float GLfloat_var(num)
236
/* typedef float GLclampf; */
237
#define GLclampf_str "f"
238
#define GLclampf_var(num) bgl_var##num
239
#define GLclampf_ref(num) &bgl_var##num
240
#define GLclampf_def(num) float GLclampf_var(num)
242
/* typedef double GLdouble; */
243
#define GLdouble_str "d"
244
#define GLdouble_var(num) bgl_var##num
245
#define GLdouble_ref(num) &bgl_var##num
246
#define GLdouble_def(num) double GLdouble_var(num)
248
/* typedef double GLclampd; */
249
#define GLclampd_str "d"
250
#define GLclampd_var(num) bgl_var##num
251
#define GLclampd_ref(num) &bgl_var##num
252
#define GLclampd_def(num) double GLclampd_var(num)
254
/* typedef void GLvoid; */
255
/* #define GLvoid_str "" */
256
/* #define GLvoid_var(num) bgl_var##num */
257
/* #define GLvoid_ref(num) &bgl_var##num */
258
/* #define GLvoid_def(num) char bgl_var##num */
260
#define arg_def1(a1) a1##_def(1)
261
#define arg_def2(a1, a2) arg_def1(a1); a2##_def(2)
262
#define arg_def3(a1, a2, a3) arg_def2(a1, a2); a3##_def(3)
263
#define arg_def4(a1, a2, a3, a4) arg_def3(a1, a2, a3); a4##_def(4)
264
#define arg_def5(a1, a2, a3, a4, a5) arg_def4(a1, a2, a3, a4); a5##_def(5)
265
#define arg_def6(a1, a2, a3, a4, a5, a6)arg_def5(a1, a2, a3, a4, a5); a6##_def(6)
266
#define arg_def7(a1, a2, a3, a4, a5, a6, a7)arg_def6(a1, a2, a3, a4, a5, a6); a7##_def(7)
267
#define arg_def8(a1, a2, a3, a4, a5, a6, a7, a8)arg_def7(a1, a2, a3, a4, a5, a6, a7); a8##_def(8)
268
#define arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9)arg_def8(a1, a2, a3, a4, a5, a6, a7, a8); a9##_def(9)
269
#define arg_def10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)arg_def9(a1, a2, a3, a4, a5, a6, a7, a8, a9); a10##_def(10)
271
#define arg_var1(a1) a1##_var(1)
272
#define arg_var2(a1, a2) arg_var1(a1), a2##_var(2)
273
#define arg_var3(a1, a2, a3) arg_var2(a1, a2), a3##_var(3)
274
#define arg_var4(a1, a2, a3, a4) arg_var3(a1, a2, a3), a4##_var(4)
275
#define arg_var5(a1, a2, a3, a4, a5) arg_var4(a1, a2, a3, a4), a5##_var(5)
276
#define arg_var6(a1, a2, a3, a4, a5, a6)arg_var5(a1, a2, a3, a4, a5), a6##_var(6)
277
#define arg_var7(a1, a2, a3, a4, a5, a6, a7)arg_var6(a1, a2, a3, a4, a5, a6), a7##_var(7)
278
#define arg_var8(a1, a2, a3, a4, a5, a6, a7, a8)arg_var7(a1, a2, a3, a4, a5, a6, a7), a8##_var(8)
279
#define arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9)arg_var8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_var(9)
280
#define arg_var10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)arg_var9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_var(10)
282
#define arg_ref1(a1) a1##_ref(1)
283
#define arg_ref2(a1, a2) arg_ref1(a1), a2##_ref(2)
284
#define arg_ref3(a1, a2, a3) arg_ref2(a1, a2), a3##_ref(3)
285
#define arg_ref4(a1, a2, a3, a4) arg_ref3(a1, a2, a3), a4##_ref(4)
286
#define arg_ref5(a1, a2, a3, a4, a5) arg_ref4(a1, a2, a3, a4), a5##_ref(5)
287
#define arg_ref6(a1, a2, a3, a4, a5, a6)arg_ref5(a1, a2, a3, a4, a5), a6##_ref(6)
288
#define arg_ref7(a1, a2, a3, a4, a5, a6, a7)arg_ref6(a1, a2, a3, a4, a5, a6), a7##_ref(7)
289
#define arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8)arg_ref7(a1, a2, a3, a4, a5, a6, a7), a8##_ref(8)
290
#define arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9)arg_ref8(a1, a2, a3, a4, a5, a6, a7, a8), a9##_ref(9)
291
#define arg_ref10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)arg_ref9(a1, a2, a3, a4, a5, a6, a7, a8, a9), a10##_ref(10)
293
#define arg_str1(a1) a1##_str
294
#define arg_str2(a1, a2) arg_str1(a1) a2##_str
295
#define arg_str3(a1, a2, a3) arg_str2(a1, a2) a3##_str
296
#define arg_str4(a1, a2, a3, a4) arg_str3(a1, a2, a3) a4##_str
297
#define arg_str5(a1, a2, a3, a4, a5) arg_str4(a1, a2, a3, a4) a5##_str
298
#define arg_str6(a1, a2, a3, a4, a5, a6)arg_str5(a1, a2, a3, a4, a5) a6##_str
299
#define arg_str7(a1, a2, a3, a4, a5, a6, a7)arg_str6(a1, a2, a3, a4, a5, a6) a7##_str
300
#define arg_str8(a1, a2, a3, a4, a5, a6, a7, a8)arg_str7(a1, a2, a3, a4, a5, a6, a7) a8##_str
301
#define arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9)arg_str8(a1, a2, a3, a4, a5, a6, a7, a8) a9##_str
302
#define arg_str10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)arg_str9(a1, a2, a3, a4, a5, a6, a7, a8, a9) a10##_str
306
#define ret_ret_void return EXPP_incr_ret(Py_None)
308
#define ret_def_GLint int ret_int
309
#define ret_set_GLint ret_int=
310
#define ret_ret_GLint return PyInt_FromLong(ret_int);
312
#define ret_def_GLuint unsigned int ret_uint
313
#define ret_set_GLuint ret_uint=
314
#define ret_ret_GLuint return PyInt_FromLong((long) ret_uint);
316
#define ret_def_GLenum unsigned int ret_uint
317
#define ret_set_GLenum ret_uint=
318
#define ret_ret_GLenum return PyInt_FromLong((long) ret_uint);
320
#define ret_def_GLboolean unsigned char ret_bool
321
#define ret_set_GLboolean ret_bool=
322
#define ret_ret_GLboolean return PyInt_FromLong((long) ret_bool);
324
#define ret_def_GLstring const unsigned char *ret_str;
325
#define ret_set_GLstring ret_str=
327
#define ret_ret_GLstring \
329
return PyString_FromString(ret_str);\
331
PyErr_SetString(PyExc_AttributeError, "could not get opengl string");\
335
#endif /* EXPP_BGL_H */