Merge branch 'blender2.7'
[blender.git] / doc / python_api / rst / bgl.rst
1
2 OpenGL Wrapper (bgl)
3 ====================
4
5 .. module:: bgl
6
7 This module wraps OpenGL constants and functions, making them available from
8 within Blender Python.
9
10 The complete list can be retrieved from the module itself, by listing its
11 contents: dir(bgl).  A simple search on the web can point to more
12 than enough material to teach OpenGL programming, from books to many
13 collections of tutorials.
14
15 Here is a comprehensive `list of books <https://www.khronos.org/developers/books/>`__ (non free).
16 The `arcsynthesis tutorials <https://web.archive.org/web/20150225192611/http://www.arcsynthesis.org/gltut/index.html>`__
17 is one of the best resources to learn modern OpenGL and
18 `g-truc <http://www.g-truc.net/post-opengl-samples.html#menu>`__
19 offers a set of extensive examples, including advanced features.
20
21
22 .. note::
23
24    You can use the :class:`Image` type to load and set textures.
25    See :class:`Image.gl_load` and :class:`Image.gl_load`,
26    for example.
27
28
29 .. function:: glAccum(op, value):
30
31    Operate on the accumulation buffer.
32
33    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glAccum.xml>`__
34
35    :type op: Enumerated constant
36    :arg op: The accumulation buffer operation.
37    :type value: float
38    :arg value: a value used in the accumulation buffer operation.
39
40
41 .. function:: glAlphaFunc(func, ref):
42
43    Specify the alpha test function.
44
45    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glAlphaFunc.xml>`__
46
47    :type func: Enumerated constant
48    :arg func: Specifies the alpha comparison function.
49    :type ref: float
50    :arg ref: The reference value that incoming alpha values are compared to.
51       Clamped between 0 and 1.
52
53
54 .. function:: glAreTexturesResident(n, textures, residences):
55
56    Determine if textures are loaded in texture memory
57
58    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glAreTexturesResident.xml>`__
59
60    :type n: int
61    :arg n: Specifies the number of textures to be queried.
62    :type textures: :class:`bgl.Buffer` object I{type GL_INT}
63    :arg textures: Specifies an array containing the names of the textures to be queried
64    :type residences: :class:`bgl.Buffer` object I{type GL_INT}(boolean)
65    :arg residences: An array in which the texture residence status in returned.
66       The residence status of a texture named by an element of textures is
67       returned in the corresponding element of residences.
68
69
70 .. function:: glBegin(mode):
71
72    Delimit the vertices of a primitive or a group of like primitives
73
74    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml>`__
75
76    :type mode: Enumerated constant
77    :arg mode: Specifies the primitive that will be create from vertices between
78       glBegin and glEnd.
79
80
81 .. function:: glBindTexture(target, texture):
82
83    Bind a named texture to a texturing target
84
85    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBindTexture.xml>`__
86
87    :type target: Enumerated constant
88    :arg target: Specifies the target to which the texture is bound.
89    :type texture: unsigned int
90    :arg texture: Specifies the name of a texture.
91
92
93 .. function:: glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap):
94
95    Draw a bitmap
96
97    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBitmap.xml>`__
98
99    :type width, height: int
100    :arg width, height: Specify the pixel width and height of the bitmap image.
101    :type xorig, yorig: float
102    :arg xorig, yorig: Specify the location of the origin in the bitmap image. The origin is measured
103       from the lower left corner of the bitmap, with right and up being the positive axes.
104    :type xmove, ymove: float
105    :arg xmove, ymove: Specify the x and y offsets to be added to the current raster position after
106       the bitmap is drawn.
107    :type bitmap: :class:`bgl.Buffer` object I{type GL_BYTE}
108    :arg bitmap: Specifies the address of the bitmap image.
109
110
111 .. function:: glBlendFunc(sfactor, dfactor):
112
113    Specify pixel arithmetic
114
115    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBlendFunc.xml>`__
116
117    :type sfactor: Enumerated constant
118    :arg sfactor: Specifies how the red, green, blue, and alpha source blending factors are
119       computed.
120    :type dfactor: Enumerated constant
121    :arg dfactor: Specifies how the red, green, blue, and alpha destination
122       blending factors are computed.
123
124
125 .. function:: glCallList(list):
126
127    Execute a display list
128
129    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCallList.xml>`__
130
131    :type list: unsigned int
132    :arg list: Specifies the integer name of the display list to be executed.
133
134
135 .. function:: glCallLists(n, type, lists):
136
137    Execute a list of display lists
138
139    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCallLists.xml>`__
140
141    :type n: int
142    :arg n: Specifies the number of display lists to be executed.
143    :type type: Enumerated constant
144    :arg type: Specifies the type of values in lists.
145    :type lists: :class:`bgl.Buffer` object
146    :arg lists: Specifies the address of an array of name offsets in the display list.
147       The pointer type is void because the offsets can be bytes, shorts, ints, or floats,
148       depending on the value of type.
149
150
151 .. function:: glClear(mask):
152
153    Clear buffers to preset values
154
155    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClear.xml>`__
156
157    :type mask: Enumerated constant(s)
158    :arg mask: Bitwise OR of masks that indicate the buffers to be cleared.
159
160
161 .. function:: glClearAccum(red, green, blue, alpha):
162
163    Specify clear values for the accumulation buffer
164
165    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearAccum.xml>`__
166
167    :type red, green, blue, alpha: float
168    :arg red, green, blue, alpha: Specify the red, green, blue, and alpha values used when the
169       accumulation buffer is cleared. The initial values are all 0.
170
171
172 .. function:: glClearColor(red, green, blue, alpha):
173
174    Specify clear values for the color buffers
175
176    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearColor.xml>`__
177
178    :type red, green, blue, alpha: float
179    :arg red, green, blue, alpha: Specify the red, green, blue, and alpha values used when the
180       color buffers are cleared. The initial values are all 0.
181
182
183 .. function:: glClearDepth(depth):
184
185    Specify the clear value for the depth buffer
186
187    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearDepth.xml>`__
188
189    :type depth: int
190    :arg depth: Specifies the depth value used when the depth buffer is cleared.
191       The initial value is 1.
192
193
194 .. function:: glClearIndex(c):
195
196    Specify the clear value for the color index buffers
197
198    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearIndex.xml>`__
199
200    :type c: float
201    :arg c: Specifies the index used when the color index buffers are cleared.
202       The initial value is 0.
203
204
205 .. function:: glClearStencil(s):
206
207    Specify the clear value for the stencil buffer
208
209    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClearStencil.xml>`__
210
211    :type s: int
212    :arg s: Specifies the index used when the stencil buffer is cleared. The initial value is 0.
213
214
215 .. function:: glClipPlane (plane, equation):
216
217    Specify a plane against which all geometry is clipped
218
219    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glClipPlane.xml>`__
220
221    :type plane: Enumerated constant
222    :arg plane: Specifies which clipping plane is being positioned.
223    :type equation: :class:`bgl.Buffer` object I{type GL_FLOAT}(double)
224    :arg equation: Specifies the address of an array of four double- precision
225       floating-point values. These values are interpreted as a plane equation.
226
227
228 .. function:: glColor (red, green, blue, alpha):
229
230    B{glColor3b, glColor3d, glColor3f, glColor3i, glColor3s, glColor3ub, glColor3ui, glColor3us,
231    glColor4b, glColor4d, glColor4f, glColor4i, glColor4s, glColor4ub, glColor4ui, glColor4us,
232    glColor3bv, glColor3dv, glColor3fv, glColor3iv, glColor3sv, glColor3ubv, glColor3uiv,
233    glColor3usv, glColor4bv, glColor4dv, glColor4fv, glColor4iv, glColor4sv, glColor4ubv,
234    glColor4uiv, glColor4usv}
235
236    Set a new color.
237
238    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glColor.xml>`__
239
240    :type red, green, blue, alpha: Depends on function prototype.
241    :arg red, green, blue: Specify new red, green, and blue values for the current color.
242    :arg alpha: Specifies a new alpha value for the current color. Included only in the
243       four-argument glColor4 commands. (With '4' colors only)
244
245
246 .. function:: glColorMask(red, green, blue, alpha):
247
248    Enable and disable writing of frame buffer color components
249
250    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glColorMask.xml>`__
251
252    :type red, green, blue, alpha: int (boolean)
253    :arg red, green, blue, alpha: Specify whether red, green, blue, and alpha can or cannot be
254       written into the frame buffer. The initial values are all GL_TRUE, indicating that the
255       color components can be written.
256
257
258 .. function:: glColorMaterial(face, mode):
259
260    Cause a material color to track the current color
261
262    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glColorMaterial.xml>`__
263
264    :type face: Enumerated constant
265    :arg face: Specifies whether front, back, or both front and back material parameters should
266       track the current color.
267    :type mode: Enumerated constant
268    :arg mode: Specifies which of several material parameters track the current color.
269
270
271 .. function:: glCopyPixels(x, y, width, height, type):
272
273    Copy pixels in the frame buffer
274
275    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCopyPixels.xml>`__
276
277    :type x, y: int
278    :arg x, y: Specify the window coordinates of the lower left corner of the rectangular
279       region of pixels to be copied.
280    :type width, height: int
281    :arg width,height: Specify the dimensions of the rectangular region of pixels to be copied.
282       Both must be non-negative.
283    :type type: Enumerated constant
284    :arg type: Specifies whether color values, depth values, or stencil values are to be copied.
285
286
287    def glCopyTexImage2D(target, level, internalformat, x, y, width, height, border):
288
289    Copy pixels into a 2D texture image
290
291    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCopyTexImage2D.xml>`__
292
293    :type target: Enumerated constant
294    :arg target: Specifies the target texture.
295    :type level: int
296    :arg level: Specifies the level-of-detail number. Level 0 is the base image level.
297       Level n is the nth mipmap reduction image.
298    :type internalformat: int
299    :arg internalformat: Specifies the number of color components in the texture.
300    :type width: int
301    :type x, y: int
302    :arg x, y: Specify the window coordinates of the first pixel that is copied
303       from the frame buffer. This location is the lower left corner of a rectangular
304       block of pixels.
305    :arg width: Specifies the width of the texture image. Must be 2n+2(border) for
306       some integer n. All implementations support texture images that are at least 64
307       texels wide.
308    :type height: int
309    :arg height: Specifies the height of the texture image. Must be 2m+2(border) for
310       some integer m. All implementations support texture images that are at least 64
311       texels high.
312    :type border: int
313    :arg border: Specifies the width of the border. Must be either 0 or 1.
314
315
316 .. function:: glCullFace(mode):
317
318    Specify whether front- or back-facing facets can be culled
319
320    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCullFace.xml>`__
321
322    :type mode: Enumerated constant
323    :arg mode: Specifies whether front- or back-facing facets are candidates for culling.
324
325
326 .. function:: glDeleteLists(list, range):
327
328    Delete a contiguous group of display lists
329
330    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteLists.xml>`__
331
332    :type list: unsigned int
333    :arg list: Specifies the integer name of the first display list to delete
334    :type range: int
335    :arg range: Specifies the number of display lists to delete
336
337
338 .. function:: glDeleteTextures(n, textures):
339
340    Delete named textures
341
342    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteTextures.xml>`__
343
344    :type n: int
345    :arg n: Specifies the number of textures to be deleted
346    :type textures: :class:`bgl.Buffer` I{GL_INT}
347    :arg textures: Specifies an array of textures to be deleted
348
349
350 .. function:: glDepthFunc(func):
351
352    Specify the value used for depth buffer comparisons
353
354    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthFunc.xml>`__
355
356    :type func: Enumerated constant
357    :arg func: Specifies the depth comparison function.
358
359
360 .. function:: glDepthMask(flag):
361
362    Enable or disable writing into the depth buffer
363
364    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthMask.xml>`__
365
366    :type flag: int (boolean)
367    :arg flag: Specifies whether the depth buffer is enabled for writing. If flag is GL_FALSE,
368       depth buffer writing is disabled. Otherwise, it is enabled. Initially, depth buffer
369       writing is enabled.
370
371
372 .. function:: glDepthRange(zNear, zFar):
373
374    Specify mapping of depth values from normalized device coordinates to window coordinates
375
376    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDepthRange.xml>`__
377
378    :type zNear: int
379    :arg zNear: Specifies the mapping of the near clipping plane to window coordinates.
380       The initial value is 0.
381    :type zFar: int
382    :arg zFar: Specifies the mapping of the far clipping plane to window coordinates.
383       The initial value is 1.
384
385
386 .. function:: glDisable(cap):
387
388    Disable server-side GL capabilities
389
390    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml>`__
391
392    :type cap: Enumerated constant
393    :arg cap: Specifies a symbolic constant indicating a GL capability.
394
395
396 .. function:: glDrawBuffer(mode):
397
398    Specify which color buffers are to be drawn into
399
400    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDrawBuffer.xml>`__
401
402    :type mode: Enumerated constant
403    :arg mode: Specifies up to four color buffers to be drawn into.
404
405
406 .. function:: glDrawPixels(width, height, format, type, pixels):
407
408    Write a block of pixels to the frame buffer
409
410    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml>`__
411
412    :type width, height: int
413    :arg width, height: Specify the dimensions of the pixel rectangle to be
414       written into the frame buffer.
415    :type format: Enumerated constant
416    :arg format: Specifies the format of the pixel data.
417    :type type: Enumerated constant
418    :arg type: Specifies the data type for pixels.
419    :type pixels: :class:`bgl.Buffer` object
420    :arg pixels: Specifies a pointer to the pixel data.
421
422
423 .. function:: glEdgeFlag (flag):
424
425    B{glEdgeFlag, glEdgeFlagv}
426
427    Flag edges as either boundary or non-boundary
428
429    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEdgeFlag.xml>`__
430
431    :type flag: Depends of function prototype
432    :arg flag: Specifies the current edge flag value.The initial value is GL_TRUE.
433
434
435 .. function:: glEnable(cap):
436
437    Enable server-side GL capabilities
438
439    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEnable.xml>`__
440
441    :type cap: Enumerated constant
442    :arg cap: Specifies a symbolic constant indicating a GL capability.
443
444
445 .. function:: glEnd():
446
447    Delimit the vertices of a primitive or group of like primitives
448
449    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glBegin.xml>`__
450
451
452 .. function:: glEndList():
453
454    Create or replace a display list
455
456    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml>`__
457
458
459 .. function:: glEvalCoord (u,v):
460
461    B{glEvalCoord1d, glEvalCoord1f, glEvalCoord2d, glEvalCoord2f, glEvalCoord1dv, glEvalCoord1fv,
462    glEvalCoord2dv, glEvalCoord2fv}
463
464    Evaluate enabled one- and two-dimensional maps
465
466    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalCoord.xml>`__
467
468    :type u: Depends on function prototype.
469    :arg u: Specifies a value that is the domain coordinate u to the basis function defined
470       in a previous glMap1 or glMap2 command. If the function prototype ends in 'v' then
471       u specifies a pointer to an array containing either one or two domain coordinates. The first
472       coordinate is u. The second coordinate is v, which is present only in glEvalCoord2 versions.
473    :type v: Depends on function prototype. (only with '2' prototypes)
474    :arg v: Specifies a value that is the domain coordinate v to the basis function defined
475       in a previous glMap2 command. This argument is not present in a glEvalCoord1 command.
476
477
478 .. function:: glEvalMesh (mode, i1, i2):
479
480    B{glEvalMesh1 or glEvalMesh2}
481
482    Compute a one- or two-dimensional grid of points or lines
483
484    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalMesh.xml>`__
485
486    :type mode: Enumerated constant
487    :arg mode: In glEvalMesh1, specifies whether to compute a one-dimensional
488       mesh of points or lines.
489    :type i1, i2: int
490    :arg i1, i2: Specify the first and last integer values for the grid domain variable i.
491
492
493 .. function:: glEvalPoint (i, j):
494
495    B{glEvalPoint1 and glEvalPoint2}
496
497    Generate and evaluate a single point in a mesh
498
499    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glEvalPoint.xml>`__
500
501    :type i: int
502    :arg i: Specifies the integer value for grid domain variable i.
503    :type j: int (only with '2' prototypes)
504    :arg j: Specifies the integer value for grid domain variable j (glEvalPoint2 only).
505
506
507 .. function:: glFeedbackBuffer (size, type, buffer):
508
509    Controls feedback mode
510
511    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFeedbackBuffer.xml>`__
512
513    :type size: int
514    :arg size: Specifies the maximum number of values that can be written into buffer.
515    :type type: Enumerated constant
516    :arg type: Specifies a symbolic constant that describes the information that
517       will be returned for each vertex.
518    :type buffer: :class:`bgl.Buffer` object I{GL_FLOAT}
519    :arg buffer: Returns the feedback data.
520
521
522 .. function:: glFinish():
523
524    Block until all GL execution is complete
525
526    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFinish.xml>`__
527
528
529 .. function:: glFlush():
530
531    Force Execution of GL commands in finite time
532
533    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFlush.xml>`__
534
535
536 .. function:: glFog (pname, param):
537
538    B{glFogf, glFogi, glFogfv, glFogiv}
539
540    Specify fog parameters
541
542    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFog.xml>`__
543
544    :type pname: Enumerated constant
545    :arg pname: Specifies a single-valued fog parameter. If the function prototype
546       ends in 'v' specifies a fog parameter.
547    :type param: Depends on function prototype.
548    :arg param: Specifies the value or values to be assigned to pname. GL_FOG_COLOR
549       requires an array of four values. All other parameters accept an array containing
550       only a single value.
551
552
553 .. function:: glFrontFace(mode):
554
555    Define front- and back-facing polygons
556
557    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFrontFace.xml>`__
558
559    :type mode: Enumerated constant
560    :arg mode: Specifies the orientation of front-facing polygons.
561
562
563 .. function:: glFrustum(left, right, bottom, top, zNear, zFar):
564
565    Multiply the current matrix by a perspective matrix
566
567    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml>`__
568
569    :type left, right: double (float)
570    :arg left, right: Specify the coordinates for the left and right vertical
571       clipping planes.
572    :type top, bottom: double (float)
573    :arg top, bottom: Specify the coordinates for the bottom and top horizontal
574       clipping planes.
575    :type zNear, zFar: double (float)
576    :arg zNear, zFar: Specify the distances to the near and far depth clipping planes.
577       Both distances must be positive.
578
579
580 .. function:: glGenLists(range):
581
582    Generate a contiguous set of empty display lists
583
584    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGenLists.xml>`__
585
586    :type range: int
587    :arg range: Specifies the number of contiguous empty display lists to be generated.
588
589
590 .. function:: glGenTextures(n, textures):
591
592    Generate texture names
593
594    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGenTextures.xml>`__
595
596    :type n: int
597    :arg n: Specifies the number of textures name to be generated.
598    :type textures: :class:`bgl.Buffer` object I{type GL_INT}
599    :arg textures: Specifies an array in which the generated textures names are stored.
600
601
602 .. function:: glGet (pname, param):
603
604    B{glGetBooleanv, glGetfloatv, glGetFloatv, glGetIntegerv}
605
606    Return the value or values of a selected parameter
607
608    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGet.xml>`__
609
610    :type pname: Enumerated constant
611    :arg pname: Specifies the parameter value to be returned.
612    :type param: Depends on function prototype.
613    :arg param: Returns the value or values of the specified parameter.
614
615
616 .. function:: glGetClipPlane(plane, equation):
617
618    Return the coefficients of the specified clipping plane
619
620    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetClipPlane.xml>`__
621
622    :type plane: Enumerated constant
623    :arg plane: Specifies a clipping plane. The number of clipping planes depends on the
624       implementation, but at least six clipping planes are supported. They are identified by
625       symbolic names of the form GL_CLIP_PLANEi where 0 < i < GL_MAX_CLIP_PLANES.
626    :type equation:  :class:`bgl.Buffer` object I{type GL_FLOAT}
627    :arg equation:  Returns four float (double)-precision values that are the coefficients of the
628       plane equation of plane in eye coordinates. The initial value is (0, 0, 0, 0).
629
630
631 .. function:: glGetError():
632
633    Return error information
634
635    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetError.xml>`__
636
637
638 .. function:: glGetLight (light, pname, params):
639
640    B{glGetLightfv and glGetLightiv}
641
642    Return light source parameter values
643
644    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetLight.xml>`__
645
646    :type light: Enumerated constant
647    :arg light: Specifies a light source. The number of possible lights depends on the
648       implementation, but at least eight lights are supported. They are identified by symbolic
649       names of the form GL_LIGHTi where 0 < i < GL_MAX_LIGHTS.
650    :type pname: Enumerated constant
651    :arg pname: Specifies a light source parameter for light.
652    :type params:  :class:`bgl.Buffer` object. Depends on function prototype.
653    :arg params: Returns the requested data.
654
655
656 .. function:: glGetMap (target, query, v):
657
658    B{glGetMapdv, glGetMapfv, glGetMapiv}
659
660    Return evaluator parameters
661
662    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetMap.xml>`_
663
664    :type target: Enumerated constant
665    :arg target: Specifies the symbolic name of a map.
666    :type query: Enumerated constant
667    :arg query: Specifies which parameter to return.
668    :type v: :class:`bgl.Buffer` object. Depends on function prototype.
669    :arg v: Returns the requested data.
670
671
672 .. function:: glGetMaterial (face, pname, params):
673
674    B{glGetMaterialfv, glGetMaterialiv}
675
676    Return material parameters
677
678    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetMaterial.xml>`__
679
680    :type face: Enumerated constant
681    :arg face: Specifies which of the two materials is being queried.
682       representing the front and back materials, respectively.
683    :type pname: Enumerated constant
684    :arg pname: Specifies the material parameter to return.
685    :type params: :class:`bgl.Buffer` object. Depends on function prototype.
686    :arg params: Returns the requested data.
687
688
689 .. function:: glGetPixelMap (map, values):
690
691    B{glGetPixelMapfv, glGetPixelMapuiv, glGetPixelMapusv}
692
693    Return the specified pixel map
694
695    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetPixelMap.xml>`__
696
697    :type map:  Enumerated constant
698    :arg map: Specifies the name of the pixel map to return.
699    :type values: :class:`bgl.Buffer` object. Depends on function prototype.
700    :arg values: Returns the pixel map contents.
701
702
703 .. function:: glGetPolygonStipple(mask):
704
705    Return the polygon stipple pattern
706
707    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetPolygonStipple.xml>`__
708
709    :type mask: :class:`bgl.Buffer` object I{type GL_BYTE}
710    :arg mask: Returns the stipple pattern. The initial value is all 1's.
711
712
713 .. function:: glGetString(name):
714
715    Return a string describing the current GL connection
716
717    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetString.xml>`__
718
719    :type name: Enumerated constant
720    :arg name: Specifies a symbolic constant.
721
722
723
724 .. function:: glGetTexEnv (target, pname, params):
725
726    B{glGetTexEnvfv, glGetTexEnviv}
727
728    Return texture environment parameters
729
730    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexEnv.xml>`__
731
732    :type target: Enumerated constant
733    :arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV.
734    :type pname: Enumerated constant
735    :arg pname: Specifies the symbolic name of a texture environment parameter.
736    :type params: :class:`bgl.Buffer` object. Depends on function prototype.
737    :arg params: Returns the requested data.
738
739
740 .. function:: glGetTexGen (coord, pname, params):
741
742    B{glGetTexGendv, glGetTexGenfv, glGetTexGeniv}
743
744    Return texture coordinate generation parameters
745
746    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexGen.xml>`__
747
748    :type coord: Enumerated constant
749    :arg coord: Specifies a texture coordinate.
750    :type pname: Enumerated constant
751    :arg pname: Specifies the symbolic name of the value(s) to be returned.
752    :type params: :class:`bgl.Buffer` object. Depends on function prototype.
753    :arg params: Returns the requested data.
754
755
756 .. function:: glGetTexImage(target, level, format, type, pixels):
757
758    Return a texture image
759
760    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexImage.xml>`__
761
762    :type target: Enumerated constant
763    :arg target: Specifies which texture is to be obtained.
764    :type level: int
765    :arg level: Specifies the level-of-detail number of the desired image.
766       Level 0 is the base image level. Level n is the nth mipmap reduction image.
767    :type format: Enumerated constant
768    :arg format: Specifies a pixel format for the returned data.
769    :type type: Enumerated constant
770    :arg type: Specifies a pixel type for the returned data.
771    :type pixels: :class:`bgl.Buffer` object.
772    :arg pixels: Returns the texture image. Should be a pointer to an array of the
773       type specified by type
774
775
776 .. function:: glGetTexLevelParameter (target, level, pname, params):
777
778    B{glGetTexLevelParameterfv, glGetTexLevelParameteriv}
779
780    return texture parameter values for a specific level of detail
781
782    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexLevelParameter.xml>`__
783
784    :type target: Enumerated constant
785    :arg target: Specifies the symbolic name of the target texture.
786    :type level: int
787    :arg level: Specifies the level-of-detail number of the desired image.
788       Level 0 is the base image level. Level n is the nth mipmap reduction image.
789    :type pname: Enumerated constant
790    :arg pname: Specifies the symbolic name of a texture parameter.
791    :type params: :class:`bgl.Buffer` object. Depends on function prototype.
792    :arg params: Returns the requested data.
793
794
795 .. function:: glGetTexParameter (target, pname, params):
796
797    B{glGetTexParameterfv, glGetTexParameteriv}
798
799    Return texture parameter values
800
801    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetTexParameter.xml>`__
802
803    :type target: Enumerated constant
804    :arg target: Specifies the symbolic name of the target texture.
805    :type pname: Enumerated constant
806    :arg pname: Specifies the symbolic name the target texture.
807    :type params: :class:`bgl.Buffer` object. Depends on function prototype.
808    :arg params: Returns the texture parameters.
809
810
811 .. function:: glHint(target, mode):
812
813    Specify implementation-specific hints
814
815    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glHint.xml>`__
816
817    :type target: Enumerated constant
818    :arg target: Specifies a symbolic constant indicating the behavior to be
819       controlled.
820    :type mode: Enumerated constant
821    :arg mode: Specifies a symbolic constant indicating the desired behavior.
822
823
824 .. function:: glIndex(c):
825
826    B{glIndexd, glIndexf, glIndexi, glIndexs,  glIndexdv, glIndexfv, glIndexiv, glIndexsv}
827
828    Set the current color index
829
830    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIndex.xml>`__
831
832    :type c: :class:`bgl.Buffer` object. Depends on function prototype.
833    :arg c: Specifies a pointer to a one element array that contains the new value for
834       the current color index.
835
836
837 .. function:: glIndexMask(mask):
838
839    Control the writing of individual bits in the color index buffers
840
841    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIndexMask.xml>`__
842
843    :type mask: int
844    :arg mask: Specifies a bit mask to enable and disable the writing of individual bits
845       in the color index buffers.
846       Initially, the mask is all 1's.
847
848
849 .. function:: glInitNames():
850
851    Initialize the name stack
852
853    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glInitNames.xml>`__
854
855
856 .. function:: glIsEnabled(cap):
857
858    Test whether a capability is enabled
859
860    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsEnabled.xml>`__
861
862    :type cap: Enumerated constant
863    :arg cap: Specifies a constant representing a GL capability.
864
865
866 .. function:: glIsList(list):
867
868    Determine if a name corresponds to a display-list
869
870    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsList.xml>`__
871
872    :type list: unsigned int
873    :arg list: Specifies a potential display-list name.
874
875
876 .. function:: glIsTexture(texture):
877
878    Determine if a name corresponds to a texture
879
880    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsTexture.xml>`__
881
882    :type texture: unsigned int
883    :arg texture: Specifies a value that may be the name of a texture.
884
885
886 .. function:: glLight (light, pname, param):
887
888    B{glLightf,glLighti, glLightfv, glLightiv}
889
890    Set the light source parameters
891
892    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLight.xml>`__
893
894    :type light: Enumerated constant
895    :arg light: Specifies a light. The number of lights depends on the implementation,
896       but at least eight lights are supported. They are identified by symbolic names of the
897       form GL_LIGHTi where 0 < i < GL_MAX_LIGHTS.
898    :type pname: Enumerated constant
899    :arg pname: Specifies a single-valued light source parameter for light.
900    :type param: Depends on function prototype.
901    :arg param: Specifies the value that parameter pname of light source light will be set to.
902       If function prototype ends in 'v' specifies a pointer to the value or values that
903       parameter pname of light source light will be set to.
904
905
906 .. function:: glLightModel (pname, param):
907
908    B{glLightModelf, glLightModeli, glLightModelfv, glLightModeliv}
909
910    Set the lighting model parameters
911
912    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLightModel.xml>`__
913
914    :type pname:  Enumerated constant
915    :arg pname: Specifies a single-value light model parameter.
916    :type param: Depends on function prototype.
917    :arg param: Specifies the value that param will be set to. If function prototype ends in 'v'
918       specifies a pointer to the value or values that param will be set to.
919
920
921 .. function:: glLineStipple(factor, pattern):
922
923    Specify the line stipple pattern
924
925    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLineStipple.xml>`__
926
927    :type factor: int
928    :arg factor: Specifies a multiplier for each bit in the line stipple pattern.
929       If factor is 3, for example, each bit in the pattern is used three times before
930       the next bit in the pattern is used. factor is clamped to the range [1, 256] and
931       defaults to 1.
932    :type pattern: unsigned short int
933    :arg pattern: Specifies a 16-bit integer whose bit pattern determines which fragments
934       of a line will be drawn when the line is rasterized. Bit zero is used first; the default
935       pattern is all 1's.
936
937
938 .. function:: glLineWidth(width):
939
940    Specify the width of rasterized lines.
941
942    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLineWidth.xml>`__
943
944    :type width: float
945    :arg width: Specifies the width of rasterized lines. The initial value is 1.
946
947
948 .. function:: glListBase(base):
949
950    Set the display-list base for glCallLists
951
952    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glListBase.xml>`__
953
954    :type base: unsigned int
955    :arg base: Specifies an integer offset that will be added to glCallLists
956       offsets to generate display-list names. The initial value is 0.
957
958
959 .. function:: glLoadIdentity():
960
961    Replace the current matrix with the identity matrix
962
963    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml>`__
964
965
966 .. function:: glLoadMatrix (m):
967
968    B{glLoadMatrixd, glLoadMatixf}
969
970    Replace the current matrix with the specified matrix
971
972    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLoadMatrix.xml>`__
973
974    :type m: :class:`bgl.Buffer` object. Depends on function prototype.
975    :arg m: Specifies a pointer to 16 consecutive values, which are used as the elements
976       of a 4x4 column-major matrix.
977
978
979 .. function:: glLoadName(name):
980
981    Load a name onto the name stack.
982
983    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLoadName.xml>`__
984
985    :type name: unsigned int
986    :arg name: Specifies a name that will replace the top value on the name stack.
987
988
989 .. function:: glLogicOp(opcode):
990
991    Specify a logical pixel operation for color index rendering
992
993    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLogicOp.xml>`__
994
995    :type opcode: Enumerated constant
996    :arg opcode: Specifies a symbolic constant that selects a logical operation.
997
998
999 .. function:: glMap1 (target, u1, u2, stride, order, points):
1000
1001    B{glMap1d, glMap1f}
1002
1003    Define a one-dimensional evaluator
1004
1005    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMap1.xml>`__
1006
1007    :type target: Enumerated constant
1008    :arg target: Specifies the kind of values that are generated by the evaluator.
1009    :type u1, u2: Depends on function prototype.
1010    :arg u1,u2: Specify a linear mapping of u, as presented to glEvalCoord1, to ^, t
1011       he variable that is evaluated by the equations specified by this command.
1012    :type stride: int
1013    :arg stride: Specifies the number of floats or float (double)s between the beginning
1014       of one control point and the beginning of the next one in the data structure
1015       referenced in points. This allows control points to be embedded in arbitrary data
1016       structures. The only constraint is that the values for a particular control point must
1017       occupy contiguous memory locations.
1018    :type order: int
1019    :arg order: Specifies the number of control points. Must be positive.
1020    :type points: :class:`bgl.Buffer` object. Depends on function prototype.
1021    :arg points: Specifies a pointer to the array of control points.
1022
1023
1024 .. function:: glMap2 (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points):
1025
1026    B{glMap2d, glMap2f}
1027
1028    Define a two-dimensional evaluator
1029
1030    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMap2.xml>`__
1031
1032    :type target: Enumerated constant
1033    :arg target: Specifies the kind of values that are generated by the evaluator.
1034    :type u1, u2: Depends on function prototype.
1035    :arg u1,u2: Specify a linear mapping of u, as presented to glEvalCoord2, to ^, t
1036       he variable that is evaluated by the equations specified by this command. Initially
1037       u1 is 0 and u2 is 1.
1038    :type ustride: int
1039    :arg ustride: Specifies the number of floats or float (double)s between the beginning
1040       of control point R and the beginning of control point R ij, where i and j are the u
1041       and v control point indices, respectively. This allows control points to be embedded
1042       in arbitrary data structures. The only constraint is that the values for a particular
1043       control point must occupy contiguous memory locations. The initial value of ustride is 0.
1044    :type uorder: int
1045    :arg uorder: Specifies the dimension of the control point array in the u axis.
1046       Must be positive. The initial value is 1.
1047    :type v1, v2: Depends on function prototype.
1048    :arg v1, v2: Specify a linear mapping of v, as presented to glEvalCoord2,
1049       to ^, one of the two variables that are evaluated by the equations
1050       specified by this command. Initially, v1 is 0 and v2 is 1.
1051    :type vstride: int
1052    :arg vstride: Specifies the number of floats or float (double)s between the
1053      beginning of control point R and the beginning of control point R ij,
1054      where i and j are the u and v control point(indices, respectively.
1055      This allows control points to be embedded in arbitrary data structures.
1056      The only constraint is that the values for a particular control point must
1057      occupy contiguous memory locations. The initial value of vstride is 0.
1058    :type vorder: int
1059    :arg vorder: Specifies the dimension of the control point array in the v axis.
1060       Must be positive. The initial value is 1.
1061    :type points: :class:`bgl.Buffer` object. Depends on function prototype.
1062    :arg points: Specifies a pointer to the array of control points.
1063
1064
1065 .. function:: glMapGrid (un, u1,u2 ,vn, v1, v2):
1066
1067    B{glMapGrid1d, glMapGrid1f, glMapGrid2d, glMapGrid2f}
1068
1069    Define a one- or two-dimensional mesh
1070
1071    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMapGrid.xml>`__
1072
1073    :type un: int
1074    :arg un: Specifies the number of partitions in the grid range interval
1075       [u1, u2]. Must be positive.
1076    :type u1, u2: Depends on function prototype.
1077    :arg u1, u2: Specify the mappings for integer grid domain values i=0 and i=un.
1078    :type vn: int
1079    :arg vn: Specifies the number of partitions in the grid range interval
1080       [v1, v2] (glMapGrid2 only).
1081    :type v1, v2: Depends on function prototype.
1082    :arg v1, v2: Specify the mappings for integer grid domain values j=0 and j=vn
1083       (glMapGrid2 only).
1084
1085
1086 .. function:: glMaterial (face, pname, params):
1087
1088    Specify material parameters for the lighting model.
1089
1090    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMaterial.xml>`__
1091
1092    :type face: Enumerated constant
1093    :arg face: Specifies which face or faces are being updated. Must be one of:
1094    :type pname: Enumerated constant
1095    :arg pname: Specifies the single-valued material parameter of the face
1096       or faces that is being updated. Must be GL_SHININESS.
1097    :type params: int
1098    :arg params: Specifies the value that parameter GL_SHININESS will be set to.
1099       If function prototype ends in 'v' specifies a pointer to the value or values that
1100       pname will be set to.
1101
1102
1103 .. function:: glMatrixMode(mode):
1104
1105    Specify which matrix is the current matrix.
1106
1107    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMatrixMode.xml>`__
1108
1109    :type mode: Enumerated constant
1110    :arg mode: Specifies which matrix stack is the target for subsequent matrix operations.
1111
1112
1113 .. function:: glMultMatrix (m):
1114
1115    B{glMultMatrixd, glMultMatrixf}
1116
1117    Multiply the current matrix with the specified matrix
1118
1119    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glMultMatrix.xml>`__
1120
1121    :type m: :class:`bgl.Buffer` object. Depends on function prototype.
1122    :arg m: Points to 16 consecutive values that are used as the elements of a 4x4 column
1123       major matrix.
1124
1125
1126 .. function:: glNewList(list, mode):
1127
1128    Create or replace a display list
1129
1130    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glNewList.xml>`__
1131
1132    :type list: unsigned int
1133    :arg list: Specifies the display list name
1134    :type mode: Enumerated constant
1135    :arg mode: Specifies the compilation mode.
1136
1137
1138 .. function:: glNormal3 (nx, ny, nz, v):
1139
1140    B{Normal3b, Normal3bv, Normal3d, Normal3dv, Normal3f, Normal3fv, Normal3i, Normal3iv,
1141    Normal3s, Normal3sv}
1142
1143    Set the current normal vector
1144
1145    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glNormal.xml>`__
1146
1147    :type nx, ny, nz: Depends on function prototype. (non - 'v' prototypes only)
1148    :arg nx, ny, nz: Specify the x, y, and z coordinates of the new current normal.
1149       The initial value of the current normal is the unit vector, (0, 0, 1).
1150    :type v: :class:`bgl.Buffer` object. Depends on function prototype. ('v' prototypes)
1151    :arg v: Specifies a pointer to an array of three elements: the x, y, and z coordinates
1152       of the new current normal.
1153
1154
1155 .. function:: glOrtho(left, right, bottom, top, zNear, zFar):
1156
1157    Multiply the current matrix with an orthographic matrix
1158
1159    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml>`__
1160
1161    :type left, right: double (float)
1162    :arg left, right: Specify the coordinates for the left and
1163       right vertical clipping planes.
1164    :type bottom, top: double (float)
1165    :arg bottom, top: Specify the coordinates for the bottom and top
1166       horizontal clipping planes.
1167    :type zNear, zFar: double (float)
1168    :arg zNear, zFar: Specify the distances to the nearer and farther
1169       depth clipping planes. These values are negative if the plane is to be behind the viewer.
1170
1171
1172 .. function:: glPassThrough(token):
1173
1174    Place a marker in the feedback buffer
1175
1176    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPassThrough.xml>`__
1177
1178    :type token: float
1179    :arg token: Specifies a marker value to be placed in the feedback
1180       buffer following a GL_PASS_THROUGH_TOKEN.
1181
1182
1183 .. function:: glPixelMap (map, mapsize, values):
1184
1185    B{glPixelMapfv, glPixelMapuiv, glPixelMapusv}
1186
1187    Set up pixel transfer maps
1188
1189    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelMap.xml>`__
1190
1191    :type map: Enumerated constant
1192    :arg map: Specifies a symbolic map name.
1193    :type mapsize: int
1194    :arg mapsize: Specifies the size of the map being defined.
1195    :type values: :class:`bgl.Buffer` object. Depends on function prototype.
1196    :arg values: Specifies an array of mapsize values.
1197
1198
1199 .. function:: glPixelStore (pname, param):
1200
1201    B{glPixelStoref, glPixelStorei}
1202
1203    Set pixel storage modes
1204
1205    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelStore.xml>`__
1206
1207    :type pname: Enumerated constant
1208    :arg pname: Specifies the symbolic name of the parameter to be set.
1209       Six values affect the packing of pixel data into memory.
1210       Six more affect the unpacking of pixel data from memory.
1211    :type param: Depends on function prototype.
1212    :arg param: Specifies the value that pname is set to.
1213
1214
1215 .. function:: glPixelTransfer (pname, param):
1216
1217    B{glPixelTransferf, glPixelTransferi}
1218
1219    Set pixel transfer modes
1220
1221    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelTransfer.xml>`__
1222
1223    :type pname: Enumerated constant
1224    :arg pname: Specifies the symbolic name of the pixel transfer parameter to be set.
1225    :type param: Depends on function prototype.
1226    :arg param: Specifies the value that pname is set to.
1227
1228
1229 .. function:: glPixelZoom(xfactor, yfactor):
1230
1231    Specify the pixel zoom factors
1232
1233    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPixelZoom.xml>`__
1234
1235    :type xfactor, yfactor: float
1236    :arg xfactor, yfactor: Specify the x and y zoom factors for pixel write operations.
1237
1238
1239 .. function:: glPointSize(size):
1240
1241    Specify the diameter of rasterized points
1242
1243    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPointSize.xml>`__
1244
1245    :type size: float
1246    :arg size: Specifies the diameter of rasterized points. The initial value is 1.
1247
1248
1249 .. function:: glPolygonMode(face, mode):
1250
1251    Select a polygon rasterization mode
1252
1253    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonMode.xml>`__
1254
1255    :type face: Enumerated constant
1256    :arg face: Specifies the polygons that mode applies to.
1257       Must be GL_FRONT for front-facing polygons, GL_BACK for back- facing
1258       polygons, or GL_FRONT_AND_BACK for front- and back-facing polygons.
1259    :type mode: Enumerated constant
1260    :arg mode: Specifies how polygons will be rasterized.
1261       The initial value is GL_FILL for both front- and back- facing polygons.
1262
1263
1264 .. function:: glPolygonOffset(factor, units):
1265
1266    Set the scale and units used to calculate depth values
1267
1268    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonOffset.xml>`__
1269
1270    :type factor: float
1271    :arg factor: Specifies a scale factor that is used to create a variable depth
1272       offset for each polygon. The initial value is 0.
1273    :type units:  float
1274    :arg units: Is multiplied by an implementation-specific value to create a
1275       constant depth offset. The initial value is 0.
1276
1277
1278 .. function:: glPolygonStipple(mask):
1279
1280    Set the polygon stippling pattern
1281
1282    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPolygonStipple.xml>`__
1283
1284    :type mask: :class:`bgl.Buffer` object I{type GL_BYTE}
1285    :arg mask: Specifies a pointer to a 32x32 stipple pattern that will be unpacked
1286       from memory in the same way that glDrawPixels unpacks pixels.
1287
1288
1289 .. function:: glPopAttrib():
1290
1291    Pop the server attribute stack
1292
1293    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPopAttrib.xml>`__
1294
1295
1296 .. function:: glPopClientAttrib():
1297
1298    Pop the client attribute stack
1299
1300    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPopClientAttrib.xml>`__
1301
1302
1303 .. function:: glPopMatrix():
1304
1305    Pop the current matrix stack
1306
1307    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPopMatrix.xml>`__
1308
1309
1310 .. function:: glPopName():
1311
1312    Pop the name stack
1313
1314    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPopName.xml>`__
1315
1316
1317 .. function:: glPrioritizeTextures(n, textures, priorities):
1318
1319    Set texture residence priority
1320
1321    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPrioritizeTextures.xml>`__
1322
1323    :type n: int
1324    :arg n: Specifies the number of textures to be prioritized.
1325    :type textures: :class:`bgl.Buffer` I{type GL_INT}
1326    :arg textures: Specifies an array containing the names of the textures to be prioritized.
1327    :type priorities: :class:`bgl.Buffer` I{type GL_FLOAT}
1328    :arg priorities: Specifies an array containing the texture priorities.
1329       A priority given in an element of priorities applies to the texture named
1330       by the corresponding element of textures.
1331
1332
1333 .. function:: glPushAttrib(mask):
1334
1335    Push the server attribute stack
1336
1337    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml>`__
1338
1339    :type mask: Enumerated constant(s)
1340    :arg mask: Specifies a mask that indicates which attributes to save.
1341
1342
1343 .. function:: glPushClientAttrib(mask):
1344
1345    Push the client attribute stack
1346
1347    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPushClientAttrib.xml>`__
1348
1349    :type mask: Enumerated constant(s)
1350    :arg mask: Specifies a mask that indicates which attributes to save.
1351
1352
1353 .. function:: glPushMatrix():
1354
1355    Push the current matrix stack
1356
1357    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPushMatrix.xml>`__
1358
1359
1360 .. function:: glPushName(name):
1361
1362    Push the name stack
1363
1364    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glPushName.xml>`__
1365
1366    :type name: unsigned int
1367    :arg name: Specifies a name that will be pushed onto the name stack.
1368
1369
1370 .. function:: glRasterPos (x,y,z,w):
1371
1372    B{glRasterPos2d, glRasterPos2f, glRasterPos2i, glRasterPos2s, glRasterPos3d,
1373    glRasterPos3f, glRasterPos3i, glRasterPos3s, glRasterPos4d, glRasterPos4f,
1374    glRasterPos4i, glRasterPos4s, glRasterPos2dv, glRasterPos2fv, glRasterPos2iv,
1375    glRasterPos2sv, glRasterPos3dv, glRasterPos3fv, glRasterPos3iv, glRasterPos3sv,
1376    glRasterPos4dv, glRasterPos4fv, glRasterPos4iv, glRasterPos4sv}
1377
1378    Specify the raster position for pixel operations
1379
1380    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRasterPos.xml>`__
1381
1382    :type x, y, z, w: Depends on function prototype. (z and w for '3' and '4' prototypes only)
1383    :arg x, y, z, w: Specify the x,y,z, and w object coordinates (if present) for the
1384       raster position.  If function prototype ends in 'v' specifies a pointer to an array of two,
1385       three, or four elements, specifying x, y, z, and w coordinates, respectively.
1386
1387    .. note::
1388
1389       If you are drawing to the 3d view with a Scriptlink of a space handler
1390       the zoom level of the panels will scale the glRasterPos by the view matrix.
1391       so a X of 10 will not always offset 10 pixels as you would expect.
1392
1393       To work around this get the scale value of the view matrix and use it to scale your pixel values.
1394
1395       .. code-block:: python
1396
1397         import bgl
1398         xval, yval= 100, 40
1399         # Get the scale of the view matrix
1400         view_matrix = bgl.Buffer(bgl.GL_FLOAT, 16)
1401         bgl.glGetFloatv(bgl.GL_MODELVIEW_MATRIX, view_matrix)
1402         f = 1.0 / view_matrix[0]
1403
1404         # Instead of the usual glRasterPos2i(xval, yval)
1405         bgl.glRasterPos2f(xval * f, yval * f)
1406
1407
1408 .. function:: glReadBuffer(mode):
1409
1410    Select a color buffer source for pixels.
1411
1412    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glReadBuffer.xml>`__
1413
1414    :type mode: Enumerated constant
1415    :arg mode: Specifies a color buffer.
1416
1417
1418 .. function:: glReadPixels(x, y, width, height, format, type, pixels):
1419
1420    Read a block of pixels from the frame buffer
1421
1422    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glReadPixels.xml>`__
1423
1424    :type x, y: int
1425    :arg x, y: Specify the window coordinates of the first pixel that is read
1426       from the frame buffer. This location is the lower left corner of a rectangular
1427       block of pixels.
1428    :type width, height: int
1429    :arg width, height: Specify the dimensions of the pixel rectangle. width and
1430       height of one correspond to a single pixel.
1431    :type format: Enumerated constant
1432    :arg format: Specifies the format of the pixel data.
1433    :type type: Enumerated constant
1434    :arg type: Specifies the data type of the pixel data.
1435    :type pixels: :class:`bgl.Buffer` object
1436    :arg pixels: Returns the pixel data.
1437
1438
1439 .. function:: glRect (x1,y1,x2,y2,v1,v2):
1440
1441    B{glRectd, glRectf, glRecti, glRects, glRectdv, glRectfv, glRectiv, glRectsv}
1442
1443    Draw a rectangle
1444
1445    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRect.xml>`__
1446
1447    :type x1, y1: Depends on function prototype. (for non 'v' prototypes only)
1448    :arg x1, y1: Specify one vertex of a rectangle
1449    :type x2, y2: Depends on function prototype. (for non 'v' prototypes only)
1450    :arg x2, y2: Specify the opposite vertex of the rectangle
1451    :type v1, v2: Depends on function prototype. (for 'v' prototypes only)
1452    :arg v1, v2: Specifies a pointer to one vertex of a rectangle and the pointer
1453       to the opposite vertex of the rectangle
1454
1455
1456 .. function:: glRenderMode(mode):
1457
1458    Set rasterization mode
1459
1460    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRenderMode.xml>`__
1461
1462    :type mode: Enumerated constant
1463    :arg mode: Specifies the rasterization mode.
1464
1465
1466 .. function:: glRotate (angle, x, y, z):
1467
1468    B{glRotated, glRotatef}
1469
1470    Multiply the current matrix by a rotation matrix
1471
1472    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml>`__
1473
1474    :type angle:  Depends on function prototype.
1475    :arg angle:  Specifies the angle of rotation in degrees.
1476    :type x, y, z:  Depends on function prototype.
1477    :arg x, y, z:  Specify the x, y, and z coordinates of a vector respectively.
1478
1479
1480 .. function:: glScale (x,y,z):
1481
1482    B{glScaled, glScalef}
1483
1484    Multiply the current matrix by a general scaling matrix
1485
1486    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glScale.xml>`__
1487
1488    :type x, y, z: Depends on function prototype.
1489    :arg x, y, z: Specify scale factors along the x, y, and z axes, respectively.
1490
1491
1492 .. function:: glScissor(x,y,width,height):
1493
1494    Define the scissor box
1495
1496    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glScissor.xml>`__
1497
1498    :type x, y: int
1499    :arg x, y: Specify the lower left corner of the scissor box. Initially (0, 0).
1500    :type width, height: int
1501    :arg width height: Specify the width and height of the scissor box. When a
1502       GL context is first attached to a window, width and height are set to the
1503       dimensions of that window.
1504
1505
1506 .. function:: glSelectBuffer(size, buffer):
1507
1508    Establish a buffer for selection mode values
1509
1510    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glSelectBuffer.xml>`__
1511
1512    :type size: int
1513    :arg size: Specifies the size of buffer
1514    :type buffer: :class:`bgl.Buffer` I{type GL_INT}
1515    :arg buffer: Returns the selection data
1516
1517
1518 .. function:: glShadeModel(mode):
1519
1520    Select flat or smooth shading
1521
1522    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glShadeModel.xml>`__
1523
1524    :type mode: Enumerated constant
1525    :arg mode: Specifies a symbolic value representing a shading technique.
1526
1527
1528 .. function:: glStencilFunc(func, ref, mask):
1529
1530    Set function and reference value for stencil testing
1531
1532    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glStencilFunc.xml>`__
1533
1534    :type func: Enumerated constant
1535    :arg func: Specifies the test function.
1536    :type ref: int
1537    :arg ref: Specifies the reference value for the stencil test. ref is clamped
1538       to the range [0,2n-1], where n is the number of bitplanes in the stencil
1539       buffer. The initial value is 0.
1540    :type mask: unsigned int
1541    :arg mask: Specifies a mask that is ANDed with both the reference value and
1542       the stored stencil value when the test is done. The initial value is all 1's.
1543
1544
1545 .. function:: glStencilMask(mask):
1546
1547    Control the writing of individual bits in the stencil planes
1548
1549    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glStencilMask.xml>`__
1550
1551    :type mask: unsigned int
1552    :arg mask: Specifies a bit mask to enable and disable writing of individual bits
1553       in the stencil planes. Initially, the mask is all 1's.
1554
1555
1556 .. function:: glStencilOp(fail, zfail, zpass):
1557
1558    Set stencil test actions
1559
1560    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glStencilOp.xml>`__
1561
1562    :type fail: Enumerated constant
1563    :arg fail: Specifies the action to take when the stencil test fails.
1564       The initial value is GL_KEEP.
1565    :type zfail: Enumerated constant
1566    :arg zfail: Specifies the stencil action when the stencil test passes, but the
1567       depth test fails. zfail accepts the same symbolic constants as fail.
1568       The initial value is GL_KEEP.
1569    :type zpass: Enumerated constant
1570    :arg zpass: Specifies the stencil action when both the stencil test and the
1571       depth test pass, or when the stencil test passes and either there is no
1572       depth buffer or depth testing is not enabled. zpass accepts the same
1573       symbolic constants
1574       as fail. The initial value is GL_KEEP.
1575
1576
1577 .. function:: glTexCoord (s,t,r,q,v):
1578
1579    B{glTexCoord1d, glTexCoord1f, glTexCoord1i, glTexCoord1s, glTexCoord2d, glTexCoord2f,
1580    glTexCoord2i, glTexCoord2s, glTexCoord3d, glTexCoord3f, glTexCoord3i, glTexCoord3s,
1581    glTexCoord4d, glTexCoord4f, glTexCoord4i, glTexCoord4s, glTexCoord1dv, glTexCoord1fv,
1582    glTexCoord1iv, glTexCoord1sv, glTexCoord2dv, glTexCoord2fv, glTexCoord2iv,
1583    glTexCoord2sv, glTexCoord3dv, glTexCoord3fv, glTexCoord3iv, glTexCoord3sv,
1584    glTexCoord4dv, glTexCoord4fv, glTexCoord4iv, glTexCoord4sv}
1585
1586    Set the current texture coordinates
1587
1588    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexCoord.xml>`__
1589
1590    :type s, t, r, q: Depends on function prototype. (r and q for '3' and '4' prototypes only)
1591    :arg s, t, r, q: Specify s, t, r, and q texture coordinates. Not all parameters are
1592       present in all forms of the command.
1593    :type v: :class:`bgl.Buffer` object. Depends on function prototype. (for 'v' prototypes only)
1594    :arg v: Specifies a pointer to an array of one, two, three, or four elements,
1595       which in turn specify the s, t, r, and q texture coordinates.
1596
1597
1598 .. function:: glTexEnv  (target, pname, param):
1599
1600    B{glTextEnvf, glTextEnvi, glTextEnvfv, glTextEnviv}
1601
1602    Set texture environment parameters
1603
1604    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexEnv.xml>`__
1605
1606    :type target: Enumerated constant
1607    :arg target: Specifies a texture environment. Must be GL_TEXTURE_ENV.
1608    :type pname: Enumerated constant
1609    :arg pname: Specifies the symbolic name of a single-valued texture environment
1610       parameter. Must be GL_TEXTURE_ENV_MODE.
1611    :type param: Depends on function prototype.
1612    :arg param: Specifies a single symbolic constant. If function prototype ends in 'v'
1613       specifies a pointer to a parameter array that contains either a single
1614       symbolic constant or an RGBA color
1615
1616
1617 .. function:: glTexGen (coord, pname, param):
1618
1619    B{glTexGend, glTexGenf, glTexGeni, glTexGendv, glTexGenfv, glTexGeniv}
1620
1621    Control the generation of texture coordinates
1622
1623    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexGen.xml>`__
1624
1625    :type coord: Enumerated constant
1626    :arg coord: Specifies a texture coordinate.
1627    :type pname: Enumerated constant
1628    :arg pname: Specifies the symbolic name of the texture- coordinate generation function.
1629    :type param: Depends on function prototype.
1630    :arg param: Specifies a single-valued texture generation parameter.
1631       If function prototype ends in 'v' specifies a pointer to an array of texture
1632       generation parameters. If pname is GL_TEXTURE_GEN_MODE, then the array must
1633       contain a single symbolic constant. Otherwise, params holds the coefficients
1634       for the texture-coordinate generation function specified by pname.
1635
1636
1637 .. function:: glTexImage1D(target, level, internalformat, width, border, format, type, pixels):
1638
1639    Specify a one-dimensional texture image
1640
1641    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage1D.xml>`__
1642
1643    :type target: Enumerated constant
1644    :arg target: Specifies the target texture.
1645    :type level: int
1646    :arg level: Specifies the level-of-detail number. Level 0 is the base image level.
1647       Level n is the nth mipmap reduction image.
1648    :type internalformat: int
1649    :arg internalformat: Specifies the number of color components in the texture.
1650    :type width: int
1651    :arg width: Specifies the width of the texture image. Must be 2n+2(border)
1652       for some integer n. All implementations support texture images that are
1653       at least 64 texels wide. The height of the 1D texture image is 1.
1654    :type border: int
1655    :arg border: Specifies the width of the border. Must be either 0 or 1.
1656    :type format: Enumerated constant
1657    :arg format: Specifies the format of the pixel data.
1658    :type type: Enumerated constant
1659    :arg type: Specifies the data type of the pixel data.
1660    :type pixels: :class:`bgl.Buffer` object.
1661    :arg pixels: Specifies a pointer to the image data in memory.
1662
1663
1664 .. function:: glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels):
1665
1666    Specify a two-dimensional texture image
1667
1668    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexImage2D.xml>`__
1669
1670    :type target: Enumerated constant
1671    :arg target: Specifies the target texture.
1672    :type level: int
1673    :arg level: Specifies the level-of-detail number. Level 0 is the base image level.
1674       Level n is the nth mipmap reduction image.
1675    :type internalformat: int
1676    :arg internalformat: Specifies the number of color components in the texture.
1677    :type width: int
1678    :arg width: Specifies the width of the texture image. Must be 2n+2(border)
1679       for some integer n. All implementations support texture images that are at
1680       least 64 texels wide.
1681    :type height: int
1682    :arg height: Specifies the height of the texture image. Must be 2m+2(border) for
1683       some integer m. All implementations support texture images that are at
1684       least 64 texels high.
1685    :type border: int
1686    :arg border: Specifies the width of the border. Must be either 0 or 1.
1687    :type format: Enumerated constant
1688    :arg format: Specifies the format of the pixel data.
1689    :type type: Enumerated constant
1690    :arg type: Specifies the data type of the pixel data.
1691    :type pixels: :class:`bgl.Buffer` object.
1692    :arg pixels: Specifies a pointer to the image data in memory.
1693
1694
1695 .. function:: glTexParameter (target, pname, param):
1696
1697    B{glTexParameterf, glTexParameteri, glTexParameterfv, glTexParameteriv}
1698
1699    Set texture parameters
1700
1701    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTexParameter.xml>`__
1702
1703    :type target: Enumerated constant
1704    :arg target: Specifies the target texture.
1705    :type pname: Enumerated constant
1706    :arg pname: Specifies the symbolic name of a single-valued texture parameter.
1707    :type param: Depends on function prototype.
1708    :arg param: Specifies the value of pname. If function prototype ends in 'v' specifies
1709       a pointer to an array where the value or values of pname are stored.
1710
1711
1712 .. function:: glTranslate (x, y, z):
1713
1714    B{glTranslatef, glTranslated}
1715
1716    Multiply the current matrix by a translation matrix
1717
1718    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml>`__
1719
1720    :type x, y, z: Depends on function prototype.
1721    :arg x, y, z: Specify the x, y, and z coordinates of a translation vector.
1722
1723
1724 .. function:: glVertex (x,y,z,w,v):
1725
1726    B{glVertex2d, glVertex2f, glVertex2i, glVertex2s, glVertex3d, glVertex3f, glVertex3i,
1727    glVertex3s, glVertex4d, glVertex4f, glVertex4i, glVertex4s, glVertex2dv, glVertex2fv,
1728    glVertex2iv, glVertex2sv, glVertex3dv, glVertex3fv, glVertex3iv, glVertex3sv, glVertex4dv,
1729    glVertex4fv, glVertex4iv, glVertex4sv}
1730
1731    Specify a vertex
1732
1733    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glVertex.xml>`__
1734
1735    :type x, y, z, w: Depends on function prototype (z and w for '3' and '4' prototypes only)
1736    :arg x, y, z, w: Specify x, y, z, and w coordinates of a vertex. Not all parameters
1737       are present in all forms of the command.
1738    :type v: :class:`bgl.Buffer` object. Depends of function prototype (for 'v'
1739       prototypes only)
1740    :arg v: Specifies a pointer to an array of two, three, or four elements. The
1741       elements of a two-element array are x and y; of a three-element array,
1742       x, y, and z; and of a four-element array, x, y, z, and w.
1743
1744
1745 .. function:: glViewport(x,y,width,height):
1746
1747    Set the viewport
1748
1749    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glViewport.xml>`__
1750
1751    :type x, y: int
1752    :arg x, y: Specify the lower left corner of the viewport rectangle,
1753       in pixels. The initial value is (0,0).
1754    :type width, height: int
1755    :arg width, height: Specify the width and height of the viewport. When a GL
1756       context is first attached to a window, width and height are set to the
1757       dimensions of that window.
1758
1759
1760 .. function:: gluPerspective(fovY, aspect, zNear, zFar):
1761
1762    Set up a perspective projection matrix.
1763
1764    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml
1765
1766    :type fovY: double
1767    :arg fovY: Specifies the field of view angle, in degrees, in the y direction.
1768    :type aspect: double
1769    :arg aspect: Specifies the aspect ratio that determines the field of view in the x direction.
1770     The aspect ratio is the ratio of x (width) to y (height).
1771    :type zNear: double
1772    :arg zNear: Specifies the distance from the viewer to the near clipping plane (always positive).
1773    :type zFar: double
1774    :arg zFar: Specifies the distance from the viewer to the far clipping plane (always positive).
1775
1776
1777 .. function:: gluLookAt(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz):
1778
1779    Define a viewing transformation.
1780
1781    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml
1782
1783    :type eyex, eyey, eyez: double
1784    :arg eyex, eyey, eyez: Specifies the position of the eye point.
1785    :type centerx, centery, centerz: double
1786    :arg centerx, centery, centerz: Specifies the position of the reference point.
1787    :type upx, upy, upz: double
1788    :arg upx, upy, upz: Specifies the direction of the up vector.
1789
1790
1791 .. function:: gluOrtho2D(left, right, bottom, top):
1792
1793    Define a 2-D orthographic projection matrix.
1794
1795    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml
1796
1797    :type left, right: double
1798    :arg left, right: Specify the coordinates for the left and right vertical clipping planes.
1799    :type bottom, top: double
1800    :arg bottom, top: Specify the coordinates for the bottom and top horizontal clipping planes.
1801
1802
1803 .. function:: gluPickMatrix(x, y, width, height, viewport):
1804
1805    Define a picking region.
1806
1807    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml
1808
1809    :type x, y: double
1810    :arg x, y: Specify the center of a picking region in window coordinates.
1811    :type width, height: double
1812    :arg width, height: Specify the width and height, respectively, of the picking region in window coordinates.
1813    :type viewport: :class:`bgl.Buffer` object. [int]
1814    :arg viewport: Specifies the current viewport.
1815
1816
1817 .. function:: gluProject(objx, objy, objz, modelMatrix, projMatrix, viewport, winx, winy, winz):
1818
1819    Map object coordinates to window coordinates.
1820
1821    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluProject.xml
1822
1823    :type objx, objy, objz: double
1824    :arg objx, objy, objz: Specify the object coordinates.
1825    :type modelMatrix: :class:`bgl.Buffer` object. [double]
1826    :arg modelMatrix: Specifies the current modelview matrix (as from a glGetDoublev call).
1827    :type projMatrix: :class:`bgl.Buffer` object. [double]
1828    :arg projMatrix: Specifies the current projection matrix (as from a glGetDoublev call).
1829    :type viewport: :class:`bgl.Buffer` object. [int]
1830    :arg viewport: Specifies the current viewport (as from a glGetIntegerv call).
1831    :type winx, winy, winz: :class:`bgl.Buffer` object. [double]
1832    :arg winx, winy, winz: Return the computed window coordinates.
1833
1834
1835 .. function:: gluUnProject(winx, winy, winz, modelMatrix, projMatrix, viewport, objx, objy, objz):
1836
1837    Map object coordinates to window coordinates.
1838
1839    .. seealso:: https://www.opengl.org/sdk/docs/man2/xhtml/gluUnProject.xml
1840
1841    :type winx, winy, winz: double
1842    :arg winx, winy, winz: Specify the window coordinates to be mapped.
1843    :type modelMatrix: :class:`bgl.Buffer` object. [double]
1844    :arg modelMatrix: Specifies the current modelview matrix (as from a glGetDoublev call).
1845    :type projMatrix: :class:`bgl.Buffer` object. [double]
1846    :arg projMatrix: Specifies the current projection matrix (as from a glGetDoublev call).
1847    :type viewport: :class:`bgl.Buffer` object. [int]
1848    :arg viewport: Specifies the current viewport (as from a glGetIntegerv call).
1849    :type objx, objy, objz: :class:`bgl.Buffer` object. [double]
1850    :arg objx, objy, objz: Return the computed object coordinates.
1851
1852
1853 .. function:: glUseProgram(program):
1854
1855    Installs a program object as part of current rendering state
1856
1857    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glUseProgram.xml>`__
1858
1859    :type program: int
1860    :arg program: Specifies the handle of the program object whose executables are to be used as part of current rendering state.
1861
1862
1863 .. function:: glValidateProgram(program):
1864
1865    Validates a program object
1866
1867    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glValidateProgram.xml>`__
1868
1869    :type program: int
1870    :arg program: Specifies the handle of the program object to be validated.
1871
1872
1873 .. function:: glLinkProgram(program):
1874
1875    Links a program object.
1876
1877    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glLinkProgram.xml>`__
1878
1879    :type program: int
1880    :arg program: Specifies the handle of the program object to be linked.
1881
1882
1883 .. function:: glActiveTexture(texture):
1884
1885    Select active texture unit.
1886
1887    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml>`__
1888
1889    :type texture: int
1890    :arg texture: Constant in ``GL_TEXTURE0`` 0 - 8
1891
1892
1893 .. function:: glAttachShader(program, shader):
1894
1895    Attaches a shader object to a program object.
1896
1897    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glAttachShader.xml>`__
1898
1899    :type program: int
1900    :arg program: Specifies the program object to which a shader object will be attached.
1901    :type shader: int
1902    :arg shader: Specifies the shader object that is to be attached.
1903
1904
1905 .. function:: glCompileShader(shader):
1906
1907    Compiles a shader object.
1908
1909    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCompileShader.xml>`__
1910
1911    :type shader: int
1912    :arg shader: Specifies the shader object to be compiled.
1913
1914
1915 .. function:: glCreateProgram():
1916
1917    Creates a program object
1918
1919    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCreateProgram.xml>`__
1920
1921    :rtype: int
1922    :return: The new program or zero if an error occurs.
1923
1924
1925 .. function:: glCreateShader(shaderType):
1926
1927    Creates a shader object.
1928
1929    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glCreateShader.xml>`__
1930
1931    :type shaderType: Specifies the type of shader to be created.
1932       Must be one of ``GL_VERTEX_SHADER``,
1933       ``GL_TESS_CONTROL_SHADER``,
1934       ``GL_TESS_EVALUATION_SHADER``,
1935       ``GL_GEOMETRY_SHADER``,
1936       or ``GL_FRAGMENT_SHADER``.
1937    :arg shaderType:
1938    :rtype: int
1939    :return: 0 if an error occurs.
1940
1941
1942 .. function:: glDeleteProgram(program):
1943
1944    Deletes a program object.
1945
1946    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteProgram.xml>`__
1947
1948    :type program: int
1949    :arg program: Specifies the program object to be deleted.
1950
1951
1952 .. function:: glDeleteShader(shader):
1953
1954    Deletes a shader object.
1955
1956    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDeleteShader.xml>`__
1957
1958    :type shader: int
1959    :arg shader: Specifies the shader object to be deleted.
1960
1961
1962 .. function:: glDetachShader(program, shader):
1963
1964    Detaches a shader object from a program object to which it is attached.
1965
1966    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glDetachShader.xml>`__
1967
1968    :type program: int
1969    :arg program: Specifies the program object from which to detach the shader object.
1970    :type shader: int
1971    :arg shader: pecifies the program object from which to detach the shader object.
1972
1973
1974 .. function:: glGetAttachedShaders(program, maxCount, count, shaders):
1975
1976    Returns the handles of the shader objects attached to a program object.
1977
1978    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetAttachedShaders.xml>`__
1979
1980    :type program: int
1981    :arg program: Specifies the program object to be queried.
1982    :type maxCount: int
1983    :arg maxCount: Specifies the size of the array for storing the returned object names.
1984    :type count: :class:`bgl.Buffer` int buffer.
1985    :arg count: Returns the number of names actually returned in objects.
1986    :type shaders: :class:`bgl.Buffer` int buffer.
1987    :arg shaders: Specifies an array that is used to return the names of attached shader objects.
1988
1989
1990 .. function:: glGetProgramInfoLog(program, maxLength, length, infoLog):
1991
1992    Returns the information log for a program object.
1993
1994    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetProgramInfoLog.xml>`__
1995
1996    :type program: int
1997    :arg program: Specifies the program object whose information log is to be queried.
1998    :type maxLength: int
1999    :arg maxLength: Specifies the size of the character buffer for storing the returned information log.
2000    :type length: :class:`bgl.Buffer` int buffer.
2001    :arg length: Returns the length of the string returned in **infoLog** (excluding the null terminator).
2002    :type infoLog: :class:`bgl.Buffer` char buffer.
2003    :arg infoLog: Specifies an array of characters that is used to return the information log.
2004
2005
2006 .. function:: glGetShaderInfoLog(program, maxLength, length, infoLog):
2007
2008    Returns the information log for a shader object.
2009
2010    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderInfoLog.xml>`__
2011
2012    :type shader: int
2013    :arg shader: Specifies the shader object whose information log is to be queried.
2014    :type maxLength: int
2015    :arg maxLength: Specifies the size of the character buffer for storing the returned information log.
2016    :type length: :class:`bgl.Buffer` int buffer.
2017    :arg length: Returns the length of the string returned in **infoLog** (excluding the null terminator).
2018    :type infoLog: :class:`bgl.Buffer` char buffer.
2019    :arg infoLog: Specifies an array of characters that is used to return the information log.
2020
2021
2022 .. function:: glGetProgramiv(program, pname, params):
2023
2024    Returns a parameter from a program object.
2025
2026    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetProgram.xml>`__
2027
2028    :type program: int
2029    :arg program: Specifies the program object to be queried.
2030    :type pname: int
2031    :arg pname: Specifies the object parameter.
2032    :type params: :class:`bgl.Buffer` int buffer.
2033    :arg params: Returns the requested object parameter.
2034
2035
2036 .. function:: glIsShader(shader):
2037
2038    Determines if a name corresponds to a shader object.
2039
2040    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsShader.xml>`__
2041
2042    :type shader: int
2043    :arg shader: Specifies a potential shader object.
2044
2045
2046 .. function:: glIsProgram(program):
2047
2048    Determines if a name corresponds to a program object
2049
2050    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glIsProgram.xml>`__
2051
2052    :type program: int
2053    :arg program: Specifies a potential program object.
2054
2055
2056 .. function:: glGetShaderSource(shader, bufSize, length, source):
2057
2058    Returns the source code string from a shader object
2059
2060    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man2/xhtml/glGetShaderSource.xml>`__
2061
2062    :type shader: int
2063    :arg shader: Specifies the shader object to be queried.
2064    :type bufSize: int
2065    :arg bufSize: Specifies the size of the character buffer for storing the returned source code string.
2066    :type length: :class:`bgl.Buffer` int buffer.
2067    :arg length: Returns the length of the string returned in source (excluding the null terminator).
2068    :type source: :class:`bgl.Buffer` char.
2069    :arg source: Specifies an array of characters that is used to return the source code string.
2070
2071
2072 .. function:: glShaderSource(shader, shader_string):
2073
2074    Replaces the source code in a shader object.
2075
2076    .. seealso:: `OpenGL Docs <https://www.opengl.org/sdk/docs/man/html/glShaderSource.xhtml>`__
2077
2078    :type shader: int
2079    :arg shader: Specifies the handle of the shader object whose source code is to be replaced.
2080    :type shader_string: string
2081    :arg shader_string: The shader string.
2082
2083
2084 .. class:: Buffer
2085
2086    The Buffer object is simply a block of memory that is delineated and initialized by the
2087    user. Many OpenGL functions return data to a C-style pointer, however, because this
2088    is not possible in python the Buffer object can be used to this end. Wherever pointer
2089    notation is used in the OpenGL functions the Buffer object can be used in it's bgl
2090    wrapper. In some instances the Buffer object will need to be initialized with the template
2091    parameter, while in other instances the user will want to create just a blank buffer
2092    which will be zeroed by default.
2093
2094    .. code-block:: python
2095
2096       import bgl
2097
2098       myByteBuffer = bgl.Buffer(bgl.GL_BYTE, [32, 32])
2099       bgl.glGetPolygonStipple(myByteBuffer)
2100
2101       print(myByteBuffer.dimensions)
2102       print(myByteBuffer.to_list())
2103
2104       sliceBuffer = myByteBuffer[0:16]
2105       print(sliceBuffer)
2106
2107    .. attribute:: dimensions
2108
2109       The number of dimensions of the Buffer.
2110
2111    .. method:: to_list()
2112
2113       The contents of the Buffer as a python list.
2114
2115    .. method:: __init__(type, dimensions, template = None):
2116
2117       This will create a new Buffer object for use with other bgl OpenGL commands.
2118       Only the type of argument to store in the buffer and the dimensions of the buffer
2119       are necessary. Buffers are zeroed by default unless a template is supplied, in
2120       which case the buffer is initialized to the template.
2121
2122       :type type: int
2123       :arg type: The format to store data in. The type should be one of
2124          GL_BYTE, GL_SHORT, GL_INT, or GL_FLOAT.
2125       :type dimensions: An int or sequence object specifying the dimensions of the buffer.
2126       :arg dimensions: If the dimensions are specified as an int a linear array will
2127          be created for the buffer. If a sequence is passed for the dimensions, the buffer
2128          becomes n-Dimensional, where n is equal to the number of parameters passed in the
2129          sequence. Example: [256,2] is a two- dimensional buffer while [256,256,4] creates
2130          a three- dimensional buffer. You can think of each additional dimension as a sub-item
2131          of the dimension to the left. i.e. [10,2] is a 10 element array each with 2 sub-items.
2132          [(0,0), (0,1), (1,0), (1,1), (2,0), ...] etc.
2133       :type template: A python sequence object (optional)
2134       :arg template: A sequence of matching dimensions which will be used to initialize
2135          the Buffer. If a template is not passed in all fields will be initialized to 0.
2136       :rtype: Buffer object
2137       :return: The newly created buffer as a PyObject.