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