1gl(3)                      Erlang Module Definition                      gl(3)
2
3
4

NAME

6       gl - Erlang wrapper functions for OpenGL
7

DESCRIPTION

9       Standard OpenGL API
10
11       This  documents the functions as a brief version of the complete OpenGL
12       reference pages.
13

DATA TYPES

15       clamp() = float()
16
17       offset() = integer() >= 0
18
19       i() = integer()
20
21       f() = float()
22
23       enum() = integer() >= 0
24
25       matrix() = m12() | m16()
26
27       m12() =
28           {f(), f(), f(), f(), f(), f(), f(), f(), f(), f(), f(), f()}
29
30       m16() =
31           {f(),
32            f(),
33            f(),
34            f(),
35            f(),
36            f(),
37            f(),
38            f(),
39            f(),
40            f(),
41            f(),
42            f(),
43            f(),
44            f(),
45            f(),
46            f()}
47
48       mem() = binary() | tuple()
49

EXPORTS

51       accum(Op :: enum(), Value :: f()) -> ok
52
53              The accumulation buffer is an extended-range color  buffer.  Im‐
54              ages  are not rendered into it. Rather, images rendered into one
55              of the color buffers are added to the contents of the  accumula‐
56              tion  buffer  after  rendering. Effects such as antialiasing (of
57              points, lines, and polygons), motion blur, and  depth  of  field
58              can  be  created by accumulating images generated with different
59              transformation matrices.
60
61              External documentation.
62
63       activeShaderProgram(Pipeline :: i(), Program :: i()) -> ok
64
65              gl:activeShaderProgram/2 sets the linked program named  by  Pro‐
66              gram  to  be  the active program for the program pipeline object
67              Pipeline. The active program in the active program pipeline  ob‐
68              ject  is the target of calls to gl:uniform() when no program has
69              been made current through a call to gl:useProgram/1.
70
71              External documentation.
72
73       activeTexture(Texture :: enum()) -> ok
74
75              gl:activeTexture/1 selects which texture unit subsequent texture
76              state  calls  will affect. The number of texture units an imple‐
77              mentation supports is implementation dependent, but must  be  at
78              least 80.
79
80              External documentation.
81
82       alphaFunc(Func :: enum(), Ref :: clamp()) -> ok
83
84              The  alpha test discards fragments depending on the outcome of a
85              comparison between an incoming fragment's alpha value and a con‐
86              stant  reference  value.  gl:alphaFunc/2 specifies the reference
87              value and the comparison function. The comparison  is  performed
88              only if alpha testing is enabled. By default, it is not enabled.
89              (See gl:enable/1 and gl:disable/1 of ?GL_ALPHA_TEST.)
90
91              External documentation.
92
93       areTexturesResident(Textures :: [i()]) ->
94                              {0 | 1, Residences :: [0 | 1]}
95
96              GL establishes a ``working set'' of textures that  are  resident
97              in texture memory. These textures can be bound to a texture tar‐
98              get much more efficiently than textures that are not resident.
99
100              External documentation.
101
102       arrayElement(I :: i()) -> ok
103
104              gl:arrayElement/1   commands    are    used    within    gl:'be‐
105              gin'/1/gl:'end'/0 pairs to specify vertex and attribute data for
106              point, line, and polygon primitives. If ?GL_VERTEX_ARRAY is  en‐
107              abled  when  gl:arrayElement/1  is  called,  a  single vertex is
108              drawn, using vertex and attribute data taken from location I  of
109              the enabled arrays. If ?GL_VERTEX_ARRAY is not enabled, no draw‐
110              ing occurs but the attributes corresponding to the  enabled  ar‐
111              rays are modified.
112
113              External documentation.
114
115       attachShader(Program :: i(), Shader :: i()) -> ok
116
117              In  order  to  create a complete shader program, there must be a
118              way to specify the list of things that will be linked  together.
119              Program  objects  provide this mechanism. Shaders that are to be
120              linked together in a program object must first  be  attached  to
121              that  program  object. gl:attachShader/2 attaches the shader ob‐
122              ject specified by Shader to the program object specified by Pro‐
123              gram. This indicates that Shader will be included in link opera‐
124              tions that will be performed on Program.
125
126              External documentation.
127
128       'begin'(Mode :: enum()) -> ok
129
130       'end'() -> ok
131
132              gl:'begin'/1 and gl:'end'/0 delimit the vertices that  define  a
133              primitive  or a group of like primitives. gl:'begin'/1 accepts a
134              single argument that specifies in which of ten ways the vertices
135              are  interpreted.  Taking n as an integer count starting at one,
136              and N as the total number of vertices specified, the interpreta‐
137              tions are as follows:
138
139              External documentation.
140
141       beginConditionalRender(Id :: i(), Mode :: enum()) -> ok
142
143       endConditionalRender() -> ok
144
145              Conditional  rendering  is started using gl:beginConditionalRen‐
146              der/2 and ended using gl:endConditionalRender/0.  During  condi‐
147              tional   rendering,  all  vertex  array  commands,  as  well  as
148              gl:clear/1 and gl:clearBuffer() have no effect if the  (?GL_SAM‐
149              PLES_PASSED)  result  of  the query object Id is zero, or if the
150              (?GL_ANY_SAMPLES_PASSED) result is  ?GL_FALSE.  The  results  of
151              commands  setting the current vertex state, such as gl:vertexAt‐
152              trib() are undefined. If the (?GL_SAMPLES_PASSED) result is non-
153              zero or if the (?GL_ANY_SAMPLES_PASSED) result is ?GL_TRUE, such
154              commands are not discarded. The Id parameter  to  gl:beginCondi‐
155              tionalRender/2 must be the name of a query object previously re‐
156              turned from a call to gl:genQueries/1. Mode  specifies  how  the
157              results  of  the  query object are to be interpreted. If Mode is
158              ?GL_QUERY_WAIT, the GL waits for the results of the query to  be
159              available  and  then uses the results to determine if subsequent
160              rendering commands are discarded. If Mode is  ?GL_QUERY_NO_WAIT,
161              the GL may choose to unconditionally execute the subsequent ren‐
162              dering commands without waiting for the query to complete.
163
164              External documentation.
165
166       beginQuery(Target :: enum(), Id :: i()) -> ok
167
168       endQuery(Target :: enum()) -> ok
169
170              gl:beginQuery/2 and gl:endQuery/1 delimit the  boundaries  of  a
171              query  object.  Query  must be a name previously returned from a
172              call to gl:genQueries/1. If a query object with name Id does not
173              yet exist it is created with the type determined by Target. Tar‐
174              get must be one of  ?GL_SAMPLES_PASSED,  ?GL_ANY_SAMPLES_PASSED,
175              ?GL_PRIMITIVES_GENERATED,          ?GL_TRANSFORM_FEEDBACK_PRIMI‐
176              TIVES_WRITTEN, or ?GL_TIME_ELAPSED. The behavior  of  the  query
177              object depends on its type and is as follows.
178
179              External documentation.
180
181       beginQueryIndexed(Target :: enum(), Index :: i(), Id :: i()) -> ok
182
183       endQueryIndexed(Target :: enum(), Index :: i()) -> ok
184
185              gl:beginQueryIndexed/3   and  gl:endQueryIndexed/2  delimit  the
186              boundaries of a query object. Query must be  a  name  previously
187              returned  from a call to gl:genQueries/1. If a query object with
188              name Id does not yet exist it is created with  the  type  deter‐
189              mined  by  Target.  Target  must  be  one of ?GL_SAMPLES_PASSED,
190              ?GL_ANY_SAMPLES_PASSED,   ?GL_PRIMITIVES_GENERATED,   ?GL_TRANS‐
191              FORM_FEEDBACK_PRIMITIVES_WRITTEN,  or  ?GL_TIME_ELAPSED. The be‐
192              havior of the query object depends on its type and  is  as  fol‐
193              lows.
194
195              External documentation.
196
197       beginTransformFeedback(PrimitiveMode :: enum()) -> ok
198
199       endTransformFeedback() -> ok
200
201              Transform feedback mode captures the values of varying variables
202              written by the  vertex  shader  (or,  if  active,  the  geometry
203              shader). Transform feedback is said to be active after a call to
204              gl:beginTransformFeedback/1 until a subsequent call  to  gl:end‐
205              TransformFeedback/0. Transform feedback commands must be paired.
206
207              External documentation.
208
209       bindAttribLocation(Program :: i(), Index :: i(), Name :: string()) ->
210                             ok
211
212              gl:bindAttribLocation/3  is used to associate a user-defined at‐
213              tribute variable in the program object specified by Program with
214              a  generic  vertex attribute index. The name of the user-defined
215              attribute variable is passed as  a  null  terminated  string  in
216              Name.  The  generic  vertex  attribute index to be bound to this
217              variable is specified by Index. When Program  is  made  part  of
218              current  state, values provided via the generic vertex attribute
219              Index will modify the value of the user-defined attribute  vari‐
220              able specified by Name.
221
222              External documentation.
223
224       bindBuffer(Target :: enum(), Buffer :: i()) -> ok
225
226              gl:bindBuffer/2  binds  a  buffer object to the specified buffer
227              binding point. Calling gl:bindBuffer/2 with Target set to one of
228              the  accepted symbolic constants and Buffer set to the name of a
229              buffer object binds that buffer object name to the target. If no
230              buffer  object with name Buffer exists, one is created with that
231              name. When a buffer object is bound to a  target,  the  previous
232              binding for that target is automatically broken.
233
234              External documentation.
235
236       bindBufferBase(Target :: enum(), Index :: i(), Buffer :: i()) ->
237                         ok
238
239              gl:bindBufferBase/3  binds the buffer object Buffer to the bind‐
240              ing point at index Index of the array of  targets  specified  by
241              Target.  Each Target represents an indexed array of buffer bind‐
242              ing points, as well as a single general binding point  that  can
243              be  used by other buffer manipulation functions such as gl:bind‐
244              Buffer/2 or glMapBuffer. In addition to binding  Buffer  to  the
245              indexed  buffer  binding  target, gl:bindBufferBase/3 also binds
246              Buffer to the generic buffer binding point specified by Target.
247
248              External documentation.
249
250       bindBufferRange(Target :: enum(),
251                       Index :: i(),
252                       Buffer :: i(),
253                       Offset :: i(),
254                       Size :: i()) ->
255                          ok
256
257              gl:bindBufferRange/5 binds a range the buffer object Buffer rep‐
258              resented  by Offset and Size to the binding point at index Index
259              of the array of targets specified by Target. Each Target  repre‐
260              sents  an  indexed  array of buffer binding points, as well as a
261              single general binding point that can be used  by  other  buffer
262              manipulation  functions  such as gl:bindBuffer/2 or glMapBuffer.
263              In addition to binding a range of Buffer to the  indexed  buffer
264              binding target, gl:bindBufferRange/5 also binds the range to the
265              generic buffer binding point specified by Target.
266
267              External documentation.
268
269       bindBuffersBase(Target :: enum(), First :: i(), Buffers :: [i()]) ->
270                          ok
271
272              gl:bindBuffersBase/3 binds a set of Count buffer  objects  whose
273              names  are  given  in the array Buffers to the Count consecutive
274              binding points starting from index First of the array of targets
275              specified  by  Target.  If Buffers is ?NULL then gl:bindBuffers‐
276              Base/3 unbinds any buffers that are currently bound to the  ref‐
277              erenced  binding points. Assuming no errors are generated, it is
278              equivalent to the following pseudo-code,  which  calls  gl:bind‐
279              BufferBase/3,  with the exception that the non-indexed Target is
280              not changed by gl:bindBuffersBase/3:
281
282              External documentation.
283
284       bindBuffersRange(Target :: enum(),
285                        First :: i(),
286                        Buffers :: [i()],
287                        Offsets :: [i()],
288                        Sizes :: [i()]) ->
289                           ok
290
291              gl:bindBuffersRange/5 binds a set of Count  ranges  from  buffer
292              objects  whose names are given in the array Buffers to the Count
293              consecutive binding points starting from index First of the  ar‐
294              ray  of  targets  specified by Target. Offsets specifies the ad‐
295              dress of an array containing Count starting offsets  within  the
296              buffers,  and  Sizes  specifies the address of an array of Count
297              sizes of the ranges. If Buffers is ?NULL then Offsets and  Sizes
298              are  ignored  and gl:bindBuffersRange/5 unbinds any buffers that
299              are currently bound to the referenced binding  points.  Assuming
300              no  errors  are  generated,  it  is  equivalent to the following
301              pseudo-code, which calls gl:bindBufferRange/5, with  the  excep‐
302              tion  that  the  non-indexed  Target  is not changed by gl:bind‐
303              BuffersRange/5:
304
305              External documentation.
306
307       bindFragDataLocation(Program :: i(),
308                            Color :: i(),
309                            Name :: string()) ->
310                               ok
311
312              gl:bindFragDataLocation/3 explicitly specifies  the  binding  of
313              the  user-defined  varying  out variable Name to fragment shader
314              color number ColorNumber for program Program. If Name was  bound
315              previously,  its  assigned binding is replaced with ColorNumber.
316              Name must be a null-terminated string. ColorNumber must be  less
317              than ?GL_MAX_DRAW_BUFFERS.
318
319              External documentation.
320
321       bindFragDataLocationIndexed(Program :: i(),
322                                   ColorNumber :: i(),
323                                   Index :: i(),
324                                   Name :: string()) ->
325                                      ok
326
327              gl:bindFragDataLocationIndexed/4  specifies that the varying out
328              variable Name in Program should be bound to fragment color  Col‐
329              orNumber  when  the program is next linked. Index may be zero or
330              one to specify that the color be used as  either  the  first  or
331              second color input to the blend equation, respectively.
332
333              External documentation.
334
335       bindFramebuffer(Target :: enum(), Framebuffer :: i()) -> ok
336
337              gl:bindFramebuffer/2  binds  the  framebuffer  object  with name
338              Framebuffer to the framebuffer target specified by Target.  Tar‐
339              get must be either ?GL_DRAW_FRAMEBUFFER, ?GL_READ_FRAMEBUFFER or
340              ?GL_FRAMEBUFFER.  If  a   framebuffer   object   is   bound   to
341              ?GL_DRAW_FRAMEBUFFER  or  ?GL_READ_FRAMEBUFFER,  it  becomes the
342              target for rendering or readback operations, respectively, until
343              it is deleted or another framebuffer is bound to the correspond‐
344              ing bind point. Calling gl:bindFramebuffer/2 with Target set  to
345              ?GL_FRAMEBUFFER  binds  Framebuffer  to  both  the read and draw
346              framebuffer targets. Framebuffer is the name  of  a  framebuffer
347              object  previously returned from a call to gl:genFramebuffers/1,
348              or zero to break the existing binding of a framebuffer object to
349              Target.
350
351              External documentation.
352
353       bindImageTexture(Unit, Texture, Level, Layered, Layer, Access,
354                        Format) ->
355                           ok
356
357              Types:
358
359                 Unit = Texture = Level = i()
360                 Layered = 0 | 1
361                 Layer = i()
362                 Access = Format = enum()
363
364              gl:bindImageTexture/7  binds  a  single level of a texture to an
365              image unit for the  purpose  of  reading  and  writing  it  from
366              shaders.  Unit  specifies the zero-based index of the image unit
367              to which to bind the texture level. Texture specifies  the  name
368              of an existing texture object to bind to the image unit. If Tex‐
369              ture is zero, then any existing binding to  the  image  unit  is
370              broken.  Level specifies the level of the texture to bind to the
371              image unit.
372
373              External documentation.
374
375       bindImageTextures(First :: i(), Textures :: [i()]) -> ok
376
377              gl:bindImageTextures/2 binds images from an  array  of  existing
378              texture  objects  to  a  specified  number  of consecutive image
379              units. Count specifies the number of texture objects whose names
380              are  stored  in the array Textures. That number of texture names
381              are read from the array and bound to the Count consecutive  tex‐
382              ture  units starting from First. If the name zero appears in the
383              Textures array, any existing binding to the image unit is reset.
384              Any  non-zero  entry in Textures must be the name of an existing
385              texture object. When a non-zero entry in  Textures  is  present,
386              the image at level zero is bound, the binding is considered lay‐
387              ered, with the first layer set to zero, and the image  is  bound
388              for  read-write access. The image unit format parameter is taken
389              from the internal format of the image at level zero of the  tex‐
390              ture  object.  For cube map textures, the internal format of the
391              positive X image of level zero is used.  If  Textures  is  ?NULL
392              then  it  is  as if an appropriately sized array containing only
393              zeros had been specified.
394
395              External documentation.
396
397       bindProgramPipeline(Pipeline :: i()) -> ok
398
399              gl:bindProgramPipeline/1 binds a program pipeline object to  the
400              current  context.  Pipeline  must  be a name previously returned
401              from a call to gl:genProgramPipelines/1. If no program  pipeline
402              exists  with name Pipeline then a new pipeline object is created
403              with that name and initialized to the default state vector.
404
405              External documentation.
406
407       bindRenderbuffer(Target :: enum(), Renderbuffer :: i()) -> ok
408
409              gl:bindRenderbuffer/2 binds the renderbuffer  object  with  name
410              Renderbuffer  to  the  renderbuffer  target specified by Target.
411              Target must be ?GL_RENDERBUFFER. Renderbuffer is the name  of  a
412              renderbuffer  object  previously returned from a call to gl:gen‐
413              Renderbuffers/1, or zero to break the existing binding of a ren‐
414              derbuffer object to Target.
415
416              External documentation.
417
418       bindSampler(Unit :: i(), Sampler :: i()) -> ok
419
420              gl:bindSampler/2  binds  Sampler  to  the  texture unit at index
421              Unit. Sampler must be zero or the name of a sampler object  pre‐
422              viously  returned  from a call to gl:genSamplers/1. Unit must be
423              less than the value of ?GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS.
424
425              External documentation.
426
427       bindSamplers(First :: i(), Samplers :: [i()]) -> ok
428
429              gl:bindSamplers/2 binds samplers from an array of existing  sam‐
430              pler objects to a specified number of consecutive sampler units.
431              Count specifies the number of sampler objects  whose  names  are
432              stored  in  the  array Samplers. That number of sampler names is
433              read from the array and bound to the Count  consecutive  sampler
434              units starting from First.
435
436              External documentation.
437
438       bindTexture(Target :: enum(), Texture :: i()) -> ok
439
440              gl:bindTexture/2 lets you create or use a named texture. Calling
441              gl:bindTexture/2 with Target  set  to  ?GL_TEXTURE_1D,  ?GL_TEX‐
442              TURE_2D,    ?GL_TEXTURE_3D,    ?GL_TEXTURE_1D_ARRAY,    ?GL_TEX‐
443              TURE_2D_ARRAY,   ?GL_TEXTURE_RECTANGLE,    ?GL_TEXTURE_CUBE_MAP,
444              ?GL_TEXTURE_CUBE_MAP_ARRAY,     ?GL_TEXTURE_BUFFER,     ?GL_TEX‐
445              TURE_2D_MULTISAMPLE or ?GL_TEXTURE_2D_MULTISAMPLE_ARRAY and Tex‐
446              ture  set  to the name of the new texture binds the texture name
447              to the target. When a texture is bound to a target, the previous
448              binding for that target is automatically broken.
449
450              External documentation.
451
452       bindTextureUnit(Unit :: i(), Texture :: i()) -> ok
453
454              gl:bindTextureUnit/2  binds  an  existing  texture object to the
455              texture unit numbered Unit.
456
457              External documentation.
458
459       bindTextures(First :: i(), Textures :: [i()]) -> ok
460
461              gl:bindTextures/2 binds an array of existing texture objects  to
462              a specified number of consecutive texture units. Count specifies
463              the number of texture objects whose names are stored in the  ar‐
464              ray Textures. That number of texture names are read from the ar‐
465              ray and bound to the Count consecutive  texture  units  starting
466              from  First.  The target, or type of texture is deduced from the
467              texture object and each texture is bound  to  the  corresponding
468              target of the texture unit. If the name zero appears in the Tex‐
469              tures array, any existing binding to any target of  the  texture
470              unit  is  reset and the default texture for that target is bound
471              in its place. Any non-zero entry in Textures must be the name of
472              an  existing  texture object. If Textures is ?NULL then it is as
473              if an appropriately sized array containing only zeros  had  been
474              specified.
475
476              External documentation.
477
478       bindTransformFeedback(Target :: enum(), Id :: i()) -> ok
479
480              gl:bindTransformFeedback/2  binds  the transform feedback object
481              with name Id to the current GL state. Id must be a  name  previ‐
482              ously  returned from a call to gl:genTransformFeedbacks/1. If Id
483              has not previously been bound, a new transform  feedback  object
484              with  name  Id  and initialized with the default transform state
485              vector is created.
486
487              External documentation.
488
489       bindVertexArray(Array :: i()) -> ok
490
491              gl:bindVertexArray/1 binds the vertex array object with name Ar‐
492              ray.  Array  is the name of a vertex array object previously re‐
493              turned from a call to gl:genVertexArrays/1, or zero to break the
494              existing vertex array object binding.
495
496              External documentation.
497
498       bindVertexBuffer(Bindingindex :: i(),
499                        Buffer :: i(),
500                        Offset :: i(),
501                        Stride :: i()) ->
502                           ok
503
504       vertexArrayVertexBuffer(Vaobj :: i(),
505                               Bindingindex :: i(),
506                               Buffer :: i(),
507                               Offset :: i(),
508                               Stride :: i()) ->
509                                  ok
510
511              gl:bindVertexBuffer/4  and gl:vertexArrayVertexBuffer/5 bind the
512              buffer named Buffer to the vertex buffer binding point whose in‐
513              dex is given by Bindingindex. gl:bindVertexBuffer/4 modifies the
514              binding of the currently  bound  vertex  array  object,  whereas
515              gl:vertexArrayVertexBuffer/5  allows the caller to specify ID of
516              the vertex array object with an argument named Vaobj, for  which
517              the  binding  should  be modified. Offset and Stride specify the
518              offset of the first element within the buffer and  the  distance
519              between  elements  within the buffer, respectively, and are both
520              measured in basic machine units. Bindingindex must be less  than
521              the  value  of ?GL_MAX_VERTEX_ATTRIB_BINDINGS. Offset and Stride
522              must be greater than or equal to zero. If Buffer is  zero,  then
523              any buffer currently bound to the specified binding point is un‐
524              bound.
525
526              External documentation.
527
528       bindVertexBuffers(First :: i(),
529                         Buffers :: [i()],
530                         Offsets :: [i()],
531                         Strides :: [i()]) ->
532                            ok
533
534       vertexArrayVertexBuffers(Vaobj :: i(),
535                                First :: i(),
536                                Buffers :: [i()],
537                                Offsets :: [i()],
538                                Strides :: [i()]) ->
539                                   ok
540
541              gl:bindVertexBuffers/4  and  gl:vertexArrayVertexBuffers/5  bind
542              storage  from an array of existing buffer objects to a specified
543              number of consecutive vertex buffer binding points  units  in  a
544              vertex  array object. For gl:bindVertexBuffers/4, the vertex ar‐
545              ray object is the  currently  bound  vertex  array  object.  For
546              gl:vertexArrayVertexBuffers/5,  Vaobj  is the name of the vertex
547              array object.
548
549              External documentation.
550
551       bitmap(Width, Height, Xorig, Yorig, Xmove, Ymove, Bitmap) -> ok
552
553              Types:
554
555                 Width = Height = i()
556                 Xorig = Yorig = Xmove = Ymove = f()
557                 Bitmap = offset() | mem()
558
559              A bitmap is a binary image. When drawn, the bitmap is positioned
560              relative to the current raster position, and frame buffer pixels
561              corresponding to 1's in the bitmap are written using the current
562              raster  color or index. Frame buffer pixels corresponding to 0's
563              in the bitmap are not modified.
564
565              External documentation.
566
567       blendColor(Red :: clamp(),
568                  Green :: clamp(),
569                  Blue :: clamp(),
570                  Alpha :: clamp()) ->
571                     ok
572
573              The ?GL_BLEND_COLOR may be used to calculate the source and des‐
574              tination  blending  factors. The color components are clamped to
575              the range [0 1] before being stored. See  gl:blendFunc/2  for  a
576              complete  description  of the blending operations. Initially the
577              ?GL_BLEND_COLOR is set to (0, 0, 0, 0).
578
579              External documentation.
580
581       blendEquation(Mode :: enum()) -> ok
582
583       blendEquationi(Buf :: i(), Mode :: enum()) -> ok
584
585              The blend equations determine how a new  pixel  (the  ''source''
586              color)  is combined with a pixel already in the framebuffer (the
587              ''destination'' color). This function sets both  the  RGB  blend
588              equation  and  the  alpha  blend  equation to a single equation.
589              gl:blendEquationi/2 specifies the blend equation  for  a  single
590              draw  buffer  whereas gl:blendEquation/1 sets the blend equation
591              for all draw buffers.
592
593              External documentation.
594
595       blendEquationSeparate(ModeRGB :: enum(), ModeAlpha :: enum()) ->
596                                ok
597
598       blendEquationSeparatei(Buf :: i(),
599                              ModeRGB :: enum(),
600                              ModeAlpha :: enum()) ->
601                                 ok
602
603              The blend equations determines how a new pixel  (the  ''source''
604              color)  is combined with a pixel already in the framebuffer (the
605              ''destination'' color). These functions specify one blend  equa‐
606              tion for the RGB-color components and one blend equation for the
607              alpha component. gl:blendEquationSeparatei/3 specifies the blend
608              equations for a single draw buffer whereas gl:blendEquationSepa‐
609              rate/2 sets the blend equations for all draw buffers.
610
611              External documentation.
612
613       blendFunc(Sfactor :: enum(), Dfactor :: enum()) -> ok
614
615       blendFunci(Buf :: i(), Src :: enum(), Dst :: enum()) -> ok
616
617              Pixels can be drawn using a function that  blends  the  incoming
618              (source)  RGBA  values  with the RGBA values that are already in
619              the frame buffer (the destination values). Blending is initially
620              disabled.   Use   gl:enable/1  and  gl:disable/1  with  argument
621              ?GL_BLEND to enable and disable blending.
622
623              External documentation.
624
625       blendFuncSeparate(SfactorRGB, DfactorRGB, SfactorAlpha,
626                         DfactorAlpha) ->
627                            ok
628
629       blendFuncSeparatei(Buf :: i(),
630                          SrcRGB :: enum(),
631                          DstRGB :: enum(),
632                          SrcAlpha :: enum(),
633                          DstAlpha :: enum()) ->
634                             ok
635
636              Pixels can be drawn using a function that  blends  the  incoming
637              (source)  RGBA  values  with the RGBA values that are already in
638              the frame buffer (the destination values). Blending is initially
639              disabled.   Use   gl:enable/1  and  gl:disable/1  with  argument
640              ?GL_BLEND to enable and disable blending.
641
642              External documentation.
643
644       blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1,
645                       DstY1, Mask, Filter) ->
646                          ok
647
648              Types:
649
650                 SrcX0 = SrcY0 = SrcX1 = SrcY1 = DstX0 = DstY0 = DstX1 = DstY1
651                 = Mask = i()
652                 Filter = enum()
653
654              gl:blitFramebuffer/10 and glBlitNamedFramebuffer transfer a rec‐
655              tangle of pixel values from one region of a read framebuffer  to
656              another region of a draw framebuffer.
657
658              External documentation.
659
660       bufferData(Target :: enum(),
661                  Size :: i(),
662                  Data :: offset() | mem(),
663                  Usage :: enum()) ->
664                     ok
665
666              gl:bufferData/4  and  glNamedBufferData  create a new data store
667              for a buffer object. In case of gl:bufferData/4, the buffer  ob‐
668              ject currently bound to Target is used. For glNamedBufferData, a
669              buffer object associated with ID specified by the caller in Buf‐
670              fer will be used instead.
671
672              External documentation.
673
674       bufferStorage(Target :: enum(),
675                     Size :: i(),
676                     Data :: offset() | mem(),
677                     Flags :: i()) ->
678                        ok
679
680              gl:bufferStorage/4  and  glNamedBufferStorage  create  a new im‐
681              mutable data store. For gl:bufferStorage/4,  the  buffer  object
682              currently  bound  to  Target  will  be initialized. For glNamed‐
683              BufferStorage, Buffer is the name of the buffer object that will
684              be  configured. The size of the data store is specified by Size.
685              If an initial data is available, its address may be supplied  in
686              Data.  Otherwise,  to  create  an uninitialized data store, Data
687              should be ?NULL.
688
689              External documentation.
690
691       bufferSubData(Target :: enum(),
692                     Offset :: i(),
693                     Size :: i(),
694                     Data :: offset() | mem()) ->
695                        ok
696
697              gl:bufferSubData/4 and glNamedBufferSubData redefine some or all
698              of the data store for the specified buffer object. Data starting
699              at byte offset Offset and extending for Size bytes is copied  to
700              the  data  store  from the memory pointed to by Data. Offset and
701              Size must define a range lying entirely within  the  buffer  ob‐
702              ject's data store.
703
704              External documentation.
705
706       callList(List :: i()) -> ok
707
708              gl:callList/1  causes the named display list to be executed. The
709              commands saved in the display list are executed in  order,  just
710              as if they were called without using a display list. If List has
711              not been defined as a display list, gl:callList/1 is ignored.
712
713              External documentation.
714
715       callLists(Lists :: [i()]) -> ok
716
717              gl:callLists/1 causes each display list in  the  list  of  names
718              passed  as Lists to be executed. As a result, the commands saved
719              in each display list are executed in order, just as if they were
720              called without using a display list. Names of display lists that
721              have not been defined are ignored.
722
723              External documentation.
724
725       checkFramebufferStatus(Target :: enum()) -> enum()
726
727              gl:checkFramebufferStatus/1  and   glCheckNamedFramebufferStatus
728              return  the  completeness  status  of  a framebuffer object when
729              treated as a read or draw framebuffer, depending on the value of
730              Target.
731
732              External documentation.
733
734       clampColor(Target :: enum(), Clamp :: enum()) -> ok
735
736              gl:clampColor/2 controls color clamping that is performed during
737              gl:readPixels/7. Target must be ?GL_CLAMP_READ_COLOR.  If  Clamp
738              is  ?GL_TRUE,  read  color  clamping  is  enabled;  if  Clamp is
739              ?GL_FALSE,  read  color  clamping  is  disabled.  If  Clamp   is
740              ?GL_FIXED_ONLY,  read  color clamping is enabled only if the se‐
741              lected read buffer has fixed point components and disabled  oth‐
742              erwise.
743
744              External documentation.
745
746       clear(Mask :: i()) -> ok
747
748              gl:clear/1 sets the bitplane area of the window to values previ‐
749              ously  selected   by   gl:clearColor/4,   gl:clearDepth/1,   and
750              gl:clearStencil/1.  Multiple color buffers can be cleared simul‐
751              taneously by selecting more than one  buffer  at  a  time  using
752              gl:drawBuffer/1.
753
754              External documentation.
755
756       clearAccum(Red :: f(), Green :: f(), Blue :: f(), Alpha :: f()) ->
757                     ok
758
759              gl:clearAccum/4 specifies the red, green, blue, and alpha values
760              used by gl:clear/1 to clear the accumulation buffer.
761
762              External documentation.
763
764       clearBufferData(Target, Internalformat, Format, Type, Data) -> ok
765
766       clearBufferSubData(Target, Internalformat, Offset, Size, Format,
767                          Type, Data) ->
768                             ok
769
770       clearBufferfi(Buffer :: enum(),
771                     Drawbuffer :: i(),
772                     Depth :: f(),
773                     Stencil :: i()) ->
774                        ok
775
776       clearBufferfv(Buffer :: enum(),
777                     Drawbuffer :: i(),
778                     Value :: tuple()) ->
779                        ok
780
781       clearBufferiv(Buffer :: enum(),
782                     Drawbuffer :: i(),
783                     Value :: tuple()) ->
784                        ok
785
786       clearBufferuiv(Buffer :: enum(),
787                      Drawbuffer :: i(),
788                      Value :: tuple()) ->
789                         ok
790
791              These commands clear a specified  buffer  of  a  framebuffer  to
792              specified  value(s).  For  gl:clearBuffer*(), the framebuffer is
793              the currently bound draw framebuffer object.  For  glClearNamed‐
794              Framebuffer*,  Framebuffer  is zero, indicating the default draw
795              framebuffer, or the name of a framebuffer object.
796
797              External documentation.
798
799       clearColor(Red :: clamp(),
800                  Green :: clamp(),
801                  Blue :: clamp(),
802                  Alpha :: clamp()) ->
803                     ok
804
805              gl:clearColor/4 specifies the red, green, blue, and alpha values
806              used  by gl:clear/1 to clear the color buffers. Values specified
807              by gl:clearColor/4 are clamped to the range [0 1].
808
809              External documentation.
810
811       clearDepth(Depth :: clamp()) -> ok
812
813       clearDepthf(D :: f()) -> ok
814
815              gl:clearDepth/1 specifies the depth value used by gl:clear/1  to
816              clear  the depth buffer. Values specified by gl:clearDepth/1 are
817              clamped to the range [0 1].
818
819              External documentation.
820
821       clearIndex(C :: f()) -> ok
822
823              gl:clearIndex/1 specifies the index used by gl:clear/1 to  clear
824              the  color  index  buffers.  C is not clamped. Rather, C is con‐
825              verted to a fixed-point value with unspecified precision to  the
826              right  of  the  binary  point. The integer part of this value is
827              then masked with 2 m-1, where m is the number of bits in a color
828              index stored in the frame buffer.
829
830              External documentation.
831
832       clearStencil(S :: i()) -> ok
833
834              gl:clearStencil/1  specifies  the  index  used  by gl:clear/1 to
835              clear the stencil buffer. S is masked with 2 m-1, where m is the
836              number of bits in the stencil buffer.
837
838              External documentation.
839
840       clearTexImage(Texture :: i(),
841                     Level :: i(),
842                     Format :: enum(),
843                     Type :: enum(),
844                     Data :: offset() | mem()) ->
845                        ok
846
847              gl:clearTexImage/5  fills  all  an  image contained in a texture
848              with an application supplied value. Texture must be the name  of
849              an  existing  texture. Further, Texture may not be the name of a
850              buffer texture, nor may its internal format be compressed.
851
852              External documentation.
853
854       clearTexSubImage(Texture, Level, Xoffset, Yoffset, Zoffset, Width,
855                        Height, Depth, Format, Type, Data) ->
856                           ok
857
858              Types:
859
860                 Texture = Level = Xoffset =  Yoffset  =  Zoffset  =  Width  =
861                 Height = Depth = i()
862                 Format = Type = enum()
863                 Data = offset() | mem()
864
865              gl:clearTexSubImage/11  fills  all or part of an image contained
866              in a texture with an application supplied value. Texture must be
867              the name of an existing texture. Further, Texture may not be the
868              name of a buffer texture, nor may its internal  format  be  com‐
869              pressed.
870
871              External documentation.
872
873       clientActiveTexture(Texture :: enum()) -> ok
874
875              gl:clientActiveTexture/1  selects  the vertex array client state
876              parameters to be modified by gl:texCoordPointer/4,  and  enabled
877              or   disabled   with   gl:enableClientState/1   or   gl:disable‐
878              ClientState/1, respectively, when called  with  a  parameter  of
879              ?GL_TEXTURE_COORD_ARRAY.
880
881              External documentation.
882
883       clientWaitSync(Sync :: i(), Flags :: i(), Timeout :: i()) ->
884                         enum()
885
886              gl:clientWaitSync/3  causes the client to block and wait for the
887              sync object specified by Sync to become  signaled.  If  Sync  is
888              signaled when gl:clientWaitSync/3 is called, gl:clientWaitSync/3
889              returns immediately, otherwise it will block and wait for up  to
890              Timeout nanoseconds for Sync to become signaled.
891
892              External documentation.
893
894       clipControl(Origin :: enum(), Depth :: enum()) -> ok
895
896              gl:clipControl/2  controls  the clipping volume behavior and the
897              clip coordinate to window coordinate transformation behavior.
898
899              External documentation.
900
901       clipPlane(Plane :: enum(), Equation :: {f(), f(), f(), f()}) -> ok
902
903              Geometry is always clipped against the boundaries of a six-plane
904              frustum  in x, y, and z. gl:clipPlane/2 allows the specification
905              of additional planes, not necessarily perpendicular to the x, y,
906              or  z  axis, against which all geometry is clipped. To determine
907              the maximum number of additional clipping planes,  call  gl:get‐
908              Integerv/1  with  argument  ?GL_MAX_CLIP_PLANES. All implementa‐
909              tions support at least six such clipping planes. Because the re‐
910              sulting clipping region is the intersection of the defined half-
911              spaces, it is always convex.
912
913              External documentation.
914
915       color3b(Red :: i(), Green :: i(), Blue :: i()) -> ok
916
917       color3bv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
918
919       color3d(Red :: f(), Green :: f(), Blue :: f()) -> ok
920
921       color3dv(X1 :: {Red :: f(), Green :: f(), Blue :: f()}) -> ok
922
923       color3f(Red :: f(), Green :: f(), Blue :: f()) -> ok
924
925       color3fv(X1 :: {Red :: f(), Green :: f(), Blue :: f()}) -> ok
926
927       color3i(Red :: i(), Green :: i(), Blue :: i()) -> ok
928
929       color3iv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
930
931       color3s(Red :: i(), Green :: i(), Blue :: i()) -> ok
932
933       color3sv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
934
935       color3ub(Red :: i(), Green :: i(), Blue :: i()) -> ok
936
937       color3ubv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
938
939       color3ui(Red :: i(), Green :: i(), Blue :: i()) -> ok
940
941       color3uiv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
942
943       color3us(Red :: i(), Green :: i(), Blue :: i()) -> ok
944
945       color3usv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) -> ok
946
947       color4b(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) -> ok
948
949       color4bv(X1 ::
950                    {Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()}) ->
951                   ok
952
953       color4d(Red :: f(), Green :: f(), Blue :: f(), Alpha :: f()) -> ok
954
955       color4dv(X1 ::
956                    {Red :: f(), Green :: f(), Blue :: f(), Alpha :: f()}) ->
957                   ok
958
959       color4f(Red :: f(), Green :: f(), Blue :: f(), Alpha :: f()) -> ok
960
961       color4fv(X1 ::
962                    {Red :: f(), Green :: f(), Blue :: f(), Alpha :: f()}) ->
963                   ok
964
965       color4i(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) -> ok
966
967       color4iv(X1 ::
968                    {Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()}) ->
969                   ok
970
971       color4s(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) -> ok
972
973       color4sv(X1 ::
974                    {Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()}) ->
975                   ok
976
977       color4ub(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) ->
978                   ok
979
980       color4ubv(X1 ::
981                     {Red :: i(),
982                      Green :: i(),
983                      Blue :: i(),
984                      Alpha :: i()}) ->
985                    ok
986
987       color4ui(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) ->
988                   ok
989
990       color4uiv(X1 ::
991                     {Red :: i(),
992                      Green :: i(),
993                      Blue :: i(),
994                      Alpha :: i()}) ->
995                    ok
996
997       color4us(Red :: i(), Green :: i(), Blue :: i(), Alpha :: i()) ->
998                   ok
999
1000       color4usv(X1 ::
1001                     {Red :: i(),
1002                      Green :: i(),
1003                      Blue :: i(),
1004                      Alpha :: i()}) ->
1005                    ok
1006
1007              The GL stores both a current single-valued  color  index  and  a
1008              current  four-valued RGBA color. gl:color() sets a new four-val‐
1009              ued RGBA color. gl:color() has two major  variants:  gl:color3()
1010              and  gl:color4().  gl:color3()  variants specify new red, green,
1011              and blue values explicitly and set the current  alpha  value  to
1012              1.0  (full  intensity)  implicitly. gl:color4() variants specify
1013              all four color components explicitly.
1014
1015              External documentation.
1016
1017       colorMask(Red :: 0 | 1,
1018                 Green :: 0 | 1,
1019                 Blue :: 0 | 1,
1020                 Alpha :: 0 | 1) ->
1021                    ok
1022
1023       colorMaski(Index :: i(),
1024                  R :: 0 | 1,
1025                  G :: 0 | 1,
1026                  B :: 0 | 1,
1027                  A :: 0 | 1) ->
1028                     ok
1029
1030              gl:colorMask/4 and gl:colorMaski/5 specify whether the  individ‐
1031              ual  color components in the frame buffer can or cannot be writ‐
1032              ten. gl:colorMaski/5 sets the mask for a specific  draw  buffer,
1033              whereas  gl:colorMask/4  sets  the mask for all draw buffers. If
1034              Red is ?GL_FALSE, for example, no change is made to the red com‐
1035              ponent  of  any pixel in any of the color buffers, regardless of
1036              the drawing operation attempted.
1037
1038              External documentation.
1039
1040       colorMaterial(Face :: enum(), Mode :: enum()) -> ok
1041
1042              gl:colorMaterial/2 specifies which material parameters track the
1043              current  color. When ?GL_COLOR_MATERIAL is enabled, the material
1044              parameter or parameters specified by Mode, of  the  material  or
1045              materials  specified  by  Face,  track  the current color at all
1046              times.
1047
1048              External documentation.
1049
1050       colorPointer(Size :: i(),
1051                    Type :: enum(),
1052                    Stride :: i(),
1053                    Ptr :: offset() | mem()) ->
1054                       ok
1055
1056              gl:colorPointer/4 specifies the location and data format  of  an
1057              array  of color components to use when rendering. Size specifies
1058              the number of components per color, and must be  3  or  4.  Type
1059              specifies  the  data  type  of  each color component, and Stride
1060              specifies the byte stride from one color to the  next,  allowing
1061              vertices  and  attributes  to  be  packed into a single array or
1062              stored in separate arrays. (Single-array storage may be more ef‐
1063              ficient on some implementations; see gl:interleavedArrays/3.)
1064
1065              External documentation.
1066
1067       colorSubTable(Target, Start, Count, Format, Type, Data) -> ok
1068
1069              Types:
1070
1071                 Target = enum()
1072                 Start = Count = i()
1073                 Format = Type = enum()
1074                 Data = offset() | mem()
1075
1076              gl:colorSubTable/6  is used to respecify a contiguous portion of
1077              a color table previously defined using gl:colorTable/6. The pix‐
1078              els referenced by Data replace the portion of the existing table
1079              from indices Start to start+count-1, inclusive. This region  may
1080              not  include any entries outside the range of the color table as
1081              it was originally specified. It is not an  error  to  specify  a
1082              subtexture  with width of 0, but such a specification has no ef‐
1083              fect.
1084
1085              External documentation.
1086
1087       colorTable(Target, Internalformat, Width, Format, Type, Table) ->
1088                     ok
1089
1090              Types:
1091
1092                 Target = Internalformat = enum()
1093                 Width = i()
1094                 Format = Type = enum()
1095                 Table = offset() | mem()
1096
1097              gl:colorTable/6 may be used in two ways: to test the actual size
1098              and color resolution of a lookup table given a particular set of
1099              parameters, or to load the contents of a color lookup table. Use
1100              the targets ?GL_PROXY_* for the first case and the other targets
1101              for the second case.
1102
1103              External documentation.
1104
1105       colorTableParameterfv(Target :: enum(),
1106                             Pname :: enum(),
1107                             Params :: {f(), f(), f(), f()}) ->
1108                                ok
1109
1110       colorTableParameteriv(Target :: enum(),
1111                             Pname :: enum(),
1112                             Params :: {i(), i(), i(), i()}) ->
1113                                ok
1114
1115              gl:colorTableParameter() is used to specify  the  scale  factors
1116              and  bias terms applied to color components when they are loaded
1117              into a color table. Target indicates which color table the scale
1118              and  bias  terms  apply  to;  it must be set to ?GL_COLOR_TABLE,
1119              ?GL_POST_CONVOLUTION_COLOR_TABLE,     or      ?GL_POST_COLOR_MA‐
1120              TRIX_COLOR_TABLE.
1121
1122              External documentation.
1123
1124       compileShader(Shader :: i()) -> ok
1125
1126              gl:compileShader/1  compiles  the  source code strings that have
1127              been stored in the shader object specified by Shader.
1128
1129              External documentation.
1130
1131       compressedTexImage1D(Target, Level, Internalformat, Width, Border,
1132                            ImageSize, Data) ->
1133                               ok
1134
1135              Types:
1136
1137                 Target = enum()
1138                 Level = i()
1139                 Internalformat = enum()
1140                 Width = Border = ImageSize = i()
1141                 Data = offset() | mem()
1142
1143              Texturing allows elements of  an  image  array  to  be  read  by
1144              shaders.
1145
1146              External documentation.
1147
1148       compressedTexImage2D(Target, Level, Internalformat, Width, Height,
1149                            Border, ImageSize, Data) ->
1150                               ok
1151
1152              Types:
1153
1154                 Target = enum()
1155                 Level = i()
1156                 Internalformat = enum()
1157                 Width = Height = Border = ImageSize = i()
1158                 Data = offset() | mem()
1159
1160              Texturing  allows  elements  of  an  image  array  to be read by
1161              shaders.
1162
1163              External documentation.
1164
1165       compressedTexImage3D(Target, Level, Internalformat, Width, Height,
1166                            Depth, Border, ImageSize, Data) ->
1167                               ok
1168
1169              Types:
1170
1171                 Target = enum()
1172                 Level = i()
1173                 Internalformat = enum()
1174                 Width = Height = Depth = Border = ImageSize = i()
1175                 Data = offset() | mem()
1176
1177              Texturing allows elements of  an  image  array  to  be  read  by
1178              shaders.
1179
1180              External documentation.
1181
1182       compressedTexSubImage1D(Target, Level, Xoffset, Width, Format,
1183                               ImageSize, Data) ->
1184                                  ok
1185
1186       compressedTextureSubImage1D(Texture, Level, Xoffset, Width,
1187                                   Format, ImageSize, Data) ->
1188                                      ok
1189
1190              Types:
1191
1192                 Texture = Level = Xoffset = Width = i()
1193                 Format = enum()
1194                 ImageSize = i()
1195                 Data = offset() | mem()
1196
1197              Texturing  allows  elements  of  an  image  array  to be read by
1198              shaders.
1199
1200              External documentation.
1201
1202       compressedTexSubImage2D(Target, Level, Xoffset, Yoffset, Width,
1203                               Height, Format, ImageSize, Data) ->
1204                                  ok
1205
1206       compressedTextureSubImage2D(Texture, Level, Xoffset, Yoffset,
1207                                   Width, Height, Format, ImageSize,
1208                                   Data) ->
1209                                      ok
1210
1211              Types:
1212
1213                 Texture = Level = Xoffset = Yoffset = Width = Height = i()
1214                 Format = enum()
1215                 ImageSize = i()
1216                 Data = offset() | mem()
1217
1218              Texturing allows elements of  an  image  array  to  be  read  by
1219              shaders.
1220
1221              External documentation.
1222
1223       compressedTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset,
1224                               Width, Height, Depth, Format, ImageSize,
1225                               Data) ->
1226                                  ok
1227
1228       compressedTextureSubImage3D(Texture, Level, Xoffset, Yoffset,
1229                                   Zoffset, Width, Height, Depth, Format,
1230                                   ImageSize, Data) ->
1231                                      ok
1232
1233              Types:
1234
1235                 Texture  =  Level  =  Xoffset  =  Yoffset = Zoffset = Width =
1236                 Height = Depth = i()
1237                 Format = enum()
1238                 ImageSize = i()
1239                 Data = offset() | mem()
1240
1241              Texturing allows elements of  an  image  array  to  be  read  by
1242              shaders.
1243
1244              External documentation.
1245
1246       convolutionFilter1D(Target, Internalformat, Width, Format, Type,
1247                           Image) ->
1248                              ok
1249
1250              Types:
1251
1252                 Target = Internalformat = enum()
1253                 Width = i()
1254                 Format = Type = enum()
1255                 Image = offset() | mem()
1256
1257              gl:convolutionFilter1D/6  builds  a  one-dimensional convolution
1258              filter kernel from an array of pixels.
1259
1260              External documentation.
1261
1262       convolutionFilter2D(Target, Internalformat, Width, Height, Format,
1263                           Type, Image) ->
1264                              ok
1265
1266              Types:
1267
1268                 Target = Internalformat = enum()
1269                 Width = Height = i()
1270                 Format = Type = enum()
1271                 Image = offset() | mem()
1272
1273              gl:convolutionFilter2D/7 builds  a  two-dimensional  convolution
1274              filter kernel from an array of pixels.
1275
1276              External documentation.
1277
1278       convolutionParameterf(Target :: enum(),
1279                             Pname :: enum(),
1280                             Params :: tuple()) ->
1281                                ok
1282
1283       convolutionParameterfv(Target :: enum(),
1284                              Pname :: enum(),
1285                              Params :: tuple()) ->
1286                                 ok
1287
1288       convolutionParameteri(Target :: enum(),
1289                             Pname :: enum(),
1290                             Params :: tuple()) ->
1291                                ok
1292
1293       convolutionParameteriv(Target :: enum(),
1294                              Pname :: enum(),
1295                              Params :: tuple()) ->
1296                                 ok
1297
1298              gl:convolutionParameter() sets the value of a convolution param‐
1299              eter.
1300
1301              External documentation.
1302
1303       copyBufferSubData(ReadTarget, WriteTarget, ReadOffset,
1304                         WriteOffset, Size) ->
1305                            ok
1306
1307              Types:
1308
1309                 ReadTarget = WriteTarget = enum()
1310                 ReadOffset = WriteOffset = Size = i()
1311
1312              gl:copyBufferSubData/5 and glCopyNamedBufferSubData copy part of
1313              the  data  store  attached to a source buffer object to the data
1314              store attached to a destination buffer object. The number of ba‐
1315              sic machine units indicated by Size is copied from the source at
1316              offset ReadOffset to the destination at WriteOffset. ReadOffset,
1317              WriteOffset and Size are in terms of basic machine units.
1318
1319              External documentation.
1320
1321       copyColorSubTable(Target :: enum(),
1322                         Start :: i(),
1323                         X :: i(),
1324                         Y :: i(),
1325                         Width :: i()) ->
1326                            ok
1327
1328              gl:copyColorSubTable/5 is used to respecify a contiguous portion
1329              of a color table previously defined using  gl:colorTable/6.  The
1330              pixels  copied  from  the framebuffer replace the portion of the
1331              existing table from indices Start to start+x-1, inclusive.  This
1332              region  may  not  include  any  entries outside the range of the
1333              color table, as was originally specified. It is not an error  to
1334              specify  a  subtexture with width of 0, but such a specification
1335              has no effect.
1336
1337              External documentation.
1338
1339       copyColorTable(Target :: enum(),
1340                      Internalformat :: enum(),
1341                      X :: i(),
1342                      Y :: i(),
1343                      Width :: i()) ->
1344                         ok
1345
1346              gl:copyColorTable/5 loads a color table  with  pixels  from  the
1347              current ?GL_READ_BUFFER (rather than from main memory, as is the
1348              case for gl:colorTable/6).
1349
1350              External documentation.
1351
1352       copyConvolutionFilter1D(Target :: enum(),
1353                               Internalformat :: enum(),
1354                               X :: i(),
1355                               Y :: i(),
1356                               Width :: i()) ->
1357                                  ok
1358
1359              gl:copyConvolutionFilter1D/5 defines a one-dimensional  convolu‐
1360              tion  filter kernel with pixels from the current ?GL_READ_BUFFER
1361              (rather than from main memory, as is the  case  for  gl:convolu‐
1362              tionFilter1D/6).
1363
1364              External documentation.
1365
1366       copyConvolutionFilter2D(Target :: enum(),
1367                               Internalformat :: enum(),
1368                               X :: i(),
1369                               Y :: i(),
1370                               Width :: i(),
1371                               Height :: i()) ->
1372                                  ok
1373
1374              gl:copyConvolutionFilter2D/6  defines a two-dimensional convolu‐
1375              tion filter kernel with pixels from the current  ?GL_READ_BUFFER
1376              (rather  than  from  main memory, as is the case for gl:convolu‐
1377              tionFilter2D/7).
1378
1379              External documentation.
1380
1381       copyImageSubData(SrcName, SrcTarget, SrcLevel, SrcX, SrcY, SrcZ,
1382                        DstName, DstTarget, DstLevel, DstX, DstY, DstZ,
1383                        SrcWidth, SrcHeight, SrcDepth) ->
1384                           ok
1385
1386              Types:
1387
1388                 SrcName = i()
1389                 SrcTarget = enum()
1390                 SrcLevel = SrcX = SrcY = SrcZ = DstName = i()
1391                 DstTarget = enum()
1392                 DstLevel = DstX = DstY = DstZ = SrcWidth =  SrcHeight  =  Sr‐
1393                 cDepth = i()
1394
1395              gl:copyImageSubData/15  may  be used to copy data from one image
1396              (i.e. texture  or  renderbuffer)  to  another.  gl:copyImageSub‐
1397              Data/15  does  not  perform  general-purpose conversions such as
1398              scaling, resizing, blending, color-space, or format conversions.
1399              It  should be considered to operate in a manner similar to a CPU
1400              memcpy. CopyImageSubData can copy between images with  different
1401              internal formats, provided the formats are compatible.
1402
1403              External documentation.
1404
1405       copyPixels(X :: i(),
1406                  Y :: i(),
1407                  Width :: i(),
1408                  Height :: i(),
1409                  Type :: enum()) ->
1410                     ok
1411
1412              gl:copyPixels/5 copies a screen-aligned rectangle of pixels from
1413              the specified frame buffer location to a region relative to  the
1414              current  raster  position. Its operation is well defined only if
1415              the entire pixel source region is within the exposed portion  of
1416              the  window.  Results of copies from outside the window, or from
1417              regions of the window that are not exposed, are hardware  depen‐
1418              dent and undefined.
1419
1420              External documentation.
1421
1422       copyTexImage1D(Target, Level, Internalformat, X, Y, Width, Border) ->
1423                         ok
1424
1425              Types:
1426
1427                 Target = enum()
1428                 Level = i()
1429                 Internalformat = enum()
1430                 X = Y = Width = Border = i()
1431
1432              gl:copyTexImage1D/7 defines a one-dimensional texture image with
1433              pixels from the current ?GL_READ_BUFFER.
1434
1435              External documentation.
1436
1437       copyTexImage2D(Target, Level, Internalformat, X, Y, Width, Height,
1438                      Border) ->
1439                         ok
1440
1441              Types:
1442
1443                 Target = enum()
1444                 Level = i()
1445                 Internalformat = enum()
1446                 X = Y = Width = Height = Border = i()
1447
1448              gl:copyTexImage2D/8 defines a two-dimensional texture image,  or
1449              cube-map   texture   image   with   pixels   from   the  current
1450              ?GL_READ_BUFFER.
1451
1452              External documentation.
1453
1454       copyTexSubImage1D(Target :: enum(),
1455                         Level :: i(),
1456                         Xoffset :: i(),
1457                         X :: i(),
1458                         Y :: i(),
1459                         Width :: i()) ->
1460                            ok
1461
1462              gl:copyTexSubImage1D/6  and  glCopyTextureSubImage1D  replace  a
1463              portion  of a one-dimensional texture image with pixels from the
1464              current ?GL_READ_BUFFER (rather than from main memory, as is the
1465              case  for  gl:texSubImage1D/7).  For gl:copyTexSubImage1D/6, the
1466              texture object that is bound to Target  will  be  used  for  the
1467              process.  For  glCopyTextureSubImage1D, Texture tells which tex‐
1468              ture object should be used for the purpose of the call.
1469
1470              External documentation.
1471
1472       copyTexSubImage2D(Target, Level, Xoffset, Yoffset, X, Y, Width,
1473                         Height) ->
1474                            ok
1475
1476              Types:
1477
1478                 Target = enum()
1479                 Level = Xoffset = Yoffset = X = Y = Width = Height = i()
1480
1481              gl:copyTexSubImage2D/8  and  glCopyTextureSubImage2D  replace  a
1482              rectangular portion of a two-dimensional texture image, cube-map
1483              texture image, rectangular image, or a linear portion of a  num‐
1484              ber  of  slices  of  a one-dimensional array texture with pixels
1485              from the current ?GL_READ_BUFFER (rather than from main  memory,
1486              as is the case for gl:texSubImage2D/9).
1487
1488              External documentation.
1489
1490       copyTexSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, X, Y,
1491                         Width, Height) ->
1492                            ok
1493
1494              Types:
1495
1496                 Target = enum()
1497                 Level  = Xoffset = Yoffset = Zoffset = X = Y = Width = Height
1498                 = i()
1499
1500              gl:copyTexSubImage3D/9 and glCopyTextureSubImage3D functions re‐
1501              place a rectangular portion of a three-dimensional or two-dimen‐
1502              sional  array  texture  image  with  pixels  from  the   current
1503              ?GL_READ_BUFFER  (rather  than  from main memory, as is the case
1504              for gl:texSubImage3D/11).
1505
1506              External documentation.
1507
1508       createBuffers(N :: i()) -> [i()]
1509
1510              gl:createBuffers/1 returns N previously unused buffer  names  in
1511              Buffers, each representing a new buffer object initialized as if
1512              it had been bound to an unspecified target.
1513
1514              External documentation.
1515
1516       createFramebuffers(N :: i()) -> [i()]
1517
1518              gl:createFramebuffers/1 returns N previously unused  framebuffer
1519              names  in  Framebuffers, each representing a new framebuffer ob‐
1520              ject initialized to the default state.
1521
1522              External documentation.
1523
1524       createProgram() -> i()
1525
1526              gl:createProgram/0 creates an empty program object and returns a
1527              non-zero  value  by which it can be referenced. A program object
1528              is an object to which shader objects can be attached. This  pro‐
1529              vides  a  mechanism  to  specify the shader objects that will be
1530              linked to create a program. It also provides a means for  check‐
1531              ing the compatibility of the shaders that will be used to create
1532              a program (for instance, checking the  compatibility  between  a
1533              vertex  shader  and a fragment shader). When no longer needed as
1534              part of a program object, shader objects can be detached.
1535
1536              External documentation.
1537
1538       createProgramPipelines(N :: i()) -> [i()]
1539
1540              gl:createProgramPipelines/1 returns N previously unused  program
1541              pipeline  names  in  Pipelines,  each representing a new program
1542              pipeline object initialized to the default state.
1543
1544              External documentation.
1545
1546       createQueries(Target :: enum(), N :: i()) -> [i()]
1547
1548              gl:createQueries/2 returns  N  previously  unused  query  object
1549              names  in  Ids,  each  representing  a new query object with the
1550              specified Target.
1551
1552              External documentation.
1553
1554       createRenderbuffers(N :: i()) -> [i()]
1555
1556              gl:createRenderbuffers/1 returns  N  previously  unused  render‐
1557              buffer  object  names  in Renderbuffers, each representing a new
1558              renderbuffer object initialized to the default state.
1559
1560              External documentation.
1561
1562       createSamplers(N :: i()) -> [i()]
1563
1564              gl:createSamplers/1 returns N previously unused sampler names in
1565              Samplers,  each representing a new sampler object initialized to
1566              the default state.
1567
1568              External documentation.
1569
1570       createShader(Type :: enum()) -> i()
1571
1572              gl:createShader/1 creates an empty shader object and  returns  a
1573              non-zero value by which it can be referenced. A shader object is
1574              used to maintain the source code strings that define  a  shader.
1575              ShaderType  indicates  the  type  of  shader to be created. Five
1576              types of  shader  are  supported.  A  shader  of  type  ?GL_COM‐
1577              PUTE_SHADER  is a shader that is intended to run on the program‐
1578              mable compute processor. A shader of type ?GL_VERTEX_SHADER is a
1579              shader  that  is intended to run on the programmable vertex pro‐
1580              cessor. A shader of type  ?GL_TESS_CONTROL_SHADER  is  a  shader
1581              that is intended to run on the programmable tessellation proces‐
1582              sor in the control stage.  A  shader  of  type  ?GL_TESS_EVALUA‐
1583              TION_SHADER  is a shader that is intended to run on the program‐
1584              mable tessellation processor in the evaluation stage.  A  shader
1585              of  type ?GL_GEOMETRY_SHADER is a shader that is intended to run
1586              on  the  programmable  geometry  processor.  A  shader  of  type
1587              ?GL_FRAGMENT_SHADER  is  a shader that is intended to run on the
1588              programmable fragment processor.
1589
1590              External documentation.
1591
1592       createShaderProgramv(Type :: enum(),
1593                            Strings :: [unicode:chardata()]) ->
1594                               i()
1595
1596              gl:createShaderProgram() creates  a  program  object  containing
1597              compiled  and  linked  shaders  for  a single stage specified by
1598              Type. Strings refers to an array of Count strings from which  to
1599              create the shader executables.
1600
1601              External documentation.
1602
1603       createTextures(Target :: enum(), N :: i()) -> [i()]
1604
1605              gl:createTextures/2 returns N previously unused texture names in
1606              Textures, each representing a new texture object of  the  dimen‐
1607              sionality  and  type  specified by Target and initialized to the
1608              default values for that texture type.
1609
1610              External documentation.
1611
1612       createTransformFeedbacks(N :: i()) -> [i()]
1613
1614              gl:createTransformFeedbacks/1 returns N previously unused trans‐
1615              form  feedback  object  names  in  Ids,  each representing a new
1616              transform feedback object initialized to the default state.
1617
1618              External documentation.
1619
1620       createVertexArrays(N :: i()) -> [i()]
1621
1622              gl:createVertexArrays/1 returns N previously unused vertex array
1623              object names in Arrays, each representing a new vertex array ob‐
1624              ject initialized to the default state.
1625
1626              External documentation.
1627
1628       cullFace(Mode :: enum()) -> ok
1629
1630              gl:cullFace/1 specifies whether front- or back-facing facets are
1631              culled  (as  specified  by  mode) when facet culling is enabled.
1632              Facet culling is initially disabled. To enable and disable facet
1633              culling, call the gl:enable/1 and gl:disable/1 commands with the
1634              argument ?GL_CULL_FACE. Facets include  triangles,  quadrilater‐
1635              als, polygons, and rectangles.
1636
1637              External documentation.
1638
1639       debugMessageControl(Source :: enum(),
1640                           Type :: enum(),
1641                           Severity :: enum(),
1642                           Ids :: [i()],
1643                           Enabled :: 0 | 1) ->
1644                              ok
1645
1646              gl:debugMessageControl/5  controls  the  reporting of debug mes‐
1647              sages generated by a debug context. The parameters Source,  Type
1648              and  Severity  form a filter to select messages from the pool of
1649              potential messages generated by the GL.
1650
1651              External documentation.
1652
1653       debugMessageInsert(Source :: enum(),
1654                          Type :: enum(),
1655                          Id :: i(),
1656                          Severity :: enum(),
1657                          Buf :: string()) ->
1658                             ok
1659
1660              gl:debugMessageInsert/5 inserts a user-supplied message into the
1661              debug  output  queue.  Source  specifies the source that will be
1662              used to classify the message and must be ?GL_DEBUG_SOURCE_APPLI‐
1663              CATION  or  ?GL_DEBUG_SOURCE_THIRD_PARTY.  All other sources are
1664              reserved for use by the GL implementation.  Type  indicates  the
1665              type  of  the  message  to be inserted and may be one of ?GL_DE‐
1666              BUG_TYPE_ERROR,   ?GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR,    ?GL_DE‐
1667              BUG_TYPE_UNDEFINED_BEHAVIOR, ?GL_DEBUG_TYPE_PORTABILITY, ?GL_DE‐
1668              BUG_TYPE_PERFORMANCE,       ?GL_DEBUG_TYPE_MARKER,       ?GL_DE‐
1669              BUG_TYPE_PUSH_GROUP,    ?GL_DEBUG_TYPE_POP_GROUP,   or   ?GL_DE‐
1670              BUG_TYPE_OTHER. Severity indicates the severity of  the  message
1671              and  may  be  ?GL_DEBUG_SEVERITY_LOW, ?GL_DEBUG_SEVERITY_MEDIUM,
1672              ?GL_DEBUG_SEVERITY_HIGH or  ?GL_DEBUG_SEVERITY_NOTIFICATION.  Id
1673              is  available  for application defined use and may be any value.
1674              This value will be recorded and used to identify the message.
1675
1676              External documentation.
1677
1678       deleteBuffers(Buffers :: [i()]) -> ok
1679
1680              gl:deleteBuffers/1 deletes N buffer objects named  by  the  ele‐
1681              ments of the array Buffers. After a buffer object is deleted, it
1682              has no contents, and its name is free for reuse (for example  by
1683              gl:genBuffers/1).  If a buffer object that is currently bound is
1684              deleted, the binding reverts to 0 (the absence of any buffer ob‐
1685              ject).
1686
1687              External documentation.
1688
1689       deleteFramebuffers(Framebuffers :: [i()]) -> ok
1690
1691              gl:deleteFramebuffers/1  deletes the N framebuffer objects whose
1692              names are stored in the array  addressed  by  Framebuffers.  The
1693              name  zero is reserved by the GL and is silently ignored, should
1694              it occur in Framebuffers, as are  other  unused  names.  Once  a
1695              framebuffer  object  is deleted, its name is again unused and it
1696              has no attachments. If a framebuffer that is currently bound  to
1697              one   or   more   of   the   targets   ?GL_DRAW_FRAMEBUFFER   or
1698              ?GL_READ_FRAMEBUFFER is deleted, it is as  though  gl:bindFrame‐
1699              buffer/2  had  been  executed  with the corresponding Target and
1700              Framebuffer zero.
1701
1702              External documentation.
1703
1704       deleteLists(List :: i(), Range :: i()) -> ok
1705
1706              gl:deleteLists/2 causes a contiguous group of display  lists  to
1707              be  deleted.  List  is  the name of the first display list to be
1708              deleted, and Range is the number of display lists to delete. All
1709              display lists d with list<= d<= list+range-1 are deleted.
1710
1711              External documentation.
1712
1713       deleteProgram(Program :: i()) -> ok
1714
1715              gl:deleteProgram/1 frees the memory and invalidates the name as‐
1716              sociated with the program object specified by Program. This com‐
1717              mand  effectively  undoes the effects of a call to gl:createPro‐
1718              gram/0.
1719
1720              External documentation.
1721
1722       deleteProgramPipelines(Pipelines :: [i()]) -> ok
1723
1724              gl:deleteProgramPipelines/1 deletes the N program  pipeline  ob‐
1725              jects  whose  names  are  stored  in the array Pipelines. Unused
1726              names in Pipelines are ignored, as is the  name  zero.  After  a
1727              program pipeline object is deleted, its name is again unused and
1728              it has no contents. If program pipeline object that is currently
1729              bound  is  deleted,  the binding for that object reverts to zero
1730              and no program pipeline object becomes current.
1731
1732              External documentation.
1733
1734       deleteQueries(Ids :: [i()]) -> ok
1735
1736              gl:deleteQueries/1 deletes N query objects named by the elements
1737              of  the  array  Ids.  After a query object is deleted, it has no
1738              contents, and its name is free for reuse (for example by gl:gen‐
1739              Queries/1).
1740
1741              External documentation.
1742
1743       deleteRenderbuffers(Renderbuffers :: [i()]) -> ok
1744
1745              gl:deleteRenderbuffers/1  deletes  the  N  renderbuffer  objects
1746              whose names are stored in the array addressed by  Renderbuffers.
1747              The  name  zero  is  reserved by the GL and is silently ignored,
1748              should it occur in Renderbuffers, as  are  other  unused  names.
1749              Once  a renderbuffer object is deleted, its name is again unused
1750              and it has no contents. If  a  renderbuffer  that  is  currently
1751              bound to the target ?GL_RENDERBUFFER is deleted, it is as though
1752              gl:bindRenderbuffer/2  had  been  executed  with  a  Target   of
1753              ?GL_RENDERBUFFER and a Name of zero.
1754
1755              External documentation.
1756
1757       deleteSamplers(Samplers :: [i()]) -> ok
1758
1759              gl:deleteSamplers/1  deletes N sampler objects named by the ele‐
1760              ments of the array Samplers. After a sampler object is  deleted,
1761              its  name is again unused. If a sampler object that is currently
1762              bound to a sampler unit is deleted, it is as though  gl:bindSam‐
1763              pler/2  is called with unit set to the unit the sampler is bound
1764              to and sampler zero. Unused names in samplers are  silently  ig‐
1765              nored, as is the reserved name zero.
1766
1767              External documentation.
1768
1769       deleteShader(Shader :: i()) -> ok
1770
1771              gl:deleteShader/1  frees the memory and invalidates the name as‐
1772              sociated with the shader object specified by Shader.  This  com‐
1773              mand  effectively  undoes  the  effects  of a call to gl:create‐
1774              Shader/1.
1775
1776              External documentation.
1777
1778       deleteSync(Sync :: i()) -> ok
1779
1780              gl:deleteSync/1 deletes the sync object specified  by  Sync.  If
1781              the fence command corresponding to the specified sync object has
1782              completed, or if no gl:waitSync/3  or  gl:clientWaitSync/3  com‐
1783              mands  are  blocking on Sync, the object is deleted immediately.
1784              Otherwise, Sync is flagged for deletion and will be deleted when
1785              it  is  no  longer  associated  with any fence command and is no
1786              longer blocking any gl:waitSync/3  or  gl:clientWaitSync/3  com‐
1787              mand.  In  either  case, after gl:deleteSync/1 returns, the name
1788              Sync is invalid and can no longer be used to refer to  the  sync
1789              object.
1790
1791              External documentation.
1792
1793       deleteTextures(Textures :: [i()]) -> ok
1794
1795              gl:deleteTextures/1  deletes N textures named by the elements of
1796              the array Textures. After a texture is deleted, it has  no  con‐
1797              tents or dimensionality, and its name is free for reuse (for ex‐
1798              ample by gl:genTextures/1). If a texture that is currently bound
1799              is deleted, the binding reverts to 0 (the default texture).
1800
1801              External documentation.
1802
1803       deleteTransformFeedbacks(Ids :: [i()]) -> ok
1804
1805              gl:deleteTransformFeedbacks/1  deletes  the N transform feedback
1806              objects whose names are stored in the array Ids. Unused names in
1807              Ids are ignored, as is the name zero. After a transform feedback
1808              object is deleted, its name is again unused and it has  no  con‐
1809              tents.  If  an  active transform feedback object is deleted, its
1810              name immediately becomes unused, but the  underlying  object  is
1811              not deleted until it is no longer active.
1812
1813              External documentation.
1814
1815       deleteVertexArrays(Arrays :: [i()]) -> ok
1816
1817              gl:deleteVertexArrays/1  deletes  N  vertex  array objects whose
1818              names are stored in the array addressed by Arrays. Once a vertex
1819              array object is deleted it has no contents and its name is again
1820              unused. If a vertex array object  that  is  currently  bound  is
1821              deleted, the binding for that object reverts to zero and the de‐
1822              fault vertex array becomes current. Unused names in  Arrays  are
1823              silently ignored, as is the value zero.
1824
1825              External documentation.
1826
1827       depthFunc(Func :: enum()) -> ok
1828
1829              gl:depthFunc/1  specifies  the function used to compare each in‐
1830              coming pixel depth value with the depth  value  present  in  the
1831              depth  buffer. The comparison is performed only if depth testing
1832              is   enabled.   (See    gl:enable/1    and    gl:disable/1    of
1833              ?GL_DEPTH_TEST.)
1834
1835              External documentation.
1836
1837       depthMask(Flag :: 0 | 1) -> ok
1838
1839              gl:depthMask/1 specifies whether the depth buffer is enabled for
1840              writing. If Flag is ?GL_FALSE, depth buffer writing is disabled.
1841              Otherwise, it is enabled. Initially, depth buffer writing is en‐
1842              abled.
1843
1844              External documentation.
1845
1846       depthRange(Near_val :: clamp(), Far_val :: clamp()) -> ok
1847
1848       depthRangef(N :: f(), F :: f()) -> ok
1849
1850              After clipping and division by w, depth coordinates  range  from
1851              -1  to  1,  corresponding  to  the near and far clipping planes.
1852              gl:depthRange/2 specifies a linear  mapping  of  the  normalized
1853              depth coordinates in this range to window depth coordinates. Re‐
1854              gardless of the actual depth buffer implementation, window coor‐
1855              dinate  depth  values  are  treated  as though they range from 0
1856              through 1 (like color components). Thus, the values accepted  by
1857              gl:depthRange/2  are  both clamped to this range before they are
1858              accepted.
1859
1860              External documentation.
1861
1862       depthRangeArrayv(First :: i(), V :: [{f(), f()}]) -> ok
1863
1864              After clipping and division by w, depth coordinates  range  from
1865              -1 to 1, corresponding to the near and far clipping planes. Each
1866              viewport has an independent depth range specified  as  a  linear
1867              mapping  of  the  normalized  depth coordinates in this range to
1868              window depth coordinates. Regardless of the actual depth  buffer
1869              implementation,  window  coordinate  depth values are treated as
1870              though they range from 0  through  1  (like  color  components).
1871              gl:depthRangeArray()  specifies  a linear mapping of the normal‐
1872              ized depth coordinates in this range to window depth coordinates
1873              for each viewport in the range [First, First + Count). Thus, the
1874              values accepted by gl:depthRangeArray() are both clamped to this
1875              range before they are accepted.
1876
1877              External documentation.
1878
1879       depthRangeIndexed(Index :: i(), N :: f(), F :: f()) -> ok
1880
1881              After  clipping  and division by w, depth coordinates range from
1882              -1 to 1, corresponding to the near and far clipping planes. Each
1883              viewport  has  an  independent depth range specified as a linear
1884              mapping of the normalized depth coordinates  in  this  range  to
1885              window  depth coordinates. Regardless of the actual depth buffer
1886              implementation, window coordinate depth values  are  treated  as
1887              though  they  range  from  0  through 1 (like color components).
1888              gl:depthRangeIndexed/3 specifies a linear mapping of the normal‐
1889              ized depth coordinates in this range to window depth coordinates
1890              for  a  specified  viewport.  Thus,  the  values   accepted   by
1891              gl:depthRangeIndexed/3  are  both  clamped  to this range before
1892              they are accepted.
1893
1894              External documentation.
1895
1896       detachShader(Program :: i(), Shader :: i()) -> ok
1897
1898              gl:detachShader/2 detaches the shader object specified by Shader
1899              from  the  program object specified by Program. This command can
1900              be used to undo the effect of the command gl:attachShader/2.
1901
1902              External documentation.
1903
1904       dispatchCompute(Num_groups_x :: i(),
1905                       Num_groups_y :: i(),
1906                       Num_groups_z :: i()) ->
1907                          ok
1908
1909              gl:dispatchCompute/3 launches one or more compute  work  groups.
1910              Each  work  group  is processed by the active program object for
1911              the compute shader stage. While the  individual  shader  invoca‐
1912              tions  within  a  work group are executed as a unit, work groups
1913              are executed completely independently and in unspecified  order.
1914              Num_groups_x,  Num_groups_y  and Num_groups_z specify the number
1915              of local work groups that will be dispatched in the X, Y  and  Z
1916              dimensions, respectively.
1917
1918              External documentation.
1919
1920       dispatchComputeIndirect(Indirect :: i()) -> ok
1921
1922              gl:dispatchComputeIndirect/1  launches  one or more compute work
1923              groups using parameters stored in the  buffer  object  currently
1924              bound  to  the  ?GL_DISPATCH_INDIRECT_BUFFER  target.  Each work
1925              group is processed by the active program object for the  compute
1926              shader  stage.  While the individual shader invocations within a
1927              work group are executed as a unit, work groups are executed com‐
1928              pletely  independently  and  in unspecified order. Indirect con‐
1929              tains the offset into the data store of the buffer object  bound
1930              to  the ?GL_DISPATCH_INDIRECT_BUFFER target at which the parame‐
1931              ters are stored.
1932
1933              External documentation.
1934
1935       drawArrays(Mode :: enum(), First :: i(), Count :: i()) -> ok
1936
1937              gl:drawArrays/3 specifies  multiple  geometric  primitives  with
1938              very  few subroutine calls. Instead of calling a GL procedure to
1939              pass each individual vertex, normal,  texture  coordinate,  edge
1940              flag,  or color, you can prespecify separate arrays of vertices,
1941              normals, and colors and use them  to  construct  a  sequence  of
1942              primitives with a single call to gl:drawArrays/3.
1943
1944              External documentation.
1945
1946       drawArraysIndirect(Mode :: enum(), Indirect :: offset() | mem()) ->
1947                             ok
1948
1949              gl:drawArraysIndirect/2  specifies multiple geometric primitives
1950              with very few subroutine calls. gl:drawArraysIndirect/2  behaves
1951              similarly  to gl:drawArraysInstancedBaseInstance/5, execept that
1952              the  parameters  to   gl:drawArraysInstancedBaseInstance/5   are
1953              stored in memory at the address given by Indirect.
1954
1955              External documentation.
1956
1957       drawArraysInstanced(Mode :: enum(),
1958                           First :: i(),
1959                           Count :: i(),
1960                           Instancecount :: i()) ->
1961                              ok
1962
1963              gl:drawArraysInstanced/4  behaves identically to gl:drawArrays/3
1964              except that Instancecount instances of the range of elements are
1965              executed  and  the  value of the internal counter InstanceID ad‐
1966              vances for each iteration. InstanceID is an internal 32-bit  in‐
1967              teger counter that may be read by a vertex shader as ?gl_Instan‐
1968              ceID.
1969
1970              External documentation.
1971
1972       drawArraysInstancedBaseInstance(Mode :: enum(),
1973                                       First :: i(),
1974                                       Count :: i(),
1975                                       Instancecount :: i(),
1976                                       Baseinstance :: i()) ->
1977                                          ok
1978
1979              gl:drawArraysInstancedBaseInstance/5  behaves   identically   to
1980              gl:drawArrays/3 except that Instancecount instances of the range
1981              of elements are executed and the value of the  internal  counter
1982              InstanceID  advances for each iteration. InstanceID is an inter‐
1983              nal 32-bit integer counter that may be read by a  vertex  shader
1984              as ?gl_InstanceID.
1985
1986              External documentation.
1987
1988       drawBuffer(Mode :: enum()) -> ok
1989
1990              When  colors  are  written to the frame buffer, they are written
1991              into the color buffers specified by gl:drawBuffer/1. One of  the
1992              following values can be used for default framebuffer:
1993
1994              External documentation.
1995
1996       drawBuffers(Bufs :: [enum()]) -> ok
1997
1998              gl:drawBuffers/1 and glNamedFramebufferDrawBuffers define an ar‐
1999              ray of buffers into which outputs from the fragment shader  data
2000              will  be  written. If a fragment shader writes a value to one or
2001              more user defined output variables, then the value of each vari‐
2002              able  will  be  written  into the buffer specified at a location
2003              within Bufs corresponding to the location assigned to that  user
2004              defined  output.  The  draw buffer used for user defined outputs
2005              assigned to locations greater than or equal to N  is  implicitly
2006              set  to  ?GL_NONE and any data written to such an output is dis‐
2007              carded.
2008
2009              External documentation.
2010
2011       drawElements(Mode :: enum(),
2012                    Count :: i(),
2013                    Type :: enum(),
2014                    Indices :: offset() | mem()) ->
2015                       ok
2016
2017              gl:drawElements/4 specifies multiple geometric  primitives  with
2018              very  few  subroutine calls. Instead of calling a GL function to
2019              pass each individual vertex, normal,  texture  coordinate,  edge
2020              flag,  or color, you can prespecify separate arrays of vertices,
2021              normals, and so on, and use them  to  construct  a  sequence  of
2022              primitives with a single call to gl:drawElements/4.
2023
2024              External documentation.
2025
2026       drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) ->
2027                                 ok
2028
2029              Types:
2030
2031                 Mode = enum()
2032                 Count = i()
2033                 Type = enum()
2034                 Indices = offset() | mem()
2035                 Basevertex = i()
2036
2037              gl:drawElementsBaseVertex/5  behaves  identically to gl:drawEle‐
2038              ments/4 except that the ith element transferred  by  the  corre‐
2039              sponding  draw  call will be taken from element Indices[i] + Ba‐
2040              severtex of each enabled array. If the resulting value is larger
2041              than  the  maximum  value representable by Type, it is as if the
2042              calculation were upconverted to 32-bit unsigned  integers  (with
2043              wrapping  on overflow conditions). The operation is undefined if
2044              the sum would be negative.
2045
2046              External documentation.
2047
2048       drawElementsIndirect(Mode :: enum(),
2049                            Type :: enum(),
2050                            Indirect :: offset() | mem()) ->
2051                               ok
2052
2053              gl:drawElementsIndirect/3 specifies multiple  indexed  geometric
2054              primitives  with very few subroutine calls. gl:drawElementsIndi‐
2055              rect/3  behaves  similarly  to  gl:drawElementsInstancedBaseVer‐
2056              texBaseInstance/7,  execpt  that  the  parameters to gl:drawEle‐
2057              mentsInstancedBaseVertexBaseInstance/7 are stored in  memory  at
2058              the address given by Indirect.
2059
2060              External documentation.
2061
2062       drawElementsInstanced(Mode, Count, Type, Indices, Instancecount) ->
2063                                ok
2064
2065              Types:
2066
2067                 Mode = enum()
2068                 Count = i()
2069                 Type = enum()
2070                 Indices = offset() | mem()
2071                 Instancecount = i()
2072
2073              gl:drawElementsInstanced/5  behaves  identically  to gl:drawEle‐
2074              ments/4 except that Instancecount instances of the set  of  ele‐
2075              ments are executed and the value of the internal counter Instan‐
2076              ceID advances for each  iteration.  InstanceID  is  an  internal
2077              32-bit  integer  counter  that may be read by a vertex shader as
2078              ?gl_InstanceID.
2079
2080              External documentation.
2081
2082       drawElementsInstancedBaseInstance(Mode, Count, Type, Indices,
2083                                         Instancecount, Baseinstance) ->
2084                                            ok
2085
2086              Types:
2087
2088                 Mode = enum()
2089                 Count = i()
2090                 Type = enum()
2091                 Indices = offset() | mem()
2092                 Instancecount = Baseinstance = i()
2093
2094              gl:drawElementsInstancedBaseInstance/6  behaves  identically  to
2095              gl:drawElements/4 except that Instancecount instances of the set
2096              of elements are executed and the value of the  internal  counter
2097              InstanceID  advances for each iteration. InstanceID is an inter‐
2098              nal 32-bit integer counter that may be read by a  vertex  shader
2099              as ?gl_InstanceID.
2100
2101              External documentation.
2102
2103       drawElementsInstancedBaseVertex(Mode, Count, Type, Indices,
2104                                       Instancecount, Basevertex) ->
2105                                          ok
2106
2107              Types:
2108
2109                 Mode = enum()
2110                 Count = i()
2111                 Type = enum()
2112                 Indices = offset() | mem()
2113                 Instancecount = Basevertex = i()
2114
2115              gl:drawElementsInstancedBaseVertex/6   behaves   identically  to
2116              gl:drawElementsInstanced/5 except that the  ith  element  trans‐
2117              ferred by the corresponding draw call will be taken from element
2118              Indices[i] + Basevertex of each enabled array. If the  resulting
2119              value is larger than the maximum value representable by Type, it
2120              is as if the calculation were upconverted to 32-bit unsigned in‐
2121              tegers  (with wrapping on overflow conditions). The operation is
2122              undefined if the sum would be negative.
2123
2124              External documentation.
2125
2126       drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type,
2127                                                   Indices,
2128                                                   Instancecount,
2129                                                   Basevertex,
2130                                                   Baseinstance) ->
2131                                                      ok
2132
2133              Types:
2134
2135                 Mode = enum()
2136                 Count = i()
2137                 Type = enum()
2138                 Indices = offset() | mem()
2139                 Instancecount = Basevertex = Baseinstance = i()
2140
2141              gl:drawElementsInstancedBaseVertexBaseInstance/7 behaves identi‐
2142              cally  to gl:drawElementsInstanced/5 except that the ith element
2143              transferred by the corresponding draw call will  be  taken  from
2144              element  Indices[i]  +  Basevertex of each enabled array. If the
2145              resulting value is larger than the maximum  value  representable
2146              by  Type, it is as if the calculation were upconverted to 32-bit
2147              unsigned integers (with wrapping on  overflow  conditions).  The
2148              operation is undefined if the sum would be negative.
2149
2150              External documentation.
2151
2152       drawPixels(Width :: i(),
2153                  Height :: i(),
2154                  Format :: enum(),
2155                  Type :: enum(),
2156                  Pixels :: offset() | mem()) ->
2157                     ok
2158
2159              gl:drawPixels/5  reads pixel data from memory and writes it into
2160              the frame buffer relative to the current raster  position,  pro‐
2161              vided  that  the raster position is valid. Use gl:rasterPos() or
2162              gl:windowPos() to set the current raster position; use  gl:get()
2163              with  argument ?GL_CURRENT_RASTER_POSITION_VALID to determine if
2164              the specified raster position is valid, and gl:get() with  argu‐
2165              ment ?GL_CURRENT_RASTER_POSITION to query the raster position.
2166
2167              External documentation.
2168
2169       drawRangeElements(Mode, Start, End, Count, Type, Indices) -> ok
2170
2171              Types:
2172
2173                 Mode = enum()
2174                 Start = End = Count = i()
2175                 Type = enum()
2176                 Indices = offset() | mem()
2177
2178              gl:drawRangeElements/6  is  a  restricted  form  of  gl:drawEle‐
2179              ments/4. Mode, and Count match the  corresponding  arguments  to
2180              gl:drawElements/4,  with the additional constraint that all val‐
2181              ues in the arrays Count must lie between Start and  End,  inclu‐
2182              sive.
2183
2184              External documentation.
2185
2186       drawRangeElementsBaseVertex(Mode, Start, End, Count, Type,
2187                                   Indices, Basevertex) ->
2188                                      ok
2189
2190              Types:
2191
2192                 Mode = enum()
2193                 Start = End = Count = i()
2194                 Type = enum()
2195                 Indices = offset() | mem()
2196                 Basevertex = i()
2197
2198              gl:drawRangeElementsBaseVertex/7   is   a   restricted  form  of
2199              gl:drawElementsBaseVertex/5. Mode, Count  and  Basevertex  match
2200              the corresponding arguments to gl:drawElementsBaseVertex/5, with
2201              the additional constraint that all values in the  array  Indices
2202              must  lie  between Start and End, inclusive, prior to adding Ba‐
2203              severtex. Index values lying outside the range [Start, End]  are
2204              treated  in the same way as gl:drawElementsBaseVertex/5. The ith
2205              element transferred by the corresponding draw call will be taken
2206              from  element  Indices[i] + Basevertex of each enabled array. If
2207              the resulting value is larger  than  the  maximum  value  repre‐
2208              sentable  by  Type, it is as if the calculation were upconverted
2209              to 32-bit unsigned integers (with wrapping  on  overflow  condi‐
2210              tions). The operation is undefined if the sum would be negative.
2211
2212              External documentation.
2213
2214       drawTransformFeedback(Mode :: enum(), Id :: i()) -> ok
2215
2216              gl:drawTransformFeedback/2  draws primitives of a type specified
2217              by Mode using a count  retrieved  from  the  transform  feedback
2218              specified  by  Id. Calling gl:drawTransformFeedback/2 is equiva‐
2219              lent to calling gl:drawArrays/3 with Mode  as  specified,  First
2220              set to zero, and Count set to the number of vertices captured on
2221              vertex stream zero the last time transform feedback  was  active
2222              on the transform feedback object named by Id.
2223
2224              External documentation.
2225
2226       drawTransformFeedbackInstanced(Mode :: enum(),
2227                                      Id :: i(),
2228                                      Instancecount :: i()) ->
2229                                         ok
2230
2231              gl:drawTransformFeedbackInstanced/3  draws  multiple copies of a
2232              range of primitives of a type specified by Mode  using  a  count
2233              retrieved from the transform feedback stream specified by Stream
2234              of the  transform  feedback  object  specified  by  Id.  Calling
2235              gl:drawTransformFeedbackInstanced/3  is  equivalent  to  calling
2236              gl:drawArraysInstanced/4 with Mode and Instancecount  as  speci‐
2237              fied, First set to zero, and Count set to the number of vertices
2238              captured on vertex stream zero the last time transform  feedback
2239              was active on the transform feedback object named by Id.
2240
2241              External documentation.
2242
2243       drawTransformFeedbackStream(Mode :: enum(),
2244                                   Id :: i(),
2245                                   Stream :: i()) ->
2246                                      ok
2247
2248              gl:drawTransformFeedbackStream/3  draws  primitives  of  a  type
2249              specified by Mode using a count  retrieved  from  the  transform
2250              feedback  stream  specified  by Stream of the transform feedback
2251              object specified by Id. Calling gl:drawTransformFeedbackStream/3
2252              is equivalent to calling gl:drawArrays/3 with Mode as specified,
2253              First set to zero, and Count set to the number of vertices  cap‐
2254              tured  on  vertex stream Stream the last time transform feedback
2255              was active on the transform feedback object named by Id.
2256
2257              External documentation.
2258
2259       drawTransformFeedbackStreamInstanced(Mode :: enum(),
2260                                            Id :: i(),
2261                                            Stream :: i(),
2262                                            Instancecount :: i()) ->
2263                                               ok
2264
2265              gl:drawTransformFeedbackStreamInstanced/4 draws multiple  copies
2266              of  a  range  of  primitives of a type specified by Mode using a
2267              count retrieved from the transform feedback stream specified  by
2268              Stream of the transform feedback object specified by Id. Calling
2269              gl:drawTransformFeedbackStreamInstanced/4 is equivalent to call‐
2270              ing  gl:drawArraysInstanced/4  with  Mode  and  Instancecount as
2271              specified, First set to zero, and Count set  to  the  number  of
2272              vertices  captured  on vertex stream Stream the last time trans‐
2273              form feedback was active on the transform feedback object  named
2274              by Id.
2275
2276              External documentation.
2277
2278       edgeFlag(Flag :: 0 | 1) -> ok
2279
2280       edgeFlagv(X1 :: {Flag :: 0 | 1}) -> ok
2281
2282              Each vertex of a polygon, separate triangle, or separate quadri‐
2283              lateral specified  between  a  gl:'begin'/1/gl:'end'/0  pair  is
2284              marked as the start of either a boundary or nonboundary edge. If
2285              the current edge flag is true when the vertex is specified,  the
2286              vertex is marked as the start of a boundary edge. Otherwise, the
2287              vertex is marked as the start of a  nonboundary  edge.  gl:edge‐
2288              Flag/1  sets  the  edge flag bit to ?GL_TRUE if Flag is ?GL_TRUE
2289              and to ?GL_FALSE otherwise.
2290
2291              External documentation.
2292
2293       edgeFlagPointer(Stride :: i(), Ptr :: offset() | mem()) -> ok
2294
2295              gl:edgeFlagPointer/2 specifies the location and data  format  of
2296              an  array  of  boolean  edge flags to use when rendering. Stride
2297              specifies the byte stride from one edge flag to the next, allow‐
2298              ing  vertices and attributes to be packed into a single array or
2299              stored in separate arrays.
2300
2301              External documentation.
2302
2303       disable(Cap :: enum()) -> ok
2304
2305       disablei(Target :: enum(), Index :: i()) -> ok
2306
2307       enable(Cap :: enum()) -> ok
2308
2309       enablei(Target :: enum(), Index :: i()) -> ok
2310
2311              gl:enable/1 and gl:disable/1 enable and disable various capabil‐
2312              ities.  Use  gl:isEnabled/1 or gl:get() to determine the current
2313              setting of any capability. The initial value for each capability
2314              with   the   exception  of  ?GL_DITHER  and  ?GL_MULTISAMPLE  is
2315              ?GL_FALSE. The initial value for ?GL_DITHER and  ?GL_MULTISAMPLE
2316              is ?GL_TRUE.
2317
2318              External documentation.
2319
2320       disableClientState(Cap :: enum()) -> ok
2321
2322       enableClientState(Cap :: enum()) -> ok
2323
2324              gl:enableClientState/1  and  gl:disableClientState/1  enable  or
2325              disable individual client-side  capabilities.  By  default,  all
2326              client-side   capabilities   are   disabled.   Both   gl:enable‐
2327              ClientState/1 and gl:disableClientState/1 take  a  single  argu‐
2328              ment, Cap, which can assume one of the following values:
2329
2330              External documentation.
2331
2332       disableVertexArrayAttrib(Vaobj :: i(), Index :: i()) -> ok
2333
2334       disableVertexAttribArray(Index :: i()) -> ok
2335
2336       enableVertexArrayAttrib(Vaobj :: i(), Index :: i()) -> ok
2337
2338       enableVertexAttribArray(Index :: i()) -> ok
2339
2340              gl:enableVertexAttribArray/1   and  gl:enableVertexArrayAttrib/2
2341              enable the generic vertex attribute array  specified  by  Index.
2342              gl:enableVertexAttribArray/1  uses  currently bound vertex array
2343              object for the operation,  whereas  gl:enableVertexArrayAttrib/2
2344              updates state of the vertex array object with ID Vaobj.
2345
2346              External documentation.
2347
2348       evalCoord1d(U :: f()) -> ok
2349
2350       evalCoord1dv(X1 :: {U :: f()}) -> ok
2351
2352       evalCoord1f(U :: f()) -> ok
2353
2354       evalCoord1fv(X1 :: {U :: f()}) -> ok
2355
2356       evalCoord2d(U :: f(), V :: f()) -> ok
2357
2358       evalCoord2dv(X1 :: {U :: f(), V :: f()}) -> ok
2359
2360       evalCoord2f(U :: f(), V :: f()) -> ok
2361
2362       evalCoord2fv(X1 :: {U :: f(), V :: f()}) -> ok
2363
2364              gl:evalCoord1()  evaluates enabled one-dimensional maps at argu‐
2365              ment U. gl:evalCoord2() does the same for  two-dimensional  maps
2366              using  two  domain values, U and V. To define a map, call glMap1
2367              and glMap2; to enable  and  disable  it,  call  gl:enable/1  and
2368              gl:disable/1.
2369
2370              External documentation.
2371
2372       evalMesh1(Mode :: enum(), I1 :: i(), I2 :: i()) -> ok
2373
2374       evalMesh2(Mode :: enum(),
2375                 I1 :: i(),
2376                 I2 :: i(),
2377                 J1 :: i(),
2378                 J2 :: i()) ->
2379                    ok
2380
2381              gl:mapGrid() and gl:evalMesh() are used in tandem to efficiently
2382              generate and evaluate a series of evenly-spaced map domain  val‐
2383              ues. gl:evalMesh() steps through the integer domain of a one- or
2384              two-dimensional grid, whose range is the domain of  the  evalua‐
2385              tion  maps  specified  by  glMap1  and  glMap2.  Mode determines
2386              whether the resulting vertices are connected as  points,  lines,
2387              or filled polygons.
2388
2389              External documentation.
2390
2391       evalPoint1(I :: i()) -> ok
2392
2393       evalPoint2(I :: i(), J :: i()) -> ok
2394
2395              gl:mapGrid() and gl:evalMesh() are used in tandem to efficiently
2396              generate and evaluate a series of evenly spaced map domain  val‐
2397              ues.  gl:evalPoint() can be used to evaluate a single grid point
2398              in the same gridspace that is traversed by gl:evalMesh().  Call‐
2399              ing  gl:evalPoint1/1  is equivalent to calling glEvalCoord1( i.ð
2400              u+u 1 ); where ð u=(u 2-u 1)/n
2401
2402              External documentation.
2403
2404       feedbackBuffer(Size :: i(), Type :: enum(), Buffer :: mem()) -> ok
2405
2406              The gl:feedbackBuffer/3 function  controls  feedback.  Feedback,
2407              like  selection,  is  a GL mode. The mode is selected by calling
2408              gl:renderMode/1 with ?GL_FEEDBACK. When the GL  is  in  feedback
2409              mode, no pixels are produced by rasterization. Instead, informa‐
2410              tion about primitives that would have  been  rasterized  is  fed
2411              back to the application using the GL.
2412
2413              External documentation.
2414
2415       fenceSync(Condition :: enum(), Flags :: i()) -> i()
2416
2417              gl:fenceSync/2  creates a new fence sync object, inserts a fence
2418              command into the GL command stream and associates it  with  that
2419              sync  object,  and  returns a non-zero name corresponding to the
2420              sync object.
2421
2422              External documentation.
2423
2424       finish() -> ok
2425
2426              gl:finish/0 does not return until the effects of all  previously
2427              called  GL  commands  are  complete.  Such  effects  include all
2428              changes to GL state, all changes to connection  state,  and  all
2429              changes to the frame buffer contents.
2430
2431              External documentation.
2432
2433       flush() -> ok
2434
2435              Different  GL implementations buffer commands in several differ‐
2436              ent locations, including network buffers and the graphics accel‐
2437              erator  itself. gl:flush/0 empties all of these buffers, causing
2438              all issued commands to be executed as quickly as  they  are  ac‐
2439              cepted by the actual rendering engine. Though this execution may
2440              not be completed in any particular time period, it does complete
2441              in finite time.
2442
2443              External documentation.
2444
2445       flushMappedBufferRange(Target :: enum(),
2446                              Offset :: i(),
2447                              Length :: i()) ->
2448                                 ok
2449
2450       flushMappedNamedBufferRange(Buffer :: i(),
2451                                   Offset :: i(),
2452                                   Length :: i()) ->
2453                                      ok
2454
2455              gl:flushMappedBufferRange/3  indicates  that  modifications have
2456              been made to a range of a mapped buffer object. The  buffer  ob‐
2457              ject must previously have been mapped with the ?GL_MAP_FLUSH_EX‐
2458              PLICIT_BIT flag.
2459
2460              External documentation.
2461
2462       fogf(Pname :: enum(), Param :: f()) -> ok
2463
2464       fogfv(Pname :: enum(), Params :: tuple()) -> ok
2465
2466       fogi(Pname :: enum(), Param :: i()) -> ok
2467
2468       fogiv(Pname :: enum(), Params :: tuple()) -> ok
2469
2470              Fog is initially disabled. While enabled, fog affects rasterized
2471              geometry, bitmaps, and pixel blocks, but not buffer clear opera‐
2472              tions. To enable and disable fog, call gl:enable/1  and  gl:dis‐
2473              able/1 with argument ?GL_FOG.
2474
2475              External documentation.
2476
2477       fogCoordd(Coord :: f()) -> ok
2478
2479       fogCoorddv(X1 :: {Coord :: f()}) -> ok
2480
2481       fogCoordf(Coord :: f()) -> ok
2482
2483       fogCoordfv(X1 :: {Coord :: f()}) -> ok
2484
2485              gl:fogCoord()  specifies  the  fog coordinate that is associated
2486              with each vertex and the  current  raster  position.  The  value
2487              specified  is  interpolated  and used in computing the fog color
2488              (see gl:fog()).
2489
2490              External documentation.
2491
2492       fogCoordPointer(Type :: enum(),
2493                       Stride :: i(),
2494                       Pointer :: offset() | mem()) ->
2495                          ok
2496
2497              gl:fogCoordPointer/3 specifies the location and data  format  of
2498              an  array  of fog coordinates to use when rendering. Type speci‐
2499              fies the data type of each fog coordinate, and Stride  specifies
2500              the  byte  stride  from one fog coordinate to the next, allowing
2501              vertices and attributes to be packed  into  a  single  array  or
2502              stored in separate arrays.
2503
2504              External documentation.
2505
2506       framebufferParameteri(Target :: enum(),
2507                             Pname :: enum(),
2508                             Param :: i()) ->
2509                                ok
2510
2511              gl:framebufferParameteri/3 and glNamedFramebufferParameteri mod‐
2512              ify the value of the parameter  named  Pname  in  the  specified
2513              framebuffer  object.  There  are no modifiable parameters of the
2514              default draw and read framebuffer, so they are not valid targets
2515              of these commands.
2516
2517              External documentation.
2518
2519       framebufferRenderbuffer(Target, Attachment, Renderbuffertarget,
2520                               Renderbuffer) ->
2521                                  ok
2522
2523              Types:
2524
2525                 Target = Attachment = Renderbuffertarget = enum()
2526                 Renderbuffer = i()
2527
2528              gl:framebufferRenderbuffer/4  and glNamedFramebufferRenderbuffer
2529              attaches a renderbuffer as one of the  logical  buffers  of  the
2530              specified  framebuffer  object. Renderbuffers cannot be attached
2531              to the default draw and read framebuffer, so they are not  valid
2532              targets of these commands.
2533
2534              External documentation.
2535
2536       framebufferTexture(Target :: enum(),
2537                          Attachment :: enum(),
2538                          Texture :: i(),
2539                          Level :: i()) ->
2540                             ok
2541
2542       framebufferTexture1D(Target :: enum(),
2543                            Attachment :: enum(),
2544                            Textarget :: enum(),
2545                            Texture :: i(),
2546                            Level :: i()) ->
2547                               ok
2548
2549       framebufferTexture2D(Target :: enum(),
2550                            Attachment :: enum(),
2551                            Textarget :: enum(),
2552                            Texture :: i(),
2553                            Level :: i()) ->
2554                               ok
2555
2556       framebufferTexture3D(Target, Attachment, Textarget, Texture,
2557                            Level, Zoffset) ->
2558                               ok
2559
2560       framebufferTextureFaceARB(Target :: enum(),
2561                                 Attachment :: enum(),
2562                                 Texture :: i(),
2563                                 Level :: i(),
2564                                 Face :: enum()) ->
2565                                    ok
2566
2567       framebufferTextureLayer(Target :: enum(),
2568                               Attachment :: enum(),
2569                               Texture :: i(),
2570                               Level :: i(),
2571                               Layer :: i()) ->
2572                                  ok
2573
2574              These commands attach a selected mipmap level or image of a tex‐
2575              ture object as one of  the  logical  buffers  of  the  specified
2576              framebuffer  object.  Textures cannot be attached to the default
2577              draw and read framebuffer, so they  are  not  valid  targets  of
2578              these commands.
2579
2580              External documentation.
2581
2582       frontFace(Mode :: enum()) -> ok
2583
2584              In  a  scene  composed entirely of opaque closed surfaces, back-
2585              facing polygons are never visible. Eliminating  these  invisible
2586              polygons has the obvious benefit of speeding up the rendering of
2587              the image. To enable  and  disable  elimination  of  back-facing
2588              polygons,   call  gl:enable/1  and  gl:disable/1  with  argument
2589              ?GL_CULL_FACE.
2590
2591              External documentation.
2592
2593       frustum(Left :: f(),
2594               Right :: f(),
2595               Bottom :: f(),
2596               Top :: f(),
2597               Near_val :: f(),
2598               Far_val :: f()) ->
2599                  ok
2600
2601              gl:frustum/6 describes a perspective matrix that produces a per‐
2602              spective projection. The current matrix (see gl:matrixMode/1) is
2603              multiplied by this matrix and the result  replaces  the  current
2604              matrix, as if gl:multMatrix() were called with the following ma‐
2605              trix as its argument:
2606
2607              External documentation.
2608
2609       genBuffers(N :: i()) -> [i()]
2610
2611              gl:genBuffers/1 returns N buffer object names in Buffers.  There
2612              is  no  guarantee  that the names form a contiguous set of inte‐
2613              gers; however, it is guaranteed that none of the returned  names
2614              was in use immediately before the call to gl:genBuffers/1.
2615
2616              External documentation.
2617
2618       genFramebuffers(N :: i()) -> [i()]
2619
2620              gl:genFramebuffers/1  returns N framebuffer object names in Ids.
2621              There is no guarantee that the names form a  contiguous  set  of
2622              integers;  however,  it  is guaranteed that none of the returned
2623              names was in use immediately before  the  call  to  gl:genFrame‐
2624              buffers/1.
2625
2626              External documentation.
2627
2628       genLists(Range :: i()) -> i()
2629
2630              gl:genLists/1  has  one argument, Range. It returns an integer n
2631              such that Range contiguous empty display lists,  named  n,  n+1,
2632              ..., n+range-1, are created. If Range is 0, if there is no group
2633              of Range contiguous names available, or if any error  is  gener‐
2634              ated, no display lists are generated, and 0 is returned.
2635
2636              External documentation.
2637
2638       genProgramPipelines(N :: i()) -> [i()]
2639
2640              gl:genProgramPipelines/1  returns  N  previously  unused program
2641              pipeline object names in Pipelines. These names  are  marked  as
2642              used,  for  the  purposes  of gl:genProgramPipelines/1 only, but
2643              they acquire program pipeline state only  when  they  are  first
2644              bound.
2645
2646              External documentation.
2647
2648       genQueries(N :: i()) -> [i()]
2649
2650              gl:genQueries/1 returns N query object names in Ids. There is no
2651              guarantee that the names form a contiguous set of integers; how‐
2652              ever,  it  is  guaranteed that none of the returned names was in
2653              use immediately before the call to gl:genQueries/1.
2654
2655              External documentation.
2656
2657       genRenderbuffers(N :: i()) -> [i()]
2658
2659              gl:genRenderbuffers/1 returns N  renderbuffer  object  names  in
2660              Renderbuffers.  There is no guarantee that the names form a con‐
2661              tiguous set of integers; however, it is guaranteed that none  of
2662              the  returned  names  was  in use immediately before the call to
2663              gl:genRenderbuffers/1.
2664
2665              External documentation.
2666
2667       genSamplers(Count :: i()) -> [i()]
2668
2669              gl:genSamplers/1 returns N sampler  object  names  in  Samplers.
2670              There  is  no  guarantee that the names form a contiguous set of
2671              integers; however, it is guaranteed that none  of  the  returned
2672              names  was  in  use  immediately  before  the call to gl:genSam‐
2673              plers/1.
2674
2675              External documentation.
2676
2677       genTextures(N :: i()) -> [i()]
2678
2679              gl:genTextures/1 returns N texture names in Textures.  There  is
2680              no  guarantee  that the names form a contiguous set of integers;
2681              however, it is guaranteed that none of the returned names was in
2682              use immediately before the call to gl:genTextures/1.
2683
2684              External documentation.
2685
2686       genTransformFeedbacks(N :: i()) -> [i()]
2687
2688              gl:genTransformFeedbacks/1 returns N previously unused transform
2689              feedback object names in Ids. These names are  marked  as  used,
2690              for  the  purposes  of gl:genTransformFeedbacks/1 only, but they
2691              acquire transform feedback state only when they are first bound.
2692
2693              External documentation.
2694
2695       genVertexArrays(N :: i()) -> [i()]
2696
2697              gl:genVertexArrays/1 returns N vertex array object names in  Ar‐
2698              rays. There is no guarantee that the names form a contiguous set
2699              of integers; however, it is guaranteed that none of the returned
2700              names  was in use immediately before the call to gl:genVertexAr‐
2701              rays/1.
2702
2703              External documentation.
2704
2705       generateMipmap(Target :: enum()) -> ok
2706
2707       generateTextureMipmap(Texture :: i()) -> ok
2708
2709              gl:generateMipmap/1  and  gl:generateTextureMipmap/1   generates
2710              mipmaps   for   the  specified  texture  object.  For  gl:gener‐
2711              ateMipmap/1, the texture object that is  bound  to  Target.  For
2712              gl:generateTextureMipmap/1,  Texture  is the name of the texture
2713              object.
2714
2715              External documentation.
2716
2717       getBooleani_v(Target :: enum(), Index :: i()) -> [0 | 1]
2718
2719       getBooleanv(Pname :: enum()) -> [0 | 1]
2720
2721       getDoublei_v(Target :: enum(), Index :: i()) -> [f()]
2722
2723       getDoublev(Pname :: enum()) -> [f()]
2724
2725       getFloati_v(Target :: enum(), Index :: i()) -> [f()]
2726
2727       getFloatv(Pname :: enum()) -> [f()]
2728
2729       getInteger64i_v(Target :: enum(), Index :: i()) -> [i()]
2730
2731       getInteger64v(Pname :: enum()) -> [i()]
2732
2733       getIntegeri_v(Target :: enum(), Index :: i()) -> [i()]
2734
2735       getIntegerv(Pname :: enum()) -> [i()]
2736
2737              These commands return values for simple state variables  in  GL.
2738              Pname is a symbolic constant indicating the state variable to be
2739              returned, and Data is a pointer to an  array  of  the  indicated
2740              type in which to place the returned data.
2741
2742              External documentation.
2743
2744       getActiveAttrib(Program :: i(), Index :: i(), BufSize :: i()) ->
2745                          {Size :: i(), Type :: enum(), Name :: string()}
2746
2747              gl:getActiveAttrib/3  returns information about an active attri‐
2748              bute variable in the program object specified  by  Program.  The
2749              number  of  active attributes can be obtained by calling gl:get‐
2750              Program() with the value ?GL_ACTIVE_ATTRIBUTES. A value of 0 for
2751              Index  selects  the first active attribute variable. Permissible
2752              values for Index range from zero to the number of active  attri‐
2753              bute variables minus one.
2754
2755              External documentation.
2756
2757       getActiveSubroutineName(Program :: i(),
2758                               Shadertype :: enum(),
2759                               Index :: i(),
2760                               Bufsize :: i()) ->
2761                                  string()
2762
2763              gl:getActiveSubroutineName/4  queries  the  name  of  an  active
2764              shader subroutine uniform from the program object given in  Pro‐
2765              gram. Index specifies the index of the shader subroutine uniform
2766              within the shader stage given by Stage, and  must  between  zero
2767              and the value of ?GL_ACTIVE_SUBROUTINES minus one for the shader
2768              stage.
2769
2770              External documentation.
2771
2772       getActiveSubroutineUniformName(Program :: i(),
2773                                      Shadertype :: enum(),
2774                                      Index :: i(),
2775                                      Bufsize :: i()) ->
2776                                         string()
2777
2778              gl:getActiveSubroutineUniformName/4 retrieves the name of an ac‐
2779              tive shader subroutine uniform. Program contains the name of the
2780              program containing the uniform. Shadertype specifies  the  stage
2781              for  which the uniform location, given by Index, is valid. Index
2782              must be between zero and the value of ?GL_ACTIVE_SUBROUTINE_UNI‐
2783              FORMS minus one for the shader stage.
2784
2785              External documentation.
2786
2787       getActiveUniform(Program :: i(), Index :: i(), BufSize :: i()) ->
2788                           {Size :: i(),
2789                            Type :: enum(),
2790                            Name :: string()}
2791
2792              gl:getActiveUniform/3  returns  information about an active uni‐
2793              form variable in the program object specified  by  Program.  The
2794              number  of  active  uniform variables can be obtained by calling
2795              gl:getProgram() with the value ?GL_ACTIVE_UNIFORMS. A value of 0
2796              for Index selects the first active uniform variable. Permissible
2797              values for Index range from zero to the number of active uniform
2798              variables minus one.
2799
2800              External documentation.
2801
2802       getActiveUniformBlockiv(Program :: i(),
2803                               UniformBlockIndex :: i(),
2804                               Pname :: enum(),
2805                               Params :: mem()) ->
2806                                  ok
2807
2808              gl:getActiveUniformBlockiv/4  retrieves information about an ac‐
2809              tive uniform block within Program.
2810
2811              External documentation.
2812
2813       getActiveUniformBlockName(Program :: i(),
2814                                 UniformBlockIndex :: i(),
2815                                 BufSize :: i()) ->
2816                                    string()
2817
2818              gl:getActiveUniformBlockName/3 retrieves the name of the  active
2819              uniform block at UniformBlockIndex within Program.
2820
2821              External documentation.
2822
2823       getActiveUniformName(Program :: i(),
2824                            UniformIndex :: i(),
2825                            BufSize :: i()) ->
2826                               string()
2827
2828              gl:getActiveUniformName/3 returns the name of the active uniform
2829              at UniformIndex within Program. If UniformName is not  NULL,  up
2830              to BufSize characters (including a nul-terminator) will be writ‐
2831              ten into the array whose address is specified by UniformName. If
2832              Length is not NULL, the number of characters that were (or would
2833              have been) written into UniformName (not including the  nul-ter‐
2834              minator)  will be placed in the variable whose address is speci‐
2835              fied in Length. If Length is NULL, no length  is  returned.  The
2836              length  of  the  longest uniform name in Program is given by the
2837              value of ?GL_ACTIVE_UNIFORM_MAX_LENGTH,  which  can  be  queried
2838              with gl:getProgram().
2839
2840              External documentation.
2841
2842       getActiveUniformsiv(Program :: i(),
2843                           UniformIndices :: [i()],
2844                           Pname :: enum()) ->
2845                              [i()]
2846
2847              gl:getActiveUniformsiv/3  queries  the  value  of  the parameter
2848              named Pname for each of the uniforms within  Program  whose  in‐
2849              dices  are specified in the array of UniformCount unsigned inte‐
2850              gers UniformIndices. Upon success, the value  of  the  parameter
2851              for  each uniform is written into the corresponding entry in the
2852              array whose address is given in Params. If an  error  is  gener‐
2853              ated, nothing is written into Params.
2854
2855              External documentation.
2856
2857       getAttachedShaders(Program :: i(), MaxCount :: i()) -> [i()]
2858
2859              gl:getAttachedShaders/2  returns the names of the shader objects
2860              attached to Program. The names of shader objects  that  are  at‐
2861              tached to Program will be returned in Shaders. The actual number
2862              of shader names written into Shaders is returned in Count. If no
2863              shader  objects  are attached to Program, Count is set to 0. The
2864              maximum number of shader names that may be returned  in  Shaders
2865              is specified by MaxCount.
2866
2867              External documentation.
2868
2869       getAttribLocation(Program :: i(), Name :: string()) -> i()
2870
2871              gl:getAttribLocation/2 queries the previously linked program ob‐
2872              ject specified by Program for the attribute  variable  specified
2873              by  Name  and  returns the index of the generic vertex attribute
2874              that is bound to that attribute variable. If Name  is  a  matrix
2875              attribute  variable, the index of the first column of the matrix
2876              is returned. If the named attribute variable is  not  an  active
2877              attribute in the specified program object or if Name starts with
2878              the reserved prefix "gl_", a value of -1 is returned.
2879
2880              External documentation.
2881
2882       getBufferParameteri64v(Target :: enum(), Pname :: enum()) -> [i()]
2883
2884       getBufferParameterivARB(Target :: enum(), Pname :: enum()) ->
2885                                  [i()]
2886
2887              These functions return in Data a selected parameter of the spec‐
2888              ified buffer object.
2889
2890              External documentation.
2891
2892       getBufferParameteriv(Target :: enum(), Pname :: enum()) -> i()
2893
2894              gl:getBufferParameteriv/2  returns  in Data a selected parameter
2895              of the buffer object specified by Target.
2896
2897              External documentation.
2898
2899       getBufferSubData(Target :: enum(),
2900                        Offset :: i(),
2901                        Size :: i(),
2902                        Data :: mem()) ->
2903                           ok
2904
2905              gl:getBufferSubData/4 and glGetNamedBufferSubData return some or
2906              all of the data contents of the data store of the specified buf‐
2907              fer object. Data starting at byte offset  Offset  and  extending
2908              for  Size bytes is copied from the buffer object's data store to
2909              the memory pointed to by Data. An error is thrown if the  buffer
2910              object  is  currently mapped, or if Offset and Size together de‐
2911              fine a range beyond the  bounds  of  the  buffer  object's  data
2912              store.
2913
2914              External documentation.
2915
2916       getClipPlane(Plane :: enum()) -> {f(), f(), f(), f()}
2917
2918              gl:getClipPlane/1  returns  in Equation the four coefficients of
2919              the plane equation for Plane.
2920
2921              External documentation.
2922
2923       getColorTable(Target :: enum(),
2924                     Format :: enum(),
2925                     Type :: enum(),
2926                     Table :: mem()) ->
2927                        ok
2928
2929              gl:getColorTable/4 returns in Table the contents  of  the  color
2930              table specified by Target. No pixel transfer operations are per‐
2931              formed, but pixel storage modes that are applicable to  gl:read‐
2932              Pixels/7 are performed.
2933
2934              External documentation.
2935
2936       getColorTableParameterfv(Target :: enum(), Pname :: enum()) ->
2937                                   {f(), f(), f(), f()}
2938
2939       getColorTableParameteriv(Target :: enum(), Pname :: enum()) ->
2940                                   {i(), i(), i(), i()}
2941
2942              Returns parameters specific to color table Target.
2943
2944              External documentation.
2945
2946       getCompressedTexImage(Target :: enum(), Lod :: i(), Img :: mem()) ->
2947                                ok
2948
2949              gl:getCompressedTexImage/3  and  glGetnCompressedTexImage return
2950              the compressed texture image associated with Target and Lod into
2951              Pixels. glGetCompressedTextureImage serves the same purpose, but
2952              instead of taking a texture target, it takes the ID of the  tex‐
2953              ture  object.  Pixels  should  be  an array of BufSize bytes for
2954              glGetnCompresedTexImage  and  glGetCompressedTextureImage  func‐
2955              tions, and of ?GL_TEXTURE_COMPRESSED_IMAGE_SIZE bytes in case of
2956              gl:getCompressedTexImage/3. If the actual data takes less  space
2957              than  BufSize,  the  remaining bytes will not be touched. Target
2958              specifies the texture target, to which the texture the data  the
2959              function should extract the data from is bound to. Lod specifies
2960              the level-of-detail number of the desired image.
2961
2962              External documentation.
2963
2964       getConvolutionFilter(Target :: enum(),
2965                            Format :: enum(),
2966                            Type :: enum(),
2967                            Image :: mem()) ->
2968                               ok
2969
2970              gl:getConvolutionFilter/4 returns the current 1D or 2D  convolu‐
2971              tion  filter kernel as an image. The one- or two-dimensional im‐
2972              age is placed in Image according to the specifications in Format
2973              and Type. No pixel transfer operations are performed on this im‐
2974              age, but the relevant pixel storage modes are applied.
2975
2976              External documentation.
2977
2978       getConvolutionParameterfv(Target :: enum(), Pname :: enum()) ->
2979                                    {f(), f(), f(), f()}
2980
2981       getConvolutionParameteriv(Target :: enum(), Pname :: enum()) ->
2982                                    {i(), i(), i(), i()}
2983
2984              gl:getConvolutionParameter() retrieves  convolution  parameters.
2985              Target determines which convolution filter is queried. Pname de‐
2986              termines which parameter is returned:
2987
2988              External documentation.
2989
2990       getDebugMessageLog(Count :: i(), BufSize :: i()) ->
2991                             {i(),
2992                              Sources :: [enum()],
2993                              Types :: [enum()],
2994                              Ids :: [i()],
2995                              Severities :: [enum()],
2996                              MessageLog :: [string()]}
2997
2998              gl:getDebugMessageLog/2 retrieves messages from the  debug  mes‐
2999              sage  log.  A  maximum  of Count messages are retrieved from the
3000              log. If Sources is not NULL then the source of each  message  is
3001              written  into up to Count elements of the array. If Types is not
3002              NULL then the type of each message is written into up  to  Count
3003              elements  of the array. If Id is not NULL then the identifier of
3004              each message is written into up to Count elements of the  array.
3005              If  Severities  is not NULL then the severity of each message is
3006              written into up to Count elements of the array.  If  Lengths  is
3007              not  NULL  then the length of each message is written into up to
3008              Count elements of the array.
3009
3010              External documentation.
3011
3012       getError() -> enum()
3013
3014              gl:getError/0 returns the value of  the  error  flag.  Each  de‐
3015              tectable  error  is  assigned  a numeric code and symbolic name.
3016              When an error occurs, the error flag is set to  the  appropriate
3017              error  code  value. No other errors are recorded until gl:getEr‐
3018              ror/0 is called, the error code is returned, and the flag is re‐
3019              set   to  ?GL_NO_ERROR.  If  a  call  to  gl:getError/0  returns
3020              ?GL_NO_ERROR, there has been no detectable error since the  last
3021              call to gl:getError/0, or since the GL was initialized.
3022
3023              External documentation.
3024
3025       getFragDataIndex(Program :: i(), Name :: string()) -> i()
3026
3027              gl:getFragDataIndex/2 returns the index of the fragment color to
3028              which the variable Name was bound when the program  object  Pro‐
3029              gram  was  last linked. If Name is not a varying out variable of
3030              Program, or if an error occurs, -1 will be returned.
3031
3032              External documentation.
3033
3034       getFragDataLocation(Program :: i(), Name :: string()) -> i()
3035
3036              gl:getFragDataLocation/2 retrieves  the  assigned  color  number
3037              binding  for the user-defined varying out variable Name for pro‐
3038              gram Program. Program must have  previously  been  linked.  Name
3039              must  be a null-terminated string. If Name is not the name of an
3040              active user-defined varying out fragment shader variable  within
3041              Program, -1 will be returned.
3042
3043              External documentation.
3044
3045       getFramebufferAttachmentParameteriv(Target :: enum(),
3046                                           Attachment :: enum(),
3047                                           Pname :: enum()) ->
3048                                              i()
3049
3050              gl:getFramebufferAttachmentParameteriv/3   and  glGetNamedFrame‐
3051              bufferAttachmentParameteriv return parameters of attachments  of
3052              a specified framebuffer object.
3053
3054              External documentation.
3055
3056       getFramebufferParameteriv(Target :: enum(), Pname :: enum()) ->
3057                                    i()
3058
3059              gl:getFramebufferParameteriv/2  and glGetNamedFramebufferParame‐
3060              teriv query parameters of a specified framebuffer object.
3061
3062              External documentation.
3063
3064       getGraphicsResetStatus() -> enum()
3065
3066              Certain events can result in a reset of the GL context.  Such  a
3067              reset  causes  all context state to be lost and requires the ap‐
3068              plication to recreate all objects in the affected context.
3069
3070              External documentation.
3071
3072       getHistogram(Target :: enum(),
3073                    Reset :: 0 | 1,
3074                    Format :: enum(),
3075                    Type :: enum(),
3076                    Values :: mem()) ->
3077                       ok
3078
3079              gl:getHistogram/5 returns the current histogram table as a  one-
3080              dimensional image with the same width as the histogram. No pixel
3081              transfer operations are performed on this image, but pixel stor‐
3082              age modes that are applicable to 1D images are honored.
3083
3084              External documentation.
3085
3086       getHistogramParameterfv(Target :: enum(), Pname :: enum()) ->
3087                                  {f()}
3088
3089       getHistogramParameteriv(Target :: enum(), Pname :: enum()) ->
3090                                  {i()}
3091
3092              gl:getHistogramParameter() is used to query parameter values for
3093              the current histogram or for a proxy. The histogram state infor‐
3094              mation may be queried by calling gl:getHistogramParameter() with
3095              a Target of ?GL_HISTOGRAM (to obtain information for the current
3096              histogram  table)  or ?GL_PROXY_HISTOGRAM (to obtain information
3097              from the most recent proxy request) and  one  of  the  following
3098              values for the Pname argument:
3099
3100              External documentation.
3101
3102       getInternalformati64v(Target :: enum(),
3103                             Internalformat :: enum(),
3104                             Pname :: enum(),
3105                             BufSize :: i()) ->
3106                                [i()]
3107
3108       getInternalformativ(Target :: enum(),
3109                           Internalformat :: enum(),
3110                           Pname :: enum(),
3111                           BufSize :: i()) ->
3112                              [i()]
3113
3114              No documentation available.
3115
3116       getLightfv(Light :: enum(), Pname :: enum()) ->
3117                     {f(), f(), f(), f()}
3118
3119       getLightiv(Light :: enum(), Pname :: enum()) ->
3120                     {i(), i(), i(), i()}
3121
3122              gl:getLight()  returns  in Params the value or values of a light
3123              source parameter. Light names the light and is a  symbolic  name
3124              of  the  form  ?GL_LIGHT i where i ranges from 0 to the value of
3125              ?GL_MAX_LIGHTS - 1. ?GL_MAX_LIGHTS is an  implementation  depen‐
3126              dent  constant  that  is  greater  than or equal to eight. Pname
3127              specifies one of ten light source parameters, again by  symbolic
3128              name.
3129
3130              External documentation.
3131
3132       getMapdv(Target :: enum(), Query :: enum(), V :: mem()) -> ok
3133
3134       getMapfv(Target :: enum(), Query :: enum(), V :: mem()) -> ok
3135
3136       getMapiv(Target :: enum(), Query :: enum(), V :: mem()) -> ok
3137
3138              glMap1 and glMap2 define evaluators. gl:getMap() returns evalua‐
3139              tor parameters. Target chooses a map, Query selects  a  specific
3140              parameter,  and V points to storage where the values will be re‐
3141              turned.
3142
3143              External documentation.
3144
3145       getMaterialfv(Face :: enum(), Pname :: enum()) ->
3146                        {f(), f(), f(), f()}
3147
3148       getMaterialiv(Face :: enum(), Pname :: enum()) ->
3149                        {i(), i(), i(), i()}
3150
3151              gl:getMaterial() returns in Params the value or values of param‐
3152              eter Pname of material Face. Six parameters are defined:
3153
3154              External documentation.
3155
3156       getMinmax(Target :: enum(),
3157                 Reset :: 0 | 1,
3158                 Format :: enum(),
3159                 Types :: enum(),
3160                 Values :: mem()) ->
3161                    ok
3162
3163              gl:getMinmax/5 returns the accumulated minimum and maximum pixel
3164              values (computed on a per-component basis) in a  one-dimensional
3165              image of width 2. The first set of return values are the minima,
3166              and the second set of return values are the maxima.  The  format
3167              of  the return values is determined by Format, and their type is
3168              determined by Types.
3169
3170              External documentation.
3171
3172       getMinmaxParameterfv(Target :: enum(), Pname :: enum()) -> {f()}
3173
3174       getMinmaxParameteriv(Target :: enum(), Pname :: enum()) -> {i()}
3175
3176              gl:getMinmaxParameter() retrieves  parameters  for  the  current
3177              minmax table by setting Pname to one of the following values:
3178
3179              External documentation.
3180
3181       getMultisamplefv(Pname :: enum(), Index :: i()) -> {f(), f()}
3182
3183              gl:getMultisamplefv/2  queries  the  location of a given sample.
3184              Pname specifies the sample parameter to  retrieve  and  must  be
3185              ?GL_SAMPLE_POSITION.  Index  corresponds to the sample for which
3186              the location should be returned. The sample location is returned
3187              as  two floating-point values in Val[0] and Val[1], each between
3188              0 and 1, corresponding to the X and Y locations respectively  in
3189              the  GL  pixel space of that sample. (0.5, 0.5) this corresponds
3190              to the pixel center. Index must be between zero and the value of
3191              ?GL_SAMPLES minus one.
3192
3193              External documentation.
3194
3195       getPixelMapfv(Map :: enum(), Values :: mem()) -> ok
3196
3197       getPixelMapuiv(Map :: enum(), Values :: mem()) -> ok
3198
3199       getPixelMapusv(Map :: enum(), Values :: mem()) -> ok
3200
3201              See  the  gl:pixelMap()  reference page for a description of the
3202              acceptable values for the Map  parameter.  gl:getPixelMap()  re‐
3203              turns  in  Data  the contents of the pixel map specified in Map.
3204              Pixel maps are used during  the  execution  of  gl:readPixels/7,
3205              gl:drawPixels/5,   gl:copyPixels/5,  gl:texImage1D/8,  gl:texIm‐
3206              age2D/9,  gl:texImage3D/10,   gl:texSubImage1D/7,   gl:texSubIm‐
3207              age2D/9, gl:texSubImage3D/11, gl:copyTexImage1D/7, gl:copyTexIm‐
3208              age2D/8,  gl:copyTexSubImage1D/6,  gl:copyTexSubImage2D/8,   and
3209              gl:copyTexSubImage3D/9.  to  map color indices, stencil indices,
3210              color components, and depth components to other values.
3211
3212              External documentation.
3213
3214       getPolygonStipple() -> binary()
3215
3216              gl:getPolygonStipple/0 returns to Pattern a 32×32 polygon  stip‐
3217              ple pattern. The pattern is packed into memory as if gl:readPix‐
3218              els/7 with both height and width of 32, type of ?GL_BITMAP,  and
3219              format  of  ?GL_COLOR_INDEX were called, and the stipple pattern
3220              were stored in an internal  32×32  color  index  buffer.  Unlike
3221              gl:readPixels/7, however, pixel transfer operations (shift, off‐
3222              set, pixel map) are not applied to the returned stipple image.
3223
3224              External documentation.
3225
3226       getProgramiv(Program :: i(), Pname :: enum()) -> i()
3227
3228              gl:getProgram() returns in Params the value of a parameter for a
3229              specific program object. The following parameters are defined:
3230
3231              External documentation.
3232
3233       getProgramBinary(Program :: i(), BufSize :: i()) ->
3234                           {BinaryFormat :: enum(), Binary :: binary()}
3235
3236              gl:getProgramBinary/2  returns  a  binary  representation of the
3237              compiled and linked executable for Program  into  the  array  of
3238              bytes  whose  address is specified in Binary. The maximum number
3239              of bytes that may be written into Binary is  specified  by  Buf‐
3240              Size.  If  the  program  binary  is greater in size than BufSize
3241              bytes, then an error is generated, otherwise the  actual  number
3242              of  bytes  written into Binary is returned in the variable whose
3243              address is given by Length. If Length is ?NULL, then  no  length
3244              is returned.
3245
3246              External documentation.
3247
3248       getProgramInfoLog(Program :: i(), BufSize :: i()) -> string()
3249
3250              gl:getProgramInfoLog/2 returns the information log for the spec‐
3251              ified program object. The information log for a  program  object
3252              is  modified when the program object is linked or validated. The
3253              string that is returned will be null terminated.
3254
3255              External documentation.
3256
3257       getProgramInterfaceiv(Program :: i(),
3258                             ProgramInterface :: enum(),
3259                             Pname :: enum()) ->
3260                                i()
3261
3262              gl:getProgramInterfaceiv/3 queries the property of the interface
3263              identifed  by  ProgramInterface in Program, the property name of
3264              which is given by Pname.
3265
3266              External documentation.
3267
3268       getProgramPipelineiv(Pipeline :: i(), Pname :: enum()) -> i()
3269
3270              gl:getProgramPipelineiv/2 retrieves the value of a  property  of
3271              the  program  pipeline object Pipeline. Pname specifies the name
3272              of the parameter whose value to retrieve. The value of  the  pa‐
3273              rameter  is  written  to  the variable whose address is given by
3274              Params.
3275
3276              External documentation.
3277
3278       getProgramPipelineInfoLog(Pipeline :: i(), BufSize :: i()) ->
3279                                    string()
3280
3281              gl:getProgramPipelineInfoLog/2 retrieves the info  log  for  the
3282              program  pipeline  object  Pipeline. The info log, including its
3283              null terminator, is written into the array of  characters  whose
3284              address  is  given  by InfoLog. The maximum number of characters
3285              that may be written into InfoLog is given by  BufSize,  and  the
3286              actual  number of characters written into InfoLog is returned in
3287              the integer whose address is  given  by  Length.  If  Length  is
3288              ?NULL, no length is returned.
3289
3290              External documentation.
3291
3292       getProgramResourceIndex(Program :: i(),
3293                               ProgramInterface :: enum(),
3294                               Name :: string()) ->
3295                                  i()
3296
3297              gl:getProgramResourceIndex/3  returns the unsigned integer index
3298              assigned to a resource named Name in the interface type Program‐
3299              Interface of program object Program.
3300
3301              External documentation.
3302
3303       getProgramResourceLocation(Program :: i(),
3304                                  ProgramInterface :: enum(),
3305                                  Name :: string()) ->
3306                                     i()
3307
3308              gl:getProgramResourceLocation/3 returns the location assigned to
3309              the variable named Name in interface ProgramInterface of program
3310              object  Program.  Program must be the name of a program that has
3311              been  linked  successfully.  ProgramInterface  must  be  one  of
3312              ?GL_UNIFORM,   ?GL_PROGRAM_INPUT,  ?GL_PROGRAM_OUTPUT,  ?GL_VER‐
3313              TEX_SUBROUTINE_UNIFORM,     ?GL_TESS_CONTROL_SUBROUTINE_UNIFORM,
3314              ?GL_TESS_EVALUATION_SUBROUTINE_UNIFORM,     ?GL_GEOMETRY_SUBROU‐
3315              TINE_UNIFORM, ?GL_FRAGMENT_SUBROUTINE_UNIFORM,  ?GL_COMPUTE_SUB‐
3316              ROUTINE_UNIFORM, or ?GL_TRANSFORM_FEEDBACK_BUFFER.
3317
3318              External documentation.
3319
3320       getProgramResourceLocationIndex(Program :: i(),
3321                                       ProgramInterface :: enum(),
3322                                       Name :: string()) ->
3323                                          i()
3324
3325              gl:getProgramResourceLocationIndex/3  returns the fragment color
3326              index assigned to the variable named Name in interface  Program‐
3327              Interface of program object Program. Program must be the name of
3328              a program that has been  linked  successfully.  ProgramInterface
3329              must be ?GL_PROGRAM_OUTPUT.
3330
3331              External documentation.
3332
3333       getProgramResourceName(Program :: i(),
3334                              ProgramInterface :: enum(),
3335                              Index :: i(),
3336                              BufSize :: i()) ->
3337                                 string()
3338
3339              gl:getProgramResourceName/4  retrieves  the name string assigned
3340              to the single active resource with an index of Index in the  in‐
3341              terface  ProgramInterface  of program object Program. Index must
3342              be less than the number of entries in the active  resource  list
3343              for ProgramInterface.
3344
3345              External documentation.
3346
3347       getProgramStageiv(Program :: i(),
3348                         Shadertype :: enum(),
3349                         Pname :: enum()) ->
3350                            i()
3351
3352              gl:getProgramStage()  queries  a parameter of a shader stage at‐
3353              tached to a program object. Program contains  the  name  of  the
3354              program  to  which  the shader is attached. Shadertype specifies
3355              the stage from which to query  the  parameter.  Pname  specifies
3356              which  parameter  should  be queried. The value or values of the
3357              parameter to be queried is returned in the  variable  whose  ad‐
3358              dress is given in Values.
3359
3360              External documentation.
3361
3362       getQueryIndexediv(Target :: enum(), Index :: i(), Pname :: enum()) ->
3363                            i()
3364
3365              gl:getQueryIndexediv/3 returns in Params a selected parameter of
3366              the indexed query object target specified by Target  and  Index.
3367              Index specifies the index of the query object target and must be
3368              between zero and a target-specific maxiumum.
3369
3370              External documentation.
3371
3372       getQueryBufferObjecti64v(Id :: i(),
3373                                Buffer :: i(),
3374                                Pname :: enum(),
3375                                Offset :: i()) ->
3376                                   ok
3377
3378       getQueryBufferObjectiv(Id :: i(),
3379                              Buffer :: i(),
3380                              Pname :: enum(),
3381                              Offset :: i()) ->
3382                                 ok
3383
3384       getQueryBufferObjectui64v(Id :: i(),
3385                                 Buffer :: i(),
3386                                 Pname :: enum(),
3387                                 Offset :: i()) ->
3388                                    ok
3389
3390       getQueryBufferObjectuiv(Id :: i(),
3391                               Buffer :: i(),
3392                               Pname :: enum(),
3393                               Offset :: i()) ->
3394                                  ok
3395
3396       getQueryObjecti64v(Id :: i(), Pname :: enum()) -> i()
3397
3398       getQueryObjectiv(Id :: i(), Pname :: enum()) -> i()
3399
3400       getQueryObjectui64v(Id :: i(), Pname :: enum()) -> i()
3401
3402       getQueryObjectuiv(Id :: i(), Pname :: enum()) -> i()
3403
3404              These commands return a selected parameter of the  query  object
3405              specified  by  Id.  gl:getQueryObject()  returns in Params a se‐
3406              lected parameter of the query object specified  by  Id.  gl:get‐
3407              QueryBufferObject()  returns  in  Buffer a selected parameter of
3408              the query object specified by Id, by writing it to Buffer's data
3409              store at the byte offset specified by Offset.
3410
3411              External documentation.
3412
3413       getQueryiv(Target :: enum(), Pname :: enum()) -> i()
3414
3415              gl:getQueryiv/2  returns  in  Params a selected parameter of the
3416              query object target specified by Target.
3417
3418              External documentation.
3419
3420       getRenderbufferParameteriv(Target :: enum(), Pname :: enum()) ->
3421                                     i()
3422
3423              gl:getRenderbufferParameteriv/2 and glGetNamedRenderbufferParam‐
3424              eteriv query parameters of a specified renderbuffer object.
3425
3426              External documentation.
3427
3428       getSamplerParameterIiv(Sampler :: i(), Pname :: enum()) -> [i()]
3429
3430       getSamplerParameterIuiv(Sampler :: i(), Pname :: enum()) -> [i()]
3431
3432       getSamplerParameterfv(Sampler :: i(), Pname :: enum()) -> [f()]
3433
3434       getSamplerParameteriv(Sampler :: i(), Pname :: enum()) -> [i()]
3435
3436              gl:getSamplerParameter()  returns  in Params the value or values
3437              of the sampler parameter specified as Pname. Sampler defines the
3438              target  sampler, and must be the name of an existing sampler ob‐
3439              ject, returned from a previous call to  gl:genSamplers/1.  Pname
3440              accepts the same symbols as gl:samplerParameter(), with the same
3441              interpretations:
3442
3443              External documentation.
3444
3445       getShaderiv(Shader :: i(), Pname :: enum()) -> i()
3446
3447              gl:getShader() returns in Params the value of a parameter for  a
3448              specific shader object. The following parameters are defined:
3449
3450              External documentation.
3451
3452       getShaderInfoLog(Shader :: i(), BufSize :: i()) -> string()
3453
3454              gl:getShaderInfoLog/2 returns the information log for the speci‐
3455              fied shader object. The information log for a shader  object  is
3456              modified  when  the  shader  is compiled. The string that is re‐
3457              turned will be null terminated.
3458
3459              External documentation.
3460
3461       getShaderPrecisionFormat(Shadertype :: enum(),
3462                                Precisiontype :: enum()) ->
3463                                   {Range :: {i(), i()},
3464                                    Precision :: i()}
3465
3466              gl:getShaderPrecisionFormat/2 retrieves the  numeric  range  and
3467              precision  for the implementation's representation of quantities
3468              in different numeric formats in specified shader  type.  Shader‐
3469              Type  specifies  the type of shader for which the numeric preci‐
3470              sion and range is to be retrieved and must be  one  of  ?GL_VER‐
3471              TEX_SHADER  or  ?GL_FRAGMENT_SHADER. PrecisionType specifies the
3472              numeric format to  query  and  must  be  one  of  ?GL_LOW_FLOAT,
3473              ?GL_MEDIUM_FLOAT?GL_HIGH_FLOAT,  ?GL_LOW_INT, ?GL_MEDIUM_INT, or
3474              ?GL_HIGH_INT.
3475
3476              External documentation.
3477
3478       getShaderSource(Shader :: i(), BufSize :: i()) -> string()
3479
3480              gl:getShaderSource/2 returns the  concatenation  of  the  source
3481              code  strings  from  the  shader object specified by Shader. The
3482              source code strings for a shader object are the result of a pre‐
3483              vious  call  to  gl:shaderSource/2.  The  string returned by the
3484              function will be null terminated.
3485
3486              External documentation.
3487
3488       getString(Name :: enum()) -> string()
3489
3490       getStringi(Name :: enum(), Index :: i()) -> string()
3491
3492              gl:getString/1 returns a pointer to a static  string  describing
3493              some aspect of the current GL connection. Name can be one of the
3494              following:
3495
3496              External documentation.
3497
3498       getSubroutineIndex(Program :: i(),
3499                          Shadertype :: enum(),
3500                          Name :: string()) ->
3501                             i()
3502
3503              gl:getSubroutineIndex/3 returns the index of a  subroutine  uni‐
3504              form within a shader stage attached to a program object. Program
3505              contains the name of the program to  which  the  shader  is  at‐
3506              tached.  Shadertype  specifies  the  stage  from  which to query
3507              shader subroutine index. Name contains the null-terminated  name
3508              of the subroutine uniform whose name to query.
3509
3510              External documentation.
3511
3512       getSubroutineUniformLocation(Program :: i(),
3513                                    Shadertype :: enum(),
3514                                    Name :: string()) ->
3515                                       i()
3516
3517              gl:getSubroutineUniformLocation/3  returns  the  location of the
3518              subroutine uniform variable Name in the  shader  stage  of  type
3519              Shadertype  attached to Program, with behavior otherwise identi‐
3520              cal to gl:getUniformLocation/2.
3521
3522              External documentation.
3523
3524       getSynciv(Sync :: i(), Pname :: enum(), BufSize :: i()) -> [i()]
3525
3526              gl:getSynciv/3 retrieves properties of a sync object. Sync spec‐
3527              ifies the name of the sync object whose properties to retrieve.
3528
3529              External documentation.
3530
3531       getTexEnvfv(Target :: enum(), Pname :: enum()) ->
3532                      {f(), f(), f(), f()}
3533
3534       getTexEnviv(Target :: enum(), Pname :: enum()) ->
3535                      {i(), i(), i(), i()}
3536
3537              gl:getTexEnv()  returns  in  Params selected values of a texture
3538              environment that was specified with gl:texEnv().  Target  speci‐
3539              fies a texture environment.
3540
3541              External documentation.
3542
3543       getTexGendv(Coord :: enum(), Pname :: enum()) ->
3544                      {f(), f(), f(), f()}
3545
3546       getTexGenfv(Coord :: enum(), Pname :: enum()) ->
3547                      {f(), f(), f(), f()}
3548
3549       getTexGeniv(Coord :: enum(), Pname :: enum()) ->
3550                      {i(), i(), i(), i()}
3551
3552              gl:getTexGen()  returns  in Params selected parameters of a tex‐
3553              ture coordinate generation function  that  was  specified  using
3554              gl:texGen(). Coord names one of the (s, t, r, q) texture coordi‐
3555              nates, using the  symbolic  constant  ?GL_S,  ?GL_T,  ?GL_R,  or
3556              ?GL_Q.
3557
3558              External documentation.
3559
3560       getTexImage(Target :: enum(),
3561                   Level :: i(),
3562                   Format :: enum(),
3563                   Type :: enum(),
3564                   Pixels :: mem()) ->
3565                      ok
3566
3567              gl:getTexImage/5, glGetnTexImage and glGetTextureImage functions
3568              return a texture image into  Pixels.  For  gl:getTexImage/5  and
3569              glGetnTexImage, Target specifies whether the desired texture im‐
3570              age  is  one  specified  by  gl:texImage1D/8   (?GL_TEXTURE_1D),
3571              gl:texImage2D/9   (?GL_TEXTURE_1D_ARRAY,  ?GL_TEXTURE_RECTANGLE,
3572              ?GL_TEXTURE_2D or any of ?GL_TEXTURE_CUBE_MAP_*),  or  gl:texIm‐
3573              age3D/10    (?GL_TEXTURE_2D_ARRAY,    ?GL_TEXTURE_3D,   ?GL_TEX‐
3574              TURE_CUBE_MAP_ARRAY). For glGetTextureImage,  Texture  specifies
3575              the  texture  object  name. In addition to types of textures ac‐
3576              cepted by gl:getTexImage/5 and glGetnTexImage, the function also
3577              accepts cube map texture objects (with effective target ?GL_TEX‐
3578              TURE_CUBE_MAP). Level specifies the  level-of-detail  number  of
3579              the  desired  image. Format and Type specify the format and type
3580              of the desired image array. See the reference page for gl:texIm‐
3581              age1D/8  for a description of the acceptable values for the For‐
3582              mat and Type parameters, respectively.  For  glGetnTexImage  and
3583              glGetTextureImage  functions, bufSize tells the size of the buf‐
3584              fer to receive the  retrieved  pixel  data.  glGetnTexImage  and
3585              glGetTextureImage do not write more than BufSize bytes into Pix‐
3586              els.
3587
3588              External documentation.
3589
3590       getTexLevelParameterfv(Target :: enum(),
3591                              Level :: i(),
3592                              Pname :: enum()) ->
3593                                 {f()}
3594
3595       getTexLevelParameteriv(Target :: enum(),
3596                              Level :: i(),
3597                              Pname :: enum()) ->
3598                                 {i()}
3599
3600              gl:getTexLevelParameterfv/3, gl:getTexLevelParameteriv/3, glGet‐
3601              TextureLevelParameterfv  and glGetTextureLevelParameteriv return
3602              in Params texture parameter values for a  specific  level-of-de‐
3603              tail  value,  specified  as  Level. For the first two functions,
3604              Target  defines  the  target  texture,  either   ?GL_TEXTURE_1D,
3605              ?GL_TEXTURE_2D,       ?GL_TEXTURE_3D,      ?GL_PROXY_TEXTURE_1D,
3606              ?GL_PROXY_TEXTURE_2D,       ?GL_PROXY_TEXTURE_3D,       ?GL_TEX‐
3607              TURE_CUBE_MAP_POSITIVE_X,       ?GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
3608              ?GL_TEXTURE_CUBE_MAP_POSITIVE_Y,      ?GL_TEXTURE_CUBE_MAP_NEGA‐
3609              TIVE_Y,         ?GL_TEXTURE_CUBE_MAP_POSITIVE_Z,        ?GL_TEX‐
3610              TURE_CUBE_MAP_NEGATIVE_Z, or ?GL_PROXY_TEXTURE_CUBE_MAP. The re‐
3611              maining  two take a Texture argument which specifies the name of
3612              the texture object.
3613
3614              External documentation.
3615
3616       getTexParameterIiv(Target :: enum(), Pname :: enum()) ->
3617                             {i(), i(), i(), i()}
3618
3619       getTexParameterIuiv(Target :: enum(), Pname :: enum()) ->
3620                              {i(), i(), i(), i()}
3621
3622       getTexParameterfv(Target :: enum(), Pname :: enum()) ->
3623                            {f(), f(), f(), f()}
3624
3625       getTexParameteriv(Target :: enum(), Pname :: enum()) ->
3626                            {i(), i(), i(), i()}
3627
3628              gl:getTexParameter() and glGetTextureParameter return in  Params
3629              the value or values of the texture parameter specified as Pname.
3630              Target defines  the  target  texture.  ?GL_TEXTURE_1D,  ?GL_TEX‐
3631              TURE_2D,    ?GL_TEXTURE_3D,    ?GL_TEXTURE_1D_ARRAY,    ?GL_TEX‐
3632              TURE_2D_ARRAY,   ?GL_TEXTURE_RECTANGLE,    ?GL_TEXTURE_CUBE_MAP,
3633              ?GL_TEXTURE_CUBE_MAP_ARRAY,    ?GL_TEXTURE_2D_MULTISAMPLE,    or
3634              ?GL_TEXTURE_2D_MULTISAMPLE_ARRAY specify one-, two-,  or  three-
3635              dimensional,  one-dimensional array, two-dimensional array, rec‐
3636              tangle, cube-mapped or cube-mapped array, two-dimensional multi‐
3637              sample,  or two-dimensional multisample array texturing, respec‐
3638              tively. Pname accepts the  same  symbols  as  gl:texParameter(),
3639              with the same interpretations:
3640
3641              External documentation.
3642
3643       getTransformFeedbackVarying(Program :: i(),
3644                                   Index :: i(),
3645                                   BufSize :: i()) ->
3646                                      {Size :: i(),
3647                                       Type :: enum(),
3648                                       Name :: string()}
3649
3650              Information  about the set of varying variables in a linked pro‐
3651              gram that will be captured during transform feedback may be  re‐
3652              trieved  by  calling  gl:getTransformFeedbackVarying/3.  gl:get‐
3653              TransformFeedbackVarying/3 provides information about the  vary‐
3654              ing  variable selected by Index. An Index of 0 selects the first
3655              varying variable specified  in  the  Varyings  array  passed  to
3656              gl:transformFeedbackVaryings/3,  and  an  Index  of the value of
3657              ?GL_TRANSFORM_FEEDBACK_VARYINGS minus one selects the last  such
3658              variable.
3659
3660              External documentation.
3661
3662       getUniformdv(Program :: i(), Location :: i()) -> matrix()
3663
3664       getUniformfv(Program :: i(), Location :: i()) -> matrix()
3665
3666       getUniformiv(Program :: i(), Location :: i()) ->
3667                       {i(),
3668                        i(),
3669                        i(),
3670                        i(),
3671                        i(),
3672                        i(),
3673                        i(),
3674                        i(),
3675                        i(),
3676                        i(),
3677                        i(),
3678                        i(),
3679                        i(),
3680                        i(),
3681                        i(),
3682                        i()}
3683
3684       getUniformuiv(Program :: i(), Location :: i()) ->
3685                        {i(),
3686                         i(),
3687                         i(),
3688                         i(),
3689                         i(),
3690                         i(),
3691                         i(),
3692                         i(),
3693                         i(),
3694                         i(),
3695                         i(),
3696                         i(),
3697                         i(),
3698                         i(),
3699                         i(),
3700                         i()}
3701
3702              gl:getUniform()  and glGetnUniform return in Params the value(s)
3703              of the specified uniform variable. The type of the uniform vari‐
3704              able  specified  by Location determines the number of values re‐
3705              turned. If the uniform variable is defined in the  shader  as  a
3706              boolean,  int,  or float, a single value will be returned. If it
3707              is defined as a vec2, ivec2, or bvec2, two values  will  be  re‐
3708              turned.  If it is defined as a vec3, ivec3, or bvec3, three val‐
3709              ues will be returned, and so on. To query values stored in  uni‐
3710              form variables declared as arrays, call gl:getUniform() for each
3711              element of the array. To query values stored  in  uniform  vari‐
3712              ables  declared  as  structures,  call  gl:getUniform() for each
3713              field in the structure. The values  for  uniform  variables  de‐
3714              clared as a matrix will be returned in column major order.
3715
3716              External documentation.
3717
3718       getUniformBlockIndex(Program :: i(), UniformBlockName :: string()) ->
3719                               i()
3720
3721              gl:getUniformBlockIndex/2 retrieves the index of a uniform block
3722              within Program.
3723
3724              External documentation.
3725
3726       getUniformIndices(Program :: i(),
3727                         UniformNames :: [unicode:chardata()]) ->
3728                            [i()]
3729
3730              gl:getUniformIndices/2 retrieves the indices of a number of uni‐
3731              forms within Program.
3732
3733              External documentation.
3734
3735       getUniformLocation(Program :: i(), Name :: string()) -> i()
3736
3737              glGetUniformLocation  returns an integer that represents the lo‐
3738              cation of a specific uniform variable within a  program  object.
3739              Name  must  be  a  null terminated string that contains no white
3740              space. Name must be an active uniform variable name  in  Program
3741              that  is not a structure, an array of structures, or a subcompo‐
3742              nent of a vector or a matrix. This function returns -1  if  Name
3743              does not correspond to an active uniform variable in Program, if
3744              Name starts with the reserved prefix "gl_", or if Name is  asso‐
3745              ciated with an atomic counter or a named uniform block.
3746
3747              External documentation.
3748
3749       getUniformSubroutineuiv(Shadertype :: enum(), Location :: i()) ->
3750                                  {i(),
3751                                   i(),
3752                                   i(),
3753                                   i(),
3754                                   i(),
3755                                   i(),
3756                                   i(),
3757                                   i(),
3758                                   i(),
3759                                   i(),
3760                                   i(),
3761                                   i(),
3762                                   i(),
3763                                   i(),
3764                                   i(),
3765                                   i()}
3766
3767              gl:getUniformSubroutine()  retrieves the value of the subroutine
3768              uniform at location Location for shader stage Shadertype of  the
3769              current program. Location must be less than the value of ?GL_AC‐
3770              TIVE_SUBROUTINE_UNIFORM_LOCATIONS for the  shader  currently  in
3771              use at shader stage Shadertype. The value of the subroutine uni‐
3772              form is returned in Values.
3773
3774              External documentation.
3775
3776       getVertexAttribIiv(Index :: i(), Pname :: enum()) ->
3777                             {i(), i(), i(), i()}
3778
3779       getVertexAttribIuiv(Index :: i(), Pname :: enum()) ->
3780                              {i(), i(), i(), i()}
3781
3782       getVertexAttribLdv(Index :: i(), Pname :: enum()) ->
3783                             {f(), f(), f(), f()}
3784
3785       getVertexAttribdv(Index :: i(), Pname :: enum()) ->
3786                            {f(), f(), f(), f()}
3787
3788       getVertexAttribfv(Index :: i(), Pname :: enum()) ->
3789                            {f(), f(), f(), f()}
3790
3791       getVertexAttribiv(Index :: i(), Pname :: enum()) ->
3792                            {i(), i(), i(), i()}
3793
3794              gl:getVertexAttrib() returns in Params the value  of  a  generic
3795              vertex  attribute  parameter. The generic vertex attribute to be
3796              queried is specified by Index, and the parameter to  be  queried
3797              is specified by Pname.
3798
3799              External documentation.
3800
3801       hint(Target :: enum(), Mode :: enum()) -> ok
3802
3803              Certain aspects of GL behavior, when there is room for interpre‐
3804              tation, can be controlled with hints. A hint is  specified  with
3805              two  arguments. Target is a symbolic constant indicating the be‐
3806              havior to be controlled, and Mode is another  symbolic  constant
3807              indicating the desired behavior. The initial value for each Tar‐
3808              get is ?GL_DONT_CARE. Mode can be one of the following:
3809
3810              External documentation.
3811
3812       histogram(Target :: enum(),
3813                 Width :: i(),
3814                 Internalformat :: enum(),
3815                 Sink :: 0 | 1) ->
3816                    ok
3817
3818              When ?GL_HISTOGRAM is enabled, RGBA color  components  are  con‐
3819              verted  to  histogram  table  indices  by  clamping to the range
3820              [0,1], multiplying by the width  of  the  histogram  table,  and
3821              rounding  to  the nearest integer. The table entries selected by
3822              the RGBA indices are then incremented. (If the  internal  format
3823              of  the  histogram  table includes luminance, then the index de‐
3824              rived from the R color component determines the luminance  table
3825              entry  to  be incremented.) If a histogram table entry is incre‐
3826              mented beyond its maximum value, then its  value  becomes  unde‐
3827              fined. (This is not an error.)
3828
3829              External documentation.
3830
3831       indexd(C :: f()) -> ok
3832
3833       indexdv(X1 :: {C :: f()}) -> ok
3834
3835       indexf(C :: f()) -> ok
3836
3837       indexfv(X1 :: {C :: f()}) -> ok
3838
3839       indexi(C :: i()) -> ok
3840
3841       indexiv(X1 :: {C :: i()}) -> ok
3842
3843       indexs(C :: i()) -> ok
3844
3845       indexsv(X1 :: {C :: i()}) -> ok
3846
3847       indexub(C :: i()) -> ok
3848
3849       indexubv(X1 :: {C :: i()}) -> ok
3850
3851              gl:index()  updates  the current (single-valued) color index. It
3852              takes one argument, the new value for the current color index.
3853
3854              External documentation.
3855
3856       indexMask(Mask :: i()) -> ok
3857
3858              gl:indexMask/1 controls the writing of individual  bits  in  the
3859              color index buffers. The least significant n bits of Mask, where
3860              n is the number of bits in a color index buffer, specify a mask.
3861              Where  a  1 (one) appears in the mask, it's possible to write to
3862              the corresponding bit in the color index  buffer  (or  buffers).
3863              Where  a  0  (zero) appears, the corresponding bit is write-pro‐
3864              tected.
3865
3866              External documentation.
3867
3868       indexPointer(Type :: enum(),
3869                    Stride :: i(),
3870                    Ptr :: offset() | mem()) ->
3871                       ok
3872
3873              gl:indexPointer/3 specifies the location and data format  of  an
3874              array of color indexes to use when rendering. Type specifies the
3875              data type of each color index  and  Stride  specifies  the  byte
3876              stride  from  one color index to the next, allowing vertices and
3877              attributes to be packed into a single array or stored  in  sepa‐
3878              rate arrays.
3879
3880              External documentation.
3881
3882       initNames() -> ok
3883
3884              The  name  stack  is used during selection mode to allow sets of
3885              rendering commands to be uniquely identified. It consists of  an
3886              ordered set of unsigned integers. gl:initNames/0 causes the name
3887              stack to be initialized to its default empty state.
3888
3889              External documentation.
3890
3891       interleavedArrays(Format :: enum(),
3892                         Stride :: i(),
3893                         Pointer :: offset() | mem()) ->
3894                            ok
3895
3896              gl:interleavedArrays/3 lets you specify  and  enable  individual
3897              color, normal, texture and vertex arrays whose elements are part
3898              of a larger aggregate array element. For  some  implementations,
3899              this is more efficient than specifying the arrays separately.
3900
3901              External documentation.
3902
3903       invalidateBufferData(Buffer :: i()) -> ok
3904
3905              gl:invalidateBufferData/1  invalidates all of the content of the
3906              data store of a buffer object. After invalidation,  the  content
3907              of the buffer's data store becomes undefined.
3908
3909              External documentation.
3910
3911       invalidateBufferSubData(Buffer :: i(),
3912                               Offset :: i(),
3913                               Length :: i()) ->
3914                                  ok
3915
3916              gl:invalidateBufferSubData/3 invalidates all or part of the con‐
3917              tent of the data store of a buffer object.  After  invalidation,
3918              the  content  of  the specified range of the buffer's data store
3919              becomes undefined. The start of the range is given by Offset and
3920              its  size  is  given  by  Length, both measured in basic machine
3921              units.
3922
3923              External documentation.
3924
3925       invalidateFramebuffer(Target :: enum(), Attachments :: [enum()]) ->
3926                                ok
3927
3928              gl:invalidateFramebuffer/2 and  glInvalidateNamedFramebufferData
3929              invalidate the entire contents of a specified set of attachments
3930              of a framebuffer.
3931
3932              External documentation.
3933
3934       invalidateSubFramebuffer(Target :: enum(),
3935                                Attachments :: [enum()],
3936                                X :: i(),
3937                                Y :: i(),
3938                                Width :: i(),
3939                                Height :: i()) ->
3940                                   ok
3941
3942              gl:invalidateSubFramebuffer/6 and  glInvalidateNamedFramebuffer‐
3943              SubData invalidate the contents of a specified region of a spec‐
3944              ified set of attachments of a framebuffer.
3945
3946              External documentation.
3947
3948       invalidateTexImage(Texture :: i(), Level :: i()) -> ok
3949
3950              gl:invalidateTexSubImage/8 invalidates all of a  texture  image.
3951              Texture and Level indicated which texture image is being invali‐
3952              dated. After this command, data in the texture image  has  unde‐
3953              fined values.
3954
3955              External documentation.
3956
3957       invalidateTexSubImage(Texture, Level, Xoffset, Yoffset, Zoffset,
3958                             Width, Height, Depth) ->
3959                                ok
3960
3961              Types:
3962
3963                 Texture  =  Level  =  Xoffset  =  Yoffset = Zoffset = Width =
3964                 Height = Depth = i()
3965
3966              gl:invalidateTexSubImage/8 invalidates all or part of a  texture
3967              image.  Texture and Level indicated which texture image is being
3968              invalidated. After this command, data in that subregion have un‐
3969              defined  values.  Xoffset,  Yoffset, Zoffset, Width, Height, and
3970              Depth are interpreted as they are  in  gl:texSubImage3D/11.  For
3971              texture targets that don't have certain dimensions, this command
3972              treats those dimensions as having a size of 1. For  example,  to
3973              invalidate a portion of a two- dimensional texture, the applica‐
3974              tion would use Zoffset equal to zero and  Depth  equal  to  one.
3975              Cube  map  textures are treated as an array of six slices in the
3976              z-dimension, where a value of Zoffset is interpreted as specify‐
3977              ing face ?GL_TEXTURE_CUBE_MAP_POSITIVE_X + Zoffset.
3978
3979              External documentation.
3980
3981       isBuffer(Buffer :: i()) -> 0 | 1
3982
3983              gl:isBuffer/1  returns  ?GL_TRUE if Buffer is currently the name
3984              of a buffer object. If Buffer is zero, or is  a  non-zero  value
3985              that  is not currently the name of a buffer object, or if an er‐
3986              ror occurs, gl:isBuffer/1 returns ?GL_FALSE.
3987
3988              External documentation.
3989
3990       isEnabled(Cap :: enum()) -> 0 | 1
3991
3992       isEnabledi(Target :: enum(), Index :: i()) -> 0 | 1
3993
3994              gl:isEnabled/1 returns ?GL_TRUE if Cap is an enabled  capability
3995              and returns ?GL_FALSE otherwise. Boolean states that are indexed
3996              may be tested with gl:isEnabledi/2. For  gl:isEnabledi/2,  Index
3997              specifies the index of the capability to test. Index must be be‐
3998              tween zero and the count of indexed capabilities for  Cap.  Ini‐
3999              tially   all   capabilities   except  ?GL_DITHER  are  disabled;
4000              ?GL_DITHER is initially enabled.
4001
4002              External documentation.
4003
4004       isFramebuffer(Framebuffer :: i()) -> 0 | 1
4005
4006              gl:isFramebuffer/1 returns ?GL_TRUE if Framebuffer is  currently
4007              the  name of a framebuffer object. If Framebuffer is zero, or if
4008              ?framebuffer is not the name of a framebuffer object, or  if  an
4009              error  occurs,  gl:isFramebuffer/1  returns ?GL_FALSE. If Frame‐
4010              buffer is a name returned by gl:genFramebuffers/1, by  that  has
4011              not  yet been bound through a call to gl:bindFramebuffer/2, then
4012              the name is not a framebuffer object and gl:isFramebuffer/1  re‐
4013              turns ?GL_FALSE.
4014
4015              External documentation.
4016
4017       isList(List :: i()) -> 0 | 1
4018
4019              gl:isList/1  returns  ?GL_TRUE  if List is the name of a display
4020              list and returns ?GL_FALSE if it is not, or if an error occurs.
4021
4022              External documentation.
4023
4024       isProgram(Program :: i()) -> 0 | 1
4025
4026              gl:isProgram/1 returns ?GL_TRUE if Program is the name of a pro‐
4027              gram  object  previously created with gl:createProgram/0 and not
4028              yet deleted with gl:deleteProgram/1. If Program  is  zero  or  a
4029              non-zero  value  that is not the name of a program object, or if
4030              an error occurs, gl:isProgram/1 returns ?GL_FALSE.
4031
4032              External documentation.
4033
4034       isProgramPipeline(Pipeline :: i()) -> 0 | 1
4035
4036              gl:isProgramPipeline/1 returns ?GL_TRUE if Pipeline is currently
4037              the  name  of a program pipeline object. If Pipeline is zero, or
4038              if ?pipeline is not the name of a program pipeline object, or if
4039              an  error  occurs,  gl:isProgramPipeline/1 returns ?GL_FALSE. If
4040              Pipeline is a name  returned  by  gl:genProgramPipelines/1,  but
4041              that  has  not  yet  been  bound  through  a call to gl:bindPro‐
4042              gramPipeline/1, then the name is not a program  pipeline  object
4043              and gl:isProgramPipeline/1 returns ?GL_FALSE.
4044
4045              External documentation.
4046
4047       isQuery(Id :: i()) -> 0 | 1
4048
4049              gl:isQuery/1  returns  ?GL_TRUE if Id is currently the name of a
4050              query object. If Id is zero, or is a non-zero value that is  not
4051              currently  the  name  of  a query object, or if an error occurs,
4052              gl:isQuery/1 returns ?GL_FALSE.
4053
4054              External documentation.
4055
4056       isRenderbuffer(Renderbuffer :: i()) -> 0 | 1
4057
4058              gl:isRenderbuffer/1 returns ?GL_TRUE  if  Renderbuffer  is  cur‐
4059              rently  the  name  of  a renderbuffer object. If Renderbuffer is
4060              zero, or if Renderbuffer is not the name of a  renderbuffer  ob‐
4061              ject,   or  if  an  error  occurs,  gl:isRenderbuffer/1  returns
4062              ?GL_FALSE. If Renderbuffer is a name returned  by  gl:genRender‐
4063              buffers/1,  by  that  has  not  yet been bound through a call to
4064              gl:bindRenderbuffer/2 or gl:framebufferRenderbuffer/4, then  the
4065              name  is  not  a renderbuffer object and gl:isRenderbuffer/1 re‐
4066              turns ?GL_FALSE.
4067
4068              External documentation.
4069
4070       isSampler(Sampler :: i()) -> 0 | 1
4071
4072              gl:isSampler/1 returns ?GL_TRUE if Id is currently the name of a
4073              sampler  object.  If  Id is zero, or is a non-zero value that is
4074              not currently the name of a sampler object, or if an  error  oc‐
4075              curs, gl:isSampler/1 returns ?GL_FALSE.
4076
4077              External documentation.
4078
4079       isShader(Shader :: i()) -> 0 | 1
4080
4081              gl:isShader/1 returns ?GL_TRUE if Shader is the name of a shader
4082              object previously created with  gl:createShader/1  and  not  yet
4083              deleted  with gl:deleteShader/1. If Shader is zero or a non-zero
4084              value that is not the name of a shader object, or  if  an  error
4085              occurs, glIsShader  returns ?GL_FALSE.
4086
4087              External documentation.
4088
4089       isSync(Sync :: i()) -> 0 | 1
4090
4091              gl:isSync/1  returns ?GL_TRUE if Sync is currently the name of a
4092              sync object. If Sync is not the name of a sync object, or if  an
4093              error  occurs,  gl:isSync/1 returns ?GL_FALSE. Note that zero is
4094              not the name of a sync object.
4095
4096              External documentation.
4097
4098       isTexture(Texture :: i()) -> 0 | 1
4099
4100              gl:isTexture/1 returns ?GL_TRUE if Texture is currently the name
4101              of a texture. If Texture is zero, or is a non-zero value that is
4102              not currently the name of a texture,  or  if  an  error  occurs,
4103              gl:isTexture/1 returns ?GL_FALSE.
4104
4105              External documentation.
4106
4107       isTransformFeedback(Id :: i()) -> 0 | 1
4108
4109              gl:isTransformFeedback/1 returns ?GL_TRUE if Id is currently the
4110              name of a transform feedback object. If Id is zero, or if ?id is
4111              not  the name of a transform feedback object, or if an error oc‐
4112              curs, gl:isTransformFeedback/1 returns ?GL_FALSE.  If  Id  is  a
4113              name  returned  by  gl:genTransformFeedbacks/1, but that has not
4114              yet been bound through  a  call  to  gl:bindTransformFeedback/2,
4115              then the name is not a transform feedback object and gl:isTrans‐
4116              formFeedback/1 returns ?GL_FALSE.
4117
4118              External documentation.
4119
4120       isVertexArray(Array :: i()) -> 0 | 1
4121
4122              gl:isVertexArray/1 returns ?GL_TRUE if Array  is  currently  the
4123              name  of a vertex array object. If Array is zero, or if Array is
4124              not the name of a vertex array object, or if  an  error  occurs,
4125              gl:isVertexArray/1  returns  ?GL_FALSE.  If  Array is a name re‐
4126              turned by gl:genVertexArrays/1, by that has not yet  been  bound
4127              through  a  call to gl:bindVertexArray/1, then the name is not a
4128              vertex array object and gl:isVertexArray/1 returns ?GL_FALSE.
4129
4130              External documentation.
4131
4132       lightf(Light :: enum(), Pname :: enum(), Param :: f()) -> ok
4133
4134       lightfv(Light :: enum(), Pname :: enum(), Params :: tuple()) -> ok
4135
4136       lighti(Light :: enum(), Pname :: enum(), Param :: i()) -> ok
4137
4138       lightiv(Light :: enum(), Pname :: enum(), Params :: tuple()) -> ok
4139
4140              gl:light() sets the values of individual  light  source  parame‐
4141              ters.  Light  names the light and is a symbolic name of the form
4142              ?GL_LIGHT  i,  where  i  ranges  from  0   to   the   value   of
4143              ?GL_MAX_LIGHTS  - 1. Pname specifies one of ten light source pa‐
4144              rameters, again by symbolic name.  Params  is  either  a  single
4145              value or a pointer to an array that contains the new values.
4146
4147              External documentation.
4148
4149       lightModelf(Pname :: enum(), Param :: f()) -> ok
4150
4151       lightModelfv(Pname :: enum(), Params :: tuple()) -> ok
4152
4153       lightModeli(Pname :: enum(), Param :: i()) -> ok
4154
4155       lightModeliv(Pname :: enum(), Params :: tuple()) -> ok
4156
4157              gl:lightModel() sets the lighting model parameter. Pname names a
4158              parameter and Params gives the new value. There are three light‐
4159              ing model parameters:
4160
4161              External documentation.
4162
4163       lineStipple(Factor :: i(), Pattern :: i()) -> ok
4164
4165              Line  stippling masks out certain fragments produced by rasteri‐
4166              zation; those fragments  will  not  be  drawn.  The  masking  is
4167              achieved by using three parameters: the 16-bit line stipple pat‐
4168              tern Pattern, the repeat count Factor, and  an  integer  stipple
4169              counter s.
4170
4171              External documentation.
4172
4173       lineWidth(Width :: f()) -> ok
4174
4175              gl:lineWidth/1  specifies  the  rasterized width of both aliased
4176              and antialiased lines. Using a line width other than 1 has  dif‐
4177              ferent  effects,  depending  on whether line antialiasing is en‐
4178              abled. To enable and disable line antialiasing, call gl:enable/1
4179              and  gl:disable/1 with argument ?GL_LINE_SMOOTH. Line antialias‐
4180              ing is initially disabled.
4181
4182              External documentation.
4183
4184       linkProgram(Program :: i()) -> ok
4185
4186              gl:linkProgram/1 links the program object specified by  Program.
4187              If  any shader objects of type ?GL_VERTEX_SHADER are attached to
4188              Program, they will be used to create an executable that will run
4189              on  the  programmable vertex processor. If any shader objects of
4190              type ?GL_GEOMETRY_SHADER are attached to Program, they  will  be
4191              used  to  create an executable that will run on the programmable
4192              geometry processor. If any  shader  objects  of  type  ?GL_FRAG‐
4193              MENT_SHADER are attached to Program, they will be used to create
4194              an executable that will run on the programmable fragment proces‐
4195              sor.
4196
4197              External documentation.
4198
4199       listBase(Base :: i()) -> ok
4200
4201              gl:callLists/1 specifies an array of offsets. Display-list names
4202              are generated by adding Base to each offset. Names  that  refer‐
4203              ence valid display lists are executed; the others are ignored.
4204
4205              External documentation.
4206
4207       loadIdentity() -> ok
4208
4209              gl:loadIdentity/0  replaces the current matrix with the identity
4210              matrix. It is semantically equivalent to calling gl:loadMatrix()
4211              with the identity matrix
4212
4213              External documentation.
4214
4215       loadMatrixd(M :: matrix()) -> ok
4216
4217       loadMatrixf(M :: matrix()) -> ok
4218
4219              gl:loadMatrix()  replaces  the current matrix with the one whose
4220              elements are specified by M. The current matrix is  the  projec‐
4221              tion  matrix,  modelview matrix, or texture matrix, depending on
4222              the current matrix mode (see gl:matrixMode/1).
4223
4224              External documentation.
4225
4226       loadName(Name :: i()) -> ok
4227
4228              The name stack is used during selection mode to  allow  sets  of
4229              rendering  commands to be uniquely identified. It consists of an
4230              ordered set of unsigned integers and is initially empty.
4231
4232              External documentation.
4233
4234       loadTransposeMatrixd(M :: matrix()) -> ok
4235
4236       loadTransposeMatrixf(M :: matrix()) -> ok
4237
4238              gl:loadTransposeMatrix() replaces the current  matrix  with  the
4239              one whose elements are specified by M. The current matrix is the
4240              projection matrix, modelview matrix, or texture matrix,  depend‐
4241              ing on the current matrix mode (see gl:matrixMode/1).
4242
4243              External documentation.
4244
4245       logicOp(Opcode :: enum()) -> ok
4246
4247              gl:logicOp/1  specifies  a logical operation that, when enabled,
4248              is applied between the incoming RGBA color and the RGBA color at
4249              the  corresponding  location  in  the frame buffer. To enable or
4250              disable the logical operation, call gl:enable/1 and gl:disable/1
4251              using  the  symbolic  constant  ?GL_COLOR_LOGIC_OP.  The initial
4252              value is disabled.
4253
4254              External documentation.
4255
4256       map1d(Target :: enum(),
4257             U1 :: f(),
4258             U2 :: f(),
4259             Stride :: i(),
4260             Order :: i(),
4261             Points :: binary()) ->
4262                ok
4263
4264       map1f(Target :: enum(),
4265             U1 :: f(),
4266             U2 :: f(),
4267             Stride :: i(),
4268             Order :: i(),
4269             Points :: binary()) ->
4270                ok
4271
4272              Evaluators provide a way to use polynomial or  rational  polyno‐
4273              mial  mapping to produce vertices, normals, texture coordinates,
4274              and colors. The values produced by an evaluator are sent to fur‐
4275              ther  stages of GL processing just as if they had been presented
4276              using gl:vertex(), gl:normal(),  gl:texCoord(),  and  gl:color()
4277              commands,  except  that  the  generated values do not update the
4278              current normal, texture coordinates, or color.
4279
4280              External documentation.
4281
4282       map2d(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder,
4283             Points) ->
4284                ok
4285
4286       map2f(Target, U1, U2, Ustride, Uorder, V1, V2, Vstride, Vorder,
4287             Points) ->
4288                ok
4289
4290              Types:
4291
4292                 Target = enum()
4293                 U1 = U2 = f()
4294                 Ustride = Uorder = i()
4295                 V1 = V2 = f()
4296                 Vstride = Vorder = i()
4297                 Points = binary()
4298
4299              Evaluators provide a way to use polynomial or  rational  polyno‐
4300              mial  mapping to produce vertices, normals, texture coordinates,
4301              and colors. The values produced by an evaluator are sent  on  to
4302              further  stages  of  GL processing just as if they had been pre‐
4303              sented  using  gl:vertex(),  gl:normal(),   gl:texCoord(),   and
4304              gl:color() commands, except that the generated values do not up‐
4305              date the current normal, texture coordinates, or color.
4306
4307              External documentation.
4308
4309       mapGrid1d(Un :: i(), U1 :: f(), U2 :: f()) -> ok
4310
4311       mapGrid1f(Un :: i(), U1 :: f(), U2 :: f()) -> ok
4312
4313       mapGrid2d(Un :: i(),
4314                 U1 :: f(),
4315                 U2 :: f(),
4316                 Vn :: i(),
4317                 V1 :: f(),
4318                 V2 :: f()) ->
4319                    ok
4320
4321       mapGrid2f(Un :: i(),
4322                 U1 :: f(),
4323                 U2 :: f(),
4324                 Vn :: i(),
4325                 V1 :: f(),
4326                 V2 :: f()) ->
4327                    ok
4328
4329              gl:mapGrid() and gl:evalMesh() are used together to  efficiently
4330              generate  and evaluate a series of evenly-spaced map domain val‐
4331              ues. gl:evalMesh() steps through the integer domain of a one- or
4332              two-dimensional  grid,  whose range is the domain of the evalua‐
4333              tion maps specified by glMap1 and glMap2.
4334
4335              External documentation.
4336
4337       materialf(Face :: enum(), Pname :: enum(), Param :: f()) -> ok
4338
4339       materialfv(Face :: enum(), Pname :: enum(), Params :: tuple()) ->
4340                     ok
4341
4342       materiali(Face :: enum(), Pname :: enum(), Param :: i()) -> ok
4343
4344       materialiv(Face :: enum(), Pname :: enum(), Params :: tuple()) ->
4345                     ok
4346
4347              gl:material() assigns values to material parameters.  There  are
4348              two  matched  sets of material parameters. One, the front-facing
4349              set, is used to shade points, lines, bitmaps, and  all  polygons
4350              (when  two-sided  lighting  is  disabled),  or just front-facing
4351              polygons (when two-sided lighting is enabled).  The  other  set,
4352              back-facing,  is  used  to  shade back-facing polygons only when
4353              two-sided lighting is enabled. Refer to the gl:lightModel() ref‐
4354              erence  page  for details concerning one- and two-sided lighting
4355              calculations.
4356
4357              External documentation.
4358
4359       matrixMode(Mode :: enum()) -> ok
4360
4361              gl:matrixMode/1 sets the current matrix mode.  Mode  can  assume
4362              one of four values:
4363
4364              External documentation.
4365
4366       memoryBarrier(Barriers :: i()) -> ok
4367
4368       memoryBarrierByRegion(Barriers :: i()) -> ok
4369
4370              gl:memoryBarrier/1  defines a barrier ordering the memory trans‐
4371              actions issued prior to the command relative to those issued af‐
4372              ter  the  barrier.  For  the  purposes  of this ordering, memory
4373              transactions performed by shaders are considered to be issued by
4374              the  rendering  command  that  triggered  the  execution  of the
4375              shader. Barriers is a bitfield indicating the set of  operations
4376              that  are synchronized with shader stores; the bits used in Bar‐
4377              riers are as follows:
4378
4379              External documentation.
4380
4381       minSampleShading(Value :: f()) -> ok
4382
4383              gl:minSampleShading/1 specifies the rate at  which  samples  are
4384              shaded within a covered pixel. Sample-rate shading is enabled by
4385              calling gl:enable/1 with the  parameter  ?GL_SAMPLE_SHADING.  If
4386              ?GL_MULTISAMPLE  or ?GL_SAMPLE_SHADING is disabled, sample shad‐
4387              ing has no effect. Otherwise, an implementation must provide  at
4388              least  as  many unique color values for each covered fragment as
4389              specified by Value times Samples where Samples is the  value  of
4390              ?GL_SAMPLES  for  the current framebuffer. At least 1 sample for
4391              each covered fragment is generated.
4392
4393              External documentation.
4394
4395       minmax(Target :: enum(), Internalformat :: enum(), Sink :: 0 | 1) ->
4396                 ok
4397
4398              When ?GL_MINMAX is enabled, the RGBA components of incoming pix‐
4399              els are compared to the minimum and maximum values for each com‐
4400              ponent, which are stored in the two-element minmax  table.  (The
4401              first  element  stores the minima, and the second element stores
4402              the maxima.) If a pixel component is  greater  than  the  corre‐
4403              sponding component in the maximum element, then the maximum ele‐
4404              ment is updated with the pixel component value. If a pixel  com‐
4405              ponent  is  less than the corresponding component in the minimum
4406              element, then the minimum element is updated with the pixel com‐
4407              ponent value. (In both cases, if the internal format of the min‐
4408              max table includes luminance, then the R color component of  in‐
4409              coming  pixels is used for comparison.) The contents of the min‐
4410              max table may be retrieved at a later time by calling gl:getMin‐
4411              max/5.  The  minmax  operation is enabled or disabled by calling
4412              gl:enable/1 or gl:disable/1, respectively, with an  argument  of
4413              ?GL_MINMAX.
4414
4415              External documentation.
4416
4417       multMatrixd(M :: matrix()) -> ok
4418
4419       multMatrixf(M :: matrix()) -> ok
4420
4421              gl:multMatrix() multiplies the current matrix with the one spec‐
4422              ified using M, and replaces the current matrix with the product.
4423
4424              External documentation.
4425
4426       multTransposeMatrixd(M :: matrix()) -> ok
4427
4428       multTransposeMatrixf(M :: matrix()) -> ok
4429
4430              gl:multTransposeMatrix() multiplies the current matrix with  the
4431              one  specified using M, and replaces the current matrix with the
4432              product.
4433
4434              External documentation.
4435
4436       multiDrawArrays(Mode :: enum(),
4437                       First :: [integer()] | mem(),
4438                       Count :: [integer()] | mem()) ->
4439                          ok
4440
4441              gl:multiDrawArrays/3 specifies multiple sets of geometric primi‐
4442              tives  with  very  few subroutine calls. Instead of calling a GL
4443              procedure to pass each individual vertex, normal, texture  coor‐
4444              dinate,  edge flag, or color, you can prespecify separate arrays
4445              of vertices, normals, and colors and use them to construct a se‐
4446              quence of primitives with a single call to gl:multiDrawArrays/3.
4447
4448              External documentation.
4449
4450       multiDrawArraysIndirect(Mode :: enum(),
4451                               Indirect :: offset() | mem(),
4452                               Drawcount :: i(),
4453                               Stride :: i()) ->
4454                                  ok
4455
4456              gl:multiDrawArraysIndirect/4 specifies multiple geometric primi‐
4457              tives with very few  subroutine  calls.  gl:multiDrawArraysIndi‐
4458              rect/4  behaves  similarly to a multitude of calls to gl:drawAr‐
4459              raysInstancedBaseInstance/5, execept that the parameters to each
4460              call  to  gl:drawArraysInstancedBaseInstance/5  are stored in an
4461              array in memory at the address given by Indirect,  separated  by
4462              the  stride,  in  basic  machine  units, specified by Stride. If
4463              Stride is zero, then the array is assumed to be  tightly  packed
4464              in memory.
4465
4466              External documentation.
4467
4468       multiDrawArraysIndirectCount(Mode, Indirect, Drawcount,
4469                                    Maxdrawcount, Stride) ->
4470                                       ok
4471
4472              Types:
4473
4474                 Mode = enum()
4475                 Indirect = offset() | mem()
4476                 Drawcount = Maxdrawcount = Stride = i()
4477
4478              No documentation available.
4479
4480       multiTexCoord1d(Target :: enum(), S :: f()) -> ok
4481
4482       multiTexCoord1dv(Target :: enum(), X2 :: {S :: f()}) -> ok
4483
4484       multiTexCoord1f(Target :: enum(), S :: f()) -> ok
4485
4486       multiTexCoord1fv(Target :: enum(), X2 :: {S :: f()}) -> ok
4487
4488       multiTexCoord1i(Target :: enum(), S :: i()) -> ok
4489
4490       multiTexCoord1iv(Target :: enum(), X2 :: {S :: i()}) -> ok
4491
4492       multiTexCoord1s(Target :: enum(), S :: i()) -> ok
4493
4494       multiTexCoord1sv(Target :: enum(), X2 :: {S :: i()}) -> ok
4495
4496       multiTexCoord2d(Target :: enum(), S :: f(), T :: f()) -> ok
4497
4498       multiTexCoord2dv(Target :: enum(), X2 :: {S :: f(), T :: f()}) ->
4499                           ok
4500
4501       multiTexCoord2f(Target :: enum(), S :: f(), T :: f()) -> ok
4502
4503       multiTexCoord2fv(Target :: enum(), X2 :: {S :: f(), T :: f()}) ->
4504                           ok
4505
4506       multiTexCoord2i(Target :: enum(), S :: i(), T :: i()) -> ok
4507
4508       multiTexCoord2iv(Target :: enum(), X2 :: {S :: i(), T :: i()}) ->
4509                           ok
4510
4511       multiTexCoord2s(Target :: enum(), S :: i(), T :: i()) -> ok
4512
4513       multiTexCoord2sv(Target :: enum(), X2 :: {S :: i(), T :: i()}) ->
4514                           ok
4515
4516       multiTexCoord3d(Target :: enum(), S :: f(), T :: f(), R :: f()) ->
4517                          ok
4518
4519       multiTexCoord3dv(Target :: enum(),
4520                        X2 :: {S :: f(), T :: f(), R :: f()}) ->
4521                           ok
4522
4523       multiTexCoord3f(Target :: enum(), S :: f(), T :: f(), R :: f()) ->
4524                          ok
4525
4526       multiTexCoord3fv(Target :: enum(),
4527                        X2 :: {S :: f(), T :: f(), R :: f()}) ->
4528                           ok
4529
4530       multiTexCoord3i(Target :: enum(), S :: i(), T :: i(), R :: i()) ->
4531                          ok
4532
4533       multiTexCoord3iv(Target :: enum(),
4534                        X2 :: {S :: i(), T :: i(), R :: i()}) ->
4535                           ok
4536
4537       multiTexCoord3s(Target :: enum(), S :: i(), T :: i(), R :: i()) ->
4538                          ok
4539
4540       multiTexCoord3sv(Target :: enum(),
4541                        X2 :: {S :: i(), T :: i(), R :: i()}) ->
4542                           ok
4543
4544       multiTexCoord4d(Target :: enum(),
4545                       S :: f(),
4546                       T :: f(),
4547                       R :: f(),
4548                       Q :: f()) ->
4549                          ok
4550
4551       multiTexCoord4dv(Target :: enum(),
4552                        X2 :: {S :: f(), T :: f(), R :: f(), Q :: f()}) ->
4553                           ok
4554
4555       multiTexCoord4f(Target :: enum(),
4556                       S :: f(),
4557                       T :: f(),
4558                       R :: f(),
4559                       Q :: f()) ->
4560                          ok
4561
4562       multiTexCoord4fv(Target :: enum(),
4563                        X2 :: {S :: f(), T :: f(), R :: f(), Q :: f()}) ->
4564                           ok
4565
4566       multiTexCoord4i(Target :: enum(),
4567                       S :: i(),
4568                       T :: i(),
4569                       R :: i(),
4570                       Q :: i()) ->
4571                          ok
4572
4573       multiTexCoord4iv(Target :: enum(),
4574                        X2 :: {S :: i(), T :: i(), R :: i(), Q :: i()}) ->
4575                           ok
4576
4577       multiTexCoord4s(Target :: enum(),
4578                       S :: i(),
4579                       T :: i(),
4580                       R :: i(),
4581                       Q :: i()) ->
4582                          ok
4583
4584       multiTexCoord4sv(Target :: enum(),
4585                        X2 :: {S :: i(), T :: i(), R :: i(), Q :: i()}) ->
4586                           ok
4587
4588              gl:multiTexCoord()  specifies  texture  coordinates in one, two,
4589              three, or four dimensions. gl:multiTexCoord1() sets the  current
4590              texture  coordinates to (s 0 0 1); a call to gl:multiTexCoord2()
4591              sets them to (s t 0 1). Similarly, gl:multiTexCoord3() specifies
4592              the  texture  coordinates  as (s t r 1), and gl:multiTexCoord4()
4593              defines all four components explicitly as (s t r q).
4594
4595              External documentation.
4596
4597       endList() -> ok
4598
4599       newList(List :: i(), Mode :: enum()) -> ok
4600
4601              Display lists are groups of GL commands that  have  been  stored
4602              for   subsequent  execution.  Display  lists  are  created  with
4603              gl:newList/2. All subsequent commands are placed in the  display
4604              list, in the order issued, until gl:endList/0 is called.
4605
4606              External documentation.
4607
4608       normal3b(Nx :: i(), Ny :: i(), Nz :: i()) -> ok
4609
4610       normal3bv(X1 :: {Nx :: i(), Ny :: i(), Nz :: i()}) -> ok
4611
4612       normal3d(Nx :: f(), Ny :: f(), Nz :: f()) -> ok
4613
4614       normal3dv(X1 :: {Nx :: f(), Ny :: f(), Nz :: f()}) -> ok
4615
4616       normal3f(Nx :: f(), Ny :: f(), Nz :: f()) -> ok
4617
4618       normal3fv(X1 :: {Nx :: f(), Ny :: f(), Nz :: f()}) -> ok
4619
4620       normal3i(Nx :: i(), Ny :: i(), Nz :: i()) -> ok
4621
4622       normal3iv(X1 :: {Nx :: i(), Ny :: i(), Nz :: i()}) -> ok
4623
4624       normal3s(Nx :: i(), Ny :: i(), Nz :: i()) -> ok
4625
4626       normal3sv(X1 :: {Nx :: i(), Ny :: i(), Nz :: i()}) -> ok
4627
4628              The  current  normal  is  set  to the given coordinates whenever
4629              gl:normal() is issued. Byte, short,  or  integer  arguments  are
4630              converted  to  floating-point  format with a linear mapping that
4631              maps the most positive representable integer value  to  1.0  and
4632              the most negative representable integer value to -1.0.
4633
4634              External documentation.
4635
4636       normalPointer(Type :: enum(),
4637                     Stride :: i(),
4638                     Ptr :: offset() | mem()) ->
4639                        ok
4640
4641              gl:normalPointer/3  specifies the location and data format of an
4642              array of normals to use when rendering. Type specifies the  data
4643              type  of  each  normal coordinate, and Stride specifies the byte
4644              stride from one normal to the next, allowing  vertices  and  at‐
4645              tributes  to be packed into a single array or stored in separate
4646              arrays. (Single-array storage may be more efficient on some  im‐
4647              plementations; see gl:interleavedArrays/3.)
4648
4649              External documentation.
4650
4651       objectPtrLabel(Ptr :: offset() | mem(),
4652                      Length :: i(),
4653                      Label :: string()) ->
4654                         ok
4655
4656              gl:objectPtrLabel/3 labels the sync object identified by Ptr.
4657
4658              External documentation.
4659
4660       ortho(Left :: f(),
4661             Right :: f(),
4662             Bottom :: f(),
4663             Top :: f(),
4664             Near_val :: f(),
4665             Far_val :: f()) ->
4666                ok
4667
4668              gl:ortho/6  describes  a transformation that produces a parallel
4669              projection. The current matrix (see gl:matrixMode/1)  is  multi‐
4670              plied by this matrix and the result replaces the current matrix,
4671              as if gl:multMatrix() were called with the following  matrix  as
4672              its argument:
4673
4674              External documentation.
4675
4676       passThrough(Token :: f()) -> ok
4677
4678              External documentation.
4679
4680       patchParameterfv(Pname :: enum(), Values :: [f()]) -> ok
4681
4682       patchParameteri(Pname :: enum(), Value :: i()) -> ok
4683
4684              gl:patchParameter()  specifies  the parameters that will be used
4685              for patch primitives. Pname specifies the  parameter  to  modify
4686              and    must    be   either   ?GL_PATCH_VERTICES,   ?GL_PATCH_DE‐
4687              FAULT_OUTER_LEVEL    or    ?GL_PATCH_DEFAULT_INNER_LEVEL.    For
4688              gl:patchParameteri/2,  Value specifies the new value for the pa‐
4689              rameter specified by Pname.  For  gl:patchParameterfv/2,  Values
4690              specifies  the address of an array containing the new values for
4691              the parameter specified by Pname.
4692
4693              External documentation.
4694
4695       pauseTransformFeedback() -> ok
4696
4697              gl:pauseTransformFeedback/0 pauses transform feedback operations
4698              on  the  currently active transform feedback object. When trans‐
4699              form feedback operations are paused, transform feedback is still
4700              considered active and changing most transform feedback state re‐
4701              lated to the object results in an error. However, a  new  trans‐
4702              form  feedback  object  may be bound while transform feedback is
4703              paused.
4704
4705              External documentation.
4706
4707       pixelMapfv(Map :: enum(), Mapsize :: i(), Values :: binary()) ->
4708                     ok
4709
4710       pixelMapuiv(Map :: enum(), Mapsize :: i(), Values :: binary()) ->
4711                      ok
4712
4713       pixelMapusv(Map :: enum(), Mapsize :: i(), Values :: binary()) ->
4714                      ok
4715
4716              gl:pixelMap() sets up  translation  tables,  or  maps,  used  by
4717              gl:copyPixels/5,    gl:copyTexImage1D/7,    gl:copyTexImage2D/8,
4718              gl:copyTexSubImage1D/6, gl:copyTexSubImage2D/8, gl:copyTexSubIm‐
4719              age3D/9,   gl:drawPixels/5,   gl:readPixels/7,  gl:texImage1D/8,
4720              gl:texImage2D/9, gl:texImage3D/10,  gl:texSubImage1D/7,  gl:tex‐
4721              SubImage2D/9,  and  gl:texSubImage3D/11.  Additionally,  if  the
4722              ARB_imaging subset is supported, the  routines  gl:colorTable/6,
4723              gl:colorSubTable/6, gl:convolutionFilter1D/6, gl:convolutionFil‐
4724              ter2D/7,   gl:histogram/4,   gl:minmax/3,   and    gl:separable‐
4725              Filter2D/8.  Use  of  these  maps is described completely in the
4726              gl:pixelTransfer() reference page, and partly in  the  reference
4727              pages  for the pixel and texture image commands. Only the speci‐
4728              fication of the maps is described in this reference page.
4729
4730              External documentation.
4731
4732       pixelStoref(Pname :: enum(), Param :: f()) -> ok
4733
4734       pixelStorei(Pname :: enum(), Param :: i()) -> ok
4735
4736              gl:pixelStore() sets pixel storage modes that affect the  opera‐
4737              tion  of  subsequent gl:readPixels/7 as well as the unpacking of
4738              texture patterns (see gl:texImage1D/8, gl:texImage2D/9,  gl:tex‐
4739              Image3D/10, gl:texSubImage1D/7, gl:texSubImage2D/9, gl:texSubIm‐
4740              age3D/11), gl:compressedTexImage1D/7, gl:compressedTexImage2D/8,
4741              gl:compressedTexImage3D/9, gl:compressedTexSubImage1D/7, gl:com‐
4742              pressedTexSubImage2D/9 or gl:compressedTexSubImage1D/7.
4743
4744              External documentation.
4745
4746       pixelTransferf(Pname :: enum(), Param :: f()) -> ok
4747
4748       pixelTransferi(Pname :: enum(), Param :: i()) -> ok
4749
4750              gl:pixelTransfer() sets pixel transfer modes that affect the op‐
4751              eration   of  subsequent  gl:copyPixels/5,  gl:copyTexImage1D/7,
4752              gl:copyTexImage2D/8,  gl:copyTexSubImage1D/6,   gl:copyTexSubIm‐
4753              age2D/8,  gl:copyTexSubImage3D/9,  gl:drawPixels/5,  gl:readPix‐
4754              els/7,   gl:texImage1D/8,   gl:texImage2D/9,   gl:texImage3D/10,
4755              gl:texSubImage1D/7,  gl:texSubImage2D/9, and gl:texSubImage3D/11
4756              commands. Additionally, if the ARB_imaging subset is  supported,
4757              the  routines  gl:colorTable/6,  gl:colorSubTable/6, gl:convolu‐
4758              tionFilter1D/6,    gl:convolutionFilter2D/7,     gl:histogram/4,
4759              gl:minmax/3,  and  gl:separableFilter2D/8 are also affected. The
4760              algorithms that are specified by pixel transfer modes operate on
4761              pixels  after  they  are read from the frame buffer (gl:copyPix‐
4762              els/5gl:copyTexImage1D/7, gl:copyTexImage2D/8,  gl:copyTexSubIm‐
4763              age1D/6,   gl:copyTexSubImage2D/8,  gl:copyTexSubImage3D/9,  and
4764              gl:readPixels/7), or unpacked from  client  memory  (gl:drawPix‐
4765              els/5,   gl:texImage1D/8,   gl:texImage2D/9,   gl:texImage3D/10,
4766              gl:texSubImage1D/7,   gl:texSubImage2D/9,    and    gl:texSubIm‐
4767              age3D/11).  Pixel  transfer operations happen in the same order,
4768              and in the same manner, regardless of the command that  resulted
4769              in  the  pixel  operation.  Pixel  storage  modes (see gl:pixel‐
4770              Store()) control the unpacking of pixels being read from  client
4771              memory  and the packing of pixels being written back into client
4772              memory.
4773
4774              External documentation.
4775
4776       pixelZoom(Xfactor :: f(), Yfactor :: f()) -> ok
4777
4778              gl:pixelZoom/2 specifies values for the x and  y  zoom  factors.
4779              During the execution of gl:drawPixels/5 or gl:copyPixels/5, if (
4780              xr, yr) is the current raster position, and a given  element  is
4781              in  the mth row and nth column of the pixel rectangle, then pix‐
4782              els whose centers are in the rectangle with corners at
4783
4784              External documentation.
4785
4786       pointParameterf(Pname :: enum(), Param :: f()) -> ok
4787
4788       pointParameterfv(Pname :: enum(), Params :: tuple()) -> ok
4789
4790       pointParameteri(Pname :: enum(), Param :: i()) -> ok
4791
4792       pointParameteriv(Pname :: enum(), Params :: tuple()) -> ok
4793
4794              The following values are accepted for Pname:
4795
4796              External documentation.
4797
4798       pointSize(Size :: f()) -> ok
4799
4800              gl:pointSize/1 specifies the rasterized diameter of  points.  If
4801              point  size  mode  is  disabled  (see gl:enable/1 with parameter
4802              ?GL_PROGRAM_POINT_SIZE), this value will be  used  to  rasterize
4803              points.  Otherwise,  the  value  written to the shading language
4804              built-in variable gl_PointSize will be used.
4805
4806              External documentation.
4807
4808       polygonMode(Face :: enum(), Mode :: enum()) -> ok
4809
4810              gl:polygonMode/2 controls the  interpretation  of  polygons  for
4811              rasterization.  Face  describes  which polygons Mode applies to:
4812              both front and back-facing  polygons  (?GL_FRONT_AND_BACK).  The
4813              polygon  mode  affects only the final rasterization of polygons.
4814              In particular, a polygon's vertices are lit and the  polygon  is
4815              clipped and possibly culled before these modes are applied.
4816
4817              External documentation.
4818
4819       polygonOffset(Factor :: f(), Units :: f()) -> ok
4820
4821              When    ?GL_POLYGON_OFFSET_FILL,   ?GL_POLYGON_OFFSET_LINE,   or
4822              ?GL_POLYGON_OFFSET_POINT is enabled, each fragment's depth value
4823              will be offset after it is interpolated from the depth values of
4824              the appropriate vertices.  The  value  of  the  offset  is  fac‐
4825              tor×DZ+r×units, where DZ is a measurement of the change in depth
4826              relative to the screen area of the polygon, and r is the  small‐
4827              est  value that is guaranteed to produce a resolvable offset for
4828              a given implementation. The offset is  added  before  the  depth
4829              test is performed and before the value is written into the depth
4830              buffer.
4831
4832              External documentation.
4833
4834       polygonOffsetClamp(Factor :: f(), Units :: f(), Clamp :: f()) ->
4835                             ok
4836
4837              No documentation available.
4838
4839       polygonStipple(Mask :: binary()) -> ok
4840
4841              Polygon stippling, like line stippling  (see  gl:lineStipple/2),
4842              masks  out certain fragments produced by rasterization, creating
4843              a pattern. Stippling is independent of polygon antialiasing.
4844
4845              External documentation.
4846
4847       primitiveRestartIndex(Index :: i()) -> ok
4848
4849              gl:primitiveRestartIndex/1 specifies a vertex array element that
4850              is  treated specially when primitive restarting is enabled. This
4851              is known as the primitive restart index.
4852
4853              External documentation.
4854
4855       prioritizeTextures(Textures :: [i()], Priorities :: [clamp()]) ->
4856                             ok
4857
4858              gl:prioritizeTextures/2 assigns the N texture  priorities  given
4859              in Priorities to the N textures named in Textures.
4860
4861              External documentation.
4862
4863       programBinary(Program :: i(),
4864                     BinaryFormat :: enum(),
4865                     Binary :: binary()) ->
4866                        ok
4867
4868              gl:programBinary/3  loads a program object with a program binary
4869              previously returned from gl:getProgramBinary/2. BinaryFormat and
4870              Binary  must  be those returned by a previous call to gl:getPro‐
4871              gramBinary/2, and Length must be the length returned by  gl:get‐
4872              ProgramBinary/2,  or  by  gl:getProgram() when called with Pname
4873              set to ?GL_PROGRAM_BINARY_LENGTH. If these  conditions  are  not
4874              met,   loading  the  program  binary  will  fail  and  Program's
4875              ?GL_LINK_STATUS will be set to ?GL_FALSE.
4876
4877              External documentation.
4878
4879       programParameteri(Program :: i(), Pname :: enum(), Value :: i()) ->
4880                            ok
4881
4882              gl:programParameter() specifies a new value  for  the  parameter
4883              nameed by Pname for the program object Program.
4884
4885              External documentation.
4886
4887       programUniform1d(Program :: i(), Location :: i(), V0 :: f()) -> ok
4888
4889       programUniform1dv(Program :: i(), Location :: i(), Value :: [f()]) ->
4890                            ok
4891
4892       programUniform1f(Program :: i(), Location :: i(), V0 :: f()) -> ok
4893
4894       programUniform1fv(Program :: i(), Location :: i(), Value :: [f()]) ->
4895                            ok
4896
4897       programUniform1i(Program :: i(), Location :: i(), V0 :: i()) -> ok
4898
4899       programUniform1iv(Program :: i(), Location :: i(), Value :: [i()]) ->
4900                            ok
4901
4902       programUniform1ui(Program :: i(), Location :: i(), V0 :: i()) ->
4903                            ok
4904
4905       programUniform1uiv(Program :: i(),
4906                          Location :: i(),
4907                          Value :: [i()]) ->
4908                             ok
4909
4910       programUniform2d(Program :: i(),
4911                        Location :: i(),
4912                        V0 :: f(),
4913                        V1 :: f()) ->
4914                           ok
4915
4916       programUniform2dv(Program :: i(),
4917                         Location :: i(),
4918                         Value :: [{f(), f()}]) ->
4919                            ok
4920
4921       programUniform2f(Program :: i(),
4922                        Location :: i(),
4923                        V0 :: f(),
4924                        V1 :: f()) ->
4925                           ok
4926
4927       programUniform2fv(Program :: i(),
4928                         Location :: i(),
4929                         Value :: [{f(), f()}]) ->
4930                            ok
4931
4932       programUniform2i(Program :: i(),
4933                        Location :: i(),
4934                        V0 :: i(),
4935                        V1 :: i()) ->
4936                           ok
4937
4938       programUniform2iv(Program :: i(),
4939                         Location :: i(),
4940                         Value :: [{i(), i()}]) ->
4941                            ok
4942
4943       programUniform2ui(Program :: i(),
4944                         Location :: i(),
4945                         V0 :: i(),
4946                         V1 :: i()) ->
4947                            ok
4948
4949       programUniform2uiv(Program :: i(),
4950                          Location :: i(),
4951                          Value :: [{i(), i()}]) ->
4952                             ok
4953
4954       programUniform3d(Program :: i(),
4955                        Location :: i(),
4956                        V0 :: f(),
4957                        V1 :: f(),
4958                        V2 :: f()) ->
4959                           ok
4960
4961       programUniform3dv(Program :: i(),
4962                         Location :: i(),
4963                         Value :: [{f(), f(), f()}]) ->
4964                            ok
4965
4966       programUniform3f(Program :: i(),
4967                        Location :: i(),
4968                        V0 :: f(),
4969                        V1 :: f(),
4970                        V2 :: f()) ->
4971                           ok
4972
4973       programUniform3fv(Program :: i(),
4974                         Location :: i(),
4975                         Value :: [{f(), f(), f()}]) ->
4976                            ok
4977
4978       programUniform3i(Program :: i(),
4979                        Location :: i(),
4980                        V0 :: i(),
4981                        V1 :: i(),
4982                        V2 :: i()) ->
4983                           ok
4984
4985       programUniform3iv(Program :: i(),
4986                         Location :: i(),
4987                         Value :: [{i(), i(), i()}]) ->
4988                            ok
4989
4990       programUniform3ui(Program :: i(),
4991                         Location :: i(),
4992                         V0 :: i(),
4993                         V1 :: i(),
4994                         V2 :: i()) ->
4995                            ok
4996
4997       programUniform3uiv(Program :: i(),
4998                          Location :: i(),
4999                          Value :: [{i(), i(), i()}]) ->
5000                             ok
5001
5002       programUniform4d(Program :: i(),
5003                        Location :: i(),
5004                        V0 :: f(),
5005                        V1 :: f(),
5006                        V2 :: f(),
5007                        V3 :: f()) ->
5008                           ok
5009
5010       programUniform4dv(Program :: i(),
5011                         Location :: i(),
5012                         Value :: [{f(), f(), f(), f()}]) ->
5013                            ok
5014
5015       programUniform4f(Program :: i(),
5016                        Location :: i(),
5017                        V0 :: f(),
5018                        V1 :: f(),
5019                        V2 :: f(),
5020                        V3 :: f()) ->
5021                           ok
5022
5023       programUniform4fv(Program :: i(),
5024                         Location :: i(),
5025                         Value :: [{f(), f(), f(), f()}]) ->
5026                            ok
5027
5028       programUniform4i(Program :: i(),
5029                        Location :: i(),
5030                        V0 :: i(),
5031                        V1 :: i(),
5032                        V2 :: i(),
5033                        V3 :: i()) ->
5034                           ok
5035
5036       programUniform4iv(Program :: i(),
5037                         Location :: i(),
5038                         Value :: [{i(), i(), i(), i()}]) ->
5039                            ok
5040
5041       programUniform4ui(Program :: i(),
5042                         Location :: i(),
5043                         V0 :: i(),
5044                         V1 :: i(),
5045                         V2 :: i(),
5046                         V3 :: i()) ->
5047                            ok
5048
5049       programUniform4uiv(Program :: i(),
5050                          Location :: i(),
5051                          Value :: [{i(), i(), i(), i()}]) ->
5052                             ok
5053
5054       programUniformMatrix2dv(Program :: i(),
5055                               Location :: i(),
5056                               Transpose :: 0 | 1,
5057                               Value :: [{f(), f(), f(), f()}]) ->
5058                                  ok
5059
5060       programUniformMatrix2fv(Program :: i(),
5061                               Location :: i(),
5062                               Transpose :: 0 | 1,
5063                               Value :: [{f(), f(), f(), f()}]) ->
5064                                  ok
5065
5066       programUniformMatrix2x3dv(Program :: i(),
5067                                 Location :: i(),
5068                                 Transpose :: 0 | 1,
5069                                 Value ::
5070                                     [{f(), f(), f(), f(), f(), f()}]) ->
5071                                    ok
5072
5073       programUniformMatrix2x3fv(Program :: i(),
5074                                 Location :: i(),
5075                                 Transpose :: 0 | 1,
5076                                 Value ::
5077                                     [{f(), f(), f(), f(), f(), f()}]) ->
5078                                    ok
5079
5080       programUniformMatrix2x4dv(Program, Location, Transpose, Value) ->
5081                                    ok
5082
5083       programUniformMatrix2x4fv(Program, Location, Transpose, Value) ->
5084                                    ok
5085
5086       programUniformMatrix3dv(Program, Location, Transpose, Value) -> ok
5087
5088       programUniformMatrix3fv(Program, Location, Transpose, Value) -> ok
5089
5090       programUniformMatrix3x2dv(Program :: i(),
5091                                 Location :: i(),
5092                                 Transpose :: 0 | 1,
5093                                 Value ::
5094                                     [{f(), f(), f(), f(), f(), f()}]) ->
5095                                    ok
5096
5097       programUniformMatrix3x2fv(Program :: i(),
5098                                 Location :: i(),
5099                                 Transpose :: 0 | 1,
5100                                 Value ::
5101                                     [{f(), f(), f(), f(), f(), f()}]) ->
5102                                    ok
5103
5104       programUniformMatrix3x4dv(Program, Location, Transpose, Value) ->
5105                                    ok
5106
5107       programUniformMatrix3x4fv(Program, Location, Transpose, Value) ->
5108                                    ok
5109
5110       programUniformMatrix4dv(Program, Location, Transpose, Value) -> ok
5111
5112       programUniformMatrix4fv(Program, Location, Transpose, Value) -> ok
5113
5114       programUniformMatrix4x2dv(Program, Location, Transpose, Value) ->
5115                                    ok
5116
5117       programUniformMatrix4x2fv(Program, Location, Transpose, Value) ->
5118                                    ok
5119
5120       programUniformMatrix4x3dv(Program, Location, Transpose, Value) ->
5121                                    ok
5122
5123       programUniformMatrix4x3fv(Program, Location, Transpose, Value) ->
5124                                    ok
5125
5126              Types:
5127
5128                 Program = Location = i()
5129                 Transpose = 0 | 1
5130                 Value =
5131                     [{f(),  f(), f(), f(), f(), f(), f(), f(), f(), f(), f(),
5132                 f()}]
5133
5134              gl:programUniform() modifies the value of a uniform variable  or
5135              a  uniform  variable array. The location of the uniform variable
5136              to be modified is specified by Location, which should be a value
5137              returned  by  gl:getUniformLocation/2. gl:programUniform() oper‐
5138              ates on the program object specified by Program.
5139
5140              External documentation.
5141
5142       provokingVertex(Mode :: enum()) -> ok
5143
5144              Flatshading a vertex shader varying output means to  assign  all
5145              vetices  of  the  primitive  the same value for that output. The
5146              vertex from which these values is derived is known as  the  pro‐
5147              voking vertex and gl:provokingVertex/1 specifies which vertex is
5148              to be used as the source of data for flat shaded varyings.
5149
5150              External documentation.
5151
5152       popAttrib() -> ok
5153
5154       pushAttrib(Mask :: i()) -> ok
5155
5156              gl:pushAttrib/1 takes one argument, a mask that indicates  which
5157              groups  of  state variables to save on the attribute stack. Sym‐
5158              bolic constants are used to set bits in the mask. Mask is  typi‐
5159              cally  constructed  by  specifying  the bitwise-or of several of
5160              these constants together. The special  mask  ?GL_ALL_ATTRIB_BITS
5161              can be used to save all stackable states.
5162
5163              External documentation.
5164
5165       popClientAttrib() -> ok
5166
5167       pushClientAttrib(Mask :: i()) -> ok
5168
5169              gl:pushClientAttrib/1  takes one argument, a mask that indicates
5170              which groups of client-state variables to save on the client at‐
5171              tribute  stack.  Symbolic  constants are used to set bits in the
5172              mask. Mask is typically constructed by specifying the bitwise-or
5173              of  several  of  these  constants  together.  The  special  mask
5174              ?GL_CLIENT_ALL_ATTRIB_BITS can be used  to  save  all  stackable
5175              client state.
5176
5177              External documentation.
5178
5179       popDebugGroup() -> ok
5180
5181       pushDebugGroup(Source :: enum(),
5182                      Id :: i(),
5183                      Length :: i(),
5184                      Message :: string()) ->
5185                         ok
5186
5187              gl:pushDebugGroup/4 pushes a debug group described by the string
5188              Message into the command stream. The value of Id  specifies  the
5189              ID of messages generated. The parameter Length contains the num‐
5190              ber of characters in Message. If Length is negative, it  is  im‐
5191              plied  that  Message contains a null terminated string. The mes‐
5192              sage  has  the  specified  Source  and   Id,   the   Type?GL_DE‐
5193              BUG_TYPE_PUSH_GROUP,   and  Severity?GL_DEBUG_SEVERITY_NOTIFICA‐
5194              TION. The GL will put a new debug group  on  top  of  the  debug
5195              group  stack  which  inherits the control of the volume of debug
5196              output of the debug group previously residing on the top of  the
5197              debug  group stack. Because debug groups are strictly hierarchi‐
5198              cal, any additional control of the debug output volume will only
5199              apply  within the active debug group and the debug groups pushed
5200              on top of the active debug group.
5201
5202              External documentation.
5203
5204       popMatrix() -> ok
5205
5206       pushMatrix() -> ok
5207
5208              There is a stack of matrices for each of the  matrix  modes.  In
5209              ?GL_MODELVIEW mode, the stack depth is at least 32. In the other
5210              modes, ?GL_COLOR, ?GL_PROJECTION, and ?GL_TEXTURE, the depth  is
5211              at  least 2. The current matrix in any mode is the matrix on the
5212              top of the stack for that mode.
5213
5214              External documentation.
5215
5216       popName() -> ok
5217
5218       pushName(Name :: i()) -> ok
5219
5220              The name stack is used during selection mode to  allow  sets  of
5221              rendering  commands to be uniquely identified. It consists of an
5222              ordered set of unsigned integers and is initially empty.
5223
5224              External documentation.
5225
5226       queryCounter(Id :: i(), Target :: enum()) -> ok
5227
5228              gl:queryCounter/2 causes the GL to record the current time  into
5229              the  query  object  named  Id. Target must be ?GL_TIMESTAMP. The
5230              time is recorded after all previous commands on  the  GL  client
5231              and  server  state and the framebuffer have been fully realized.
5232              When the time is recorded, the query result for that  object  is
5233              marked  available.  gl:queryCounter/2  timer queries can be used
5234              within a gl:beginQuery/2 / gl:endQuery/1 block where the  target
5235              is  ?GL_TIME_ELAPSED  and  it does not affect the result of that
5236              query object.
5237
5238              External documentation.
5239
5240       rasterPos2d(X :: f(), Y :: f()) -> ok
5241
5242       rasterPos2dv(X1 :: {X :: f(), Y :: f()}) -> ok
5243
5244       rasterPos2f(X :: f(), Y :: f()) -> ok
5245
5246       rasterPos2fv(X1 :: {X :: f(), Y :: f()}) -> ok
5247
5248       rasterPos2i(X :: i(), Y :: i()) -> ok
5249
5250       rasterPos2iv(X1 :: {X :: i(), Y :: i()}) -> ok
5251
5252       rasterPos2s(X :: i(), Y :: i()) -> ok
5253
5254       rasterPos2sv(X1 :: {X :: i(), Y :: i()}) -> ok
5255
5256       rasterPos3d(X :: f(), Y :: f(), Z :: f()) -> ok
5257
5258       rasterPos3dv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
5259
5260       rasterPos3f(X :: f(), Y :: f(), Z :: f()) -> ok
5261
5262       rasterPos3fv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
5263
5264       rasterPos3i(X :: i(), Y :: i(), Z :: i()) -> ok
5265
5266       rasterPos3iv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
5267
5268       rasterPos3s(X :: i(), Y :: i(), Z :: i()) -> ok
5269
5270       rasterPos3sv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
5271
5272       rasterPos4d(X :: f(), Y :: f(), Z :: f(), W :: f()) -> ok
5273
5274       rasterPos4dv(X1 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) -> ok
5275
5276       rasterPos4f(X :: f(), Y :: f(), Z :: f(), W :: f()) -> ok
5277
5278       rasterPos4fv(X1 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) -> ok
5279
5280       rasterPos4i(X :: i(), Y :: i(), Z :: i(), W :: i()) -> ok
5281
5282       rasterPos4iv(X1 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) -> ok
5283
5284       rasterPos4s(X :: i(), Y :: i(), Z :: i(), W :: i()) -> ok
5285
5286       rasterPos4sv(X1 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) -> ok
5287
5288              The GL maintains a 3D position in window coordinates. This posi‐
5289              tion,  called the raster position, is used to position pixel and
5290              bitmap write operations. It is maintained  with  subpixel  accu‐
5291              racy. See gl:bitmap/7, gl:drawPixels/5, and gl:copyPixels/5.
5292
5293              External documentation.
5294
5295       readBuffer(Mode :: enum()) -> ok
5296
5297              gl:readBuffer/1  specifies a color buffer as the source for sub‐
5298              sequent  gl:readPixels/7,   gl:copyTexImage1D/7,   gl:copyTexIm‐
5299              age2D/8,   gl:copyTexSubImage1D/6,  gl:copyTexSubImage2D/8,  and
5300              gl:copyTexSubImage3D/9 commands. Mode accepts one of  twelve  or
5301              more predefined values. In a fully configured system, ?GL_FRONT,
5302              ?GL_LEFT, and ?GL_FRONT_LEFT all name  the  front  left  buffer,
5303              ?GL_FRONT_RIGHT  and  ?GL_RIGHT name the front right buffer, and
5304              ?GL_BACK_LEFT and ?GL_BACK name the back  left  buffer.  Further
5305              more,  the  constants ?GL_COLOR_ATTACHMENTi may be used to indi‐
5306              cate the ith color attachment where i ranges from  zero  to  the
5307              value of ?GL_MAX_COLOR_ATTACHMENTS minus one.
5308
5309              External documentation.
5310
5311       readPixels(X, Y, Width, Height, Format, Type, Pixels) -> ok
5312
5313              Types:
5314
5315                 X = Y = Width = Height = i()
5316                 Format = Type = enum()
5317                 Pixels = mem()
5318
5319              gl:readPixels/7  and  glReadnPixels  return  pixel data from the
5320              frame buffer, starting with the pixel whose lower left corner is
5321              at  location  (X,  Y),  into  client memory starting at location
5322              Data. Several parameters control the  processing  of  the  pixel
5323              data  before  it  is placed into client memory. These parameters
5324              are set with gl:pixelStore(). This reference page describes  the
5325              effects  on  gl:readPixels/7  and glReadnPixels of most, but not
5326              all of the parameters specified by these three commands.
5327
5328              External documentation.
5329
5330       rectd(X1 :: f(), Y1 :: f(), X2 :: f(), Y2 :: f()) -> ok
5331
5332       rectdv(V1 :: {f(), f()}, V2 :: {f(), f()}) -> ok
5333
5334       rectf(X1 :: f(), Y1 :: f(), X2 :: f(), Y2 :: f()) -> ok
5335
5336       rectfv(V1 :: {f(), f()}, V2 :: {f(), f()}) -> ok
5337
5338       recti(X1 :: i(), Y1 :: i(), X2 :: i(), Y2 :: i()) -> ok
5339
5340       rectiv(V1 :: {i(), i()}, V2 :: {i(), i()}) -> ok
5341
5342       rects(X1 :: i(), Y1 :: i(), X2 :: i(), Y2 :: i()) -> ok
5343
5344       rectsv(V1 :: {i(), i()}, V2 :: {i(), i()}) -> ok
5345
5346              gl:rect() supports efficient specification of rectangles as  two
5347              corner  points. Each rectangle command takes four arguments, or‐
5348              ganized either as two consecutive pairs of (x y) coordinates  or
5349              as  two  pointers  to arrays, each containing an (x y) pair. The
5350              resulting rectangle is defined in the z=0 plane.
5351
5352              External documentation.
5353
5354       releaseShaderCompiler() -> ok
5355
5356              gl:releaseShaderCompiler/0 provides a hint to the implementation
5357              that  it  may free internal resources associated with its shader
5358              compiler. gl:compileShader/1 may subsequently be called and  the
5359              implementation  may at that time reallocate resources previously
5360              freed by the call to gl:releaseShaderCompiler/0.
5361
5362              External documentation.
5363
5364       renderMode(Mode :: enum()) -> i()
5365
5366              gl:renderMode/1 sets the rasterization mode. It takes one  argu‐
5367              ment, Mode, which can assume one of three predefined values:
5368
5369              External documentation.
5370
5371       renderbufferStorage(Target :: enum(),
5372                           Internalformat :: enum(),
5373                           Width :: i(),
5374                           Height :: i()) ->
5375                              ok
5376
5377              gl:renderbufferStorage/4  is  equivalent  to  calling gl:render‐
5378              bufferStorageMultisample/5 with the Samples  set  to  zero,  and
5379              glNamedRenderbufferStorage  is equivalent to calling glNamedRen‐
5380              derbufferStorageMultisample with the samples set to zero.
5381
5382              External documentation.
5383
5384       renderbufferStorageMultisample(Target :: enum(),
5385                                      Samples :: i(),
5386                                      Internalformat :: enum(),
5387                                      Width :: i(),
5388                                      Height :: i()) ->
5389                                         ok
5390
5391              gl:renderbufferStorageMultisample/5 and glNamedRenderbufferStor‐
5392              ageMultisample  establish  the  data storage, format, dimensions
5393              and number of samples of a renderbuffer object's image.
5394
5395              External documentation.
5396
5397       resetHistogram(Target :: enum()) -> ok
5398
5399              gl:resetHistogram/1 resets all the elements of the current  his‐
5400              togram table to zero.
5401
5402              External documentation.
5403
5404       resetMinmax(Target :: enum()) -> ok
5405
5406              gl:resetMinmax/1 resets the elements of the current minmax table
5407              to their initial values: the ``maximum''  element  receives  the
5408              minimum  possible  component values, and the ``minimum'' element
5409              receives the maximum possible component values.
5410
5411              External documentation.
5412
5413       resumeTransformFeedback() -> ok
5414
5415              gl:resumeTransformFeedback/0 resumes transform  feedback  opera‐
5416              tions  on  the  currently active transform feedback object. When
5417              transform feedback operations are paused, transform feedback  is
5418              still  considered  active  and  changing most transform feedback
5419              state related to the object results in an error. However, a  new
5420              transform  feedback object may be bound while transform feedback
5421              is paused.
5422
5423              External documentation.
5424
5425       rotated(Angle :: f(), X :: f(), Y :: f(), Z :: f()) -> ok
5426
5427       rotatef(Angle :: f(), X :: f(), Y :: f(), Z :: f()) -> ok
5428
5429              gl:rotate() produces a rotation of Angle degrees around the vec‐
5430              tor  (x y z). The current matrix (see gl:matrixMode/1) is multi‐
5431              plied by a rotation matrix with the product replacing  the  cur‐
5432              rent  matrix, as if gl:multMatrix() were called with the follow‐
5433              ing matrix as its argument:
5434
5435              External documentation.
5436
5437       sampleCoverage(Value :: clamp(), Invert :: 0 | 1) -> ok
5438
5439              Multisampling samples a pixel multiple times at  various  imple‐
5440              mentation-dependent  subpixel locations to generate antialiasing
5441              effects. Multisampling transparently antialiases points,  lines,
5442              polygons, and images if it is enabled.
5443
5444              External documentation.
5445
5446       sampleMaski(MaskNumber :: i(), Mask :: i()) -> ok
5447
5448              gl:sampleMaski/2 sets one 32-bit sub-word of the multi-word sam‐
5449              ple mask, ?GL_SAMPLE_MASK_VALUE.
5450
5451              External documentation.
5452
5453       samplerParameterIiv(Sampler :: i(),
5454                           Pname :: enum(),
5455                           Param :: [i()]) ->
5456                              ok
5457
5458       samplerParameterIuiv(Sampler :: i(),
5459                            Pname :: enum(),
5460                            Param :: [i()]) ->
5461                               ok
5462
5463       samplerParameterf(Sampler :: i(), Pname :: enum(), Param :: f()) ->
5464                            ok
5465
5466       samplerParameterfv(Sampler :: i(),
5467                          Pname :: enum(),
5468                          Param :: [f()]) ->
5469                             ok
5470
5471       samplerParameteri(Sampler :: i(), Pname :: enum(), Param :: i()) ->
5472                            ok
5473
5474       samplerParameteriv(Sampler :: i(),
5475                          Pname :: enum(),
5476                          Param :: [i()]) ->
5477                             ok
5478
5479              gl:samplerParameter() assigns the value or values in  Params  to
5480              the  sampler parameter specified as Pname. Sampler specifies the
5481              sampler object to be modified, and must be the name of a sampler
5482              object  previously returned from a call to gl:genSamplers/1. The
5483              following symbols are accepted in Pname:
5484
5485              External documentation.
5486
5487       scaled(X :: f(), Y :: f(), Z :: f()) -> ok
5488
5489       scalef(X :: f(), Y :: f(), Z :: f()) -> ok
5490
5491              gl:scale() produces a nonuniform scaling along the x, y,  and  z
5492              axes.  The  three  parameters  indicate the desired scale factor
5493              along each of the three axes.
5494
5495              External documentation.
5496
5497       scissor(X :: i(), Y :: i(), Width :: i(), Height :: i()) -> ok
5498
5499              gl:scissor/4 defines a rectangle, called  the  scissor  box,  in
5500              window  coordinates.  The  first two arguments, X and Y, specify
5501              the lower left corner of the box. Width and Height  specify  the
5502              width and height of the box.
5503
5504              External documentation.
5505
5506       scissorArrayv(First :: i(), V :: [{i(), i(), i(), i()}]) -> ok
5507
5508              gl:scissorArrayv/2  defines rectangles, called scissor boxes, in
5509              window coordinates for each viewport. First specifies the  index
5510              of  the first scissor box to modify and Count specifies the num‐
5511              ber of scissor boxes to modify. First  must  be  less  than  the
5512              value  of ?GL_MAX_VIEWPORTS, and First + Count must be less than
5513              or equal to the value of ?GL_MAX_VIEWPORTS. V specifies the  ad‐
5514              dress  of an array containing integers specifying the lower left
5515              corner of the scissor boxes, and the width  and  height  of  the
5516              scissor boxes, in that order.
5517
5518              External documentation.
5519
5520       scissorIndexed(Index :: i(),
5521                      Left :: i(),
5522                      Bottom :: i(),
5523                      Width :: i(),
5524                      Height :: i()) ->
5525                         ok
5526
5527       scissorIndexedv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
5528
5529              gl:scissorIndexed/5  defines  the  scissor  box  for a specified
5530              viewport. Index specifies the index of scissor  box  to  modify.
5531              Index  must  be  less  than  the value of ?GL_MAX_VIEWPORTS. For
5532              gl:scissorIndexed/5, Left, Bottom, Width and Height specify  the
5533              left,  bottom,  width  and height of the scissor box, in pixels,
5534              respectively. For gl:scissorIndexedv/2, V specifies the  address
5535              of an array containing integers specifying the lower left corner
5536              of the scissor box, and the width and height of the scissor box,
5537              in that order.
5538
5539              External documentation.
5540
5541       secondaryColor3b(Red :: i(), Green :: i(), Blue :: i()) -> ok
5542
5543       secondaryColor3bv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5544                            ok
5545
5546       secondaryColor3d(Red :: f(), Green :: f(), Blue :: f()) -> ok
5547
5548       secondaryColor3dv(X1 :: {Red :: f(), Green :: f(), Blue :: f()}) ->
5549                            ok
5550
5551       secondaryColor3f(Red :: f(), Green :: f(), Blue :: f()) -> ok
5552
5553       secondaryColor3fv(X1 :: {Red :: f(), Green :: f(), Blue :: f()}) ->
5554                            ok
5555
5556       secondaryColor3i(Red :: i(), Green :: i(), Blue :: i()) -> ok
5557
5558       secondaryColor3iv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5559                            ok
5560
5561       secondaryColor3s(Red :: i(), Green :: i(), Blue :: i()) -> ok
5562
5563       secondaryColor3sv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5564                            ok
5565
5566       secondaryColor3ub(Red :: i(), Green :: i(), Blue :: i()) -> ok
5567
5568       secondaryColor3ubv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5569                             ok
5570
5571       secondaryColor3ui(Red :: i(), Green :: i(), Blue :: i()) -> ok
5572
5573       secondaryColor3uiv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5574                             ok
5575
5576       secondaryColor3us(Red :: i(), Green :: i(), Blue :: i()) -> ok
5577
5578       secondaryColor3usv(X1 :: {Red :: i(), Green :: i(), Blue :: i()}) ->
5579                             ok
5580
5581              The  GL  stores both a primary four-valued RGBA color and a sec‐
5582              ondary four-valued RGBA color (where alpha is always set to 0.0)
5583              that is associated with every vertex.
5584
5585              External documentation.
5586
5587       secondaryColorPointer(Size :: i(),
5588                             Type :: enum(),
5589                             Stride :: i(),
5590                             Pointer :: offset() | mem()) ->
5591                                ok
5592
5593              gl:secondaryColorPointer/4  specifies the location and data for‐
5594              mat of an array of color components to use when rendering.  Size
5595              specifies  the  number  of  components per color, and must be 3.
5596              Type specifies the data type of each color component, and Stride
5597              specifies  the  byte stride from one color to the next, allowing
5598              vertices and attributes to be packed  into  a  single  array  or
5599              stored in separate arrays.
5600
5601              External documentation.
5602
5603       selectBuffer(Size :: i(), Buffer :: mem()) -> ok
5604
5605              gl:selectBuffer/2  has  two arguments: Buffer is a pointer to an
5606              array of unsigned integers, and Size indicates the size  of  the
5607              array.  Buffer  returns values from the name stack (see gl:init‐
5608              Names/0, gl:loadName/1, gl:pushName/1) when the  rendering  mode
5609              is  ?GL_SELECT  (see gl:renderMode/1). gl:selectBuffer/2 must be
5610              issued before selection mode is enabled, and it must not be  is‐
5611              sued while the rendering mode is ?GL_SELECT.
5612
5613              External documentation.
5614
5615       separableFilter2D(Target, Internalformat, Width, Height, Format,
5616                         Type, Row, Column) ->
5617                            ok
5618
5619              Types:
5620
5621                 Target = Internalformat = enum()
5622                 Width = Height = i()
5623                 Format = Type = enum()
5624                 Row = Column = offset() | mem()
5625
5626              gl:separableFilter2D/8 builds a two-dimensional separable convo‐
5627              lution filter kernel from two arrays of pixels.
5628
5629              External documentation.
5630
5631       shadeModel(Mode :: enum()) -> ok
5632
5633              GL primitives can have either flat  or  smooth  shading.  Smooth
5634              shading,  the default, causes the computed colors of vertices to
5635              be interpolated as the primitive is  rasterized,  typically  as‐
5636              signing  different colors to each resulting pixel fragment. Flat
5637              shading selects the computed color of just one  vertex  and  as‐
5638              signs  it  to all the pixel fragments generated by rasterizing a
5639              single primitive. In either case, the computed color of a vertex
5640              is  the  result of lighting if lighting is enabled, or it is the
5641              current color at the time the vertex was specified  if  lighting
5642              is disabled.
5643
5644              External documentation.
5645
5646       shaderBinary(Shaders :: [i()],
5647                    Binaryformat :: enum(),
5648                    Binary :: binary()) ->
5649                       ok
5650
5651              gl:shaderBinary/3 loads pre-compiled shader binary code into the
5652              Count shader objects whose handles are given in Shaders.  Binary
5653              points  to  Length  bytes of binary shader code stored in client
5654              memory. BinaryFormat specifies the format  of  the  pre-compiled
5655              code.
5656
5657              External documentation.
5658
5659       shaderSource(Shader :: i(), String :: [unicode:chardata()]) -> ok
5660
5661              gl:shaderSource/2  sets  the source code in Shader to the source
5662              code in the array of strings specified  by  String.  Any  source
5663              code  previously  stored  in the shader object is completely re‐
5664              placed. The number of strings  in  the  array  is  specified  by
5665              Count.  If  Length  is  ?NULL, each string is assumed to be null
5666              terminated. If Length is a value other than ?NULL, it points  to
5667              an  array containing a string length for each of the correspond‐
5668              ing elements of String. Each element in  the  Length  array  may
5669              contain the length of the corresponding string (the null charac‐
5670              ter is not counted as part of the string length) or a value less
5671              than  0  to  indicate  that  the  string is null terminated. The
5672              source code strings are not scanned or parsed at this time; they
5673              are simply copied into the specified shader object.
5674
5675              External documentation.
5676
5677       shaderStorageBlockBinding(Program :: i(),
5678                                 StorageBlockIndex :: i(),
5679                                 StorageBlockBinding :: i()) ->
5680                                    ok
5681
5682              gl:shaderStorageBlockBinding/3,  changes the active shader stor‐
5683              age block with an assigned index of StorageBlockIndex in program
5684              object Program. StorageBlockIndex must be an active shader stor‐
5685              age block index in Program.  StorageBlockBinding  must  be  less
5686              than  the  value  of  ?GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS. If
5687              successful, gl:shaderStorageBlockBinding/3 specifies  that  Pro‐
5688              gram  will  use the data store of the buffer object bound to the
5689              binding point StorageBlockBinding to read and write  the  values
5690              of  the  buffer variables in the shader storage block identified
5691              by StorageBlockIndex.
5692
5693              External documentation.
5694
5695       stencilFunc(Func :: enum(), Ref :: i(), Mask :: i()) -> ok
5696
5697              Stenciling, like depth-buffering, enables and  disables  drawing
5698              on  a per-pixel basis. Stencil planes are first drawn into using
5699              GL drawing primitives, then geometry and images are rendered us‐
5700              ing the stencil planes to mask out portions of the screen. Sten‐
5701              ciling is typically used in multipass  rendering  algorithms  to
5702              achieve  special  effects,  such  as decals, outlining, and con‐
5703              structive solid geometry rendering.
5704
5705              External documentation.
5706
5707       stencilFuncSeparate(Face :: enum(),
5708                           Func :: enum(),
5709                           Ref :: i(),
5710                           Mask :: i()) ->
5711                              ok
5712
5713              Stenciling, like depth-buffering, enables and  disables  drawing
5714              on  a per-pixel basis. You draw into the stencil planes using GL
5715              drawing primitives, then render geometry and images,  using  the
5716              stencil planes to mask out portions of the screen. Stenciling is
5717              typically used in multipass rendering algorithms to achieve spe‐
5718              cial  effects, such as decals, outlining, and constructive solid
5719              geometry rendering.
5720
5721              External documentation.
5722
5723       stencilMask(Mask :: i()) -> ok
5724
5725              gl:stencilMask/1 controls the writing of individual bits in  the
5726              stencil planes. The least significant n bits of Mask, where n is
5727              the number of bits in the stencil buffer, specify a mask.  Where
5728              a  1  appears  in the mask, it's possible to write to the corre‐
5729              sponding bit in the stencil buffer. Where a 0 appears, the  cor‐
5730              responding  bit  is write-protected. Initially, all bits are en‐
5731              abled for writing.
5732
5733              External documentation.
5734
5735       stencilMaskSeparate(Face :: enum(), Mask :: i()) -> ok
5736
5737              gl:stencilMaskSeparate/2 controls the writing of individual bits
5738              in  the  stencil  planes.  The least significant n bits of Mask,
5739              where n is the number of bits in the stencil buffer,  specify  a
5740              mask.  Where  a 1 appears in the mask, it's possible to write to
5741              the corresponding bit in the stencil buffer. Where a 0  appears,
5742              the  corresponding  bit  is write-protected. Initially, all bits
5743              are enabled for writing.
5744
5745              External documentation.
5746
5747       stencilOp(Fail :: enum(), Zfail :: enum(), Zpass :: enum()) -> ok
5748
5749              Stenciling, like depth-buffering, enables and  disables  drawing
5750              on  a per-pixel basis. You draw into the stencil planes using GL
5751              drawing primitives, then render geometry and images,  using  the
5752              stencil planes to mask out portions of the screen. Stenciling is
5753              typically used in multipass rendering algorithms to achieve spe‐
5754              cial  effects, such as decals, outlining, and constructive solid
5755              geometry rendering.
5756
5757              External documentation.
5758
5759       stencilOpSeparate(Face :: enum(),
5760                         Sfail :: enum(),
5761                         Dpfail :: enum(),
5762                         Dppass :: enum()) ->
5763                            ok
5764
5765              Stenciling, like depth-buffering, enables and  disables  drawing
5766              on  a per-pixel basis. You draw into the stencil planes using GL
5767              drawing primitives, then render geometry and images,  using  the
5768              stencil planes to mask out portions of the screen. Stenciling is
5769              typically used in multipass rendering algorithms to achieve spe‐
5770              cial  effects, such as decals, outlining, and constructive solid
5771              geometry rendering.
5772
5773              External documentation.
5774
5775       texBuffer(Target :: enum(),
5776                 Internalformat :: enum(),
5777                 Buffer :: i()) ->
5778                    ok
5779
5780       textureBuffer(Texture :: i(),
5781                     Internalformat :: enum(),
5782                     Buffer :: i()) ->
5783                        ok
5784
5785              gl:texBuffer/3 and gl:textureBuffer/3 attaches the data store of
5786              a  specified  buffer  object  to a specified texture object, and
5787              specify the storage format for the texture image  found  in  the
5788              buffer object. The texture object must be a buffer texture.
5789
5790              External documentation.
5791
5792       texBufferRange(Target :: enum(),
5793                      Internalformat :: enum(),
5794                      Buffer :: i(),
5795                      Offset :: i(),
5796                      Size :: i()) ->
5797                         ok
5798
5799       textureBufferRange(Texture :: i(),
5800                          Internalformat :: enum(),
5801                          Buffer :: i(),
5802                          Offset :: i(),
5803                          Size :: i()) ->
5804                             ok
5805
5806              gl:texBufferRange/5  and  gl:textureBufferRange/5 attach a range
5807              of the data store of a specified buffer object  to  a  specified
5808              texture  object,  and specify the storage format for the texture
5809              image found in the buffer object. The texture object must  be  a
5810              buffer texture.
5811
5812              External documentation.
5813
5814       texCoord1d(S :: f()) -> ok
5815
5816       texCoord1dv(X1 :: {S :: f()}) -> ok
5817
5818       texCoord1f(S :: f()) -> ok
5819
5820       texCoord1fv(X1 :: {S :: f()}) -> ok
5821
5822       texCoord1i(S :: i()) -> ok
5823
5824       texCoord1iv(X1 :: {S :: i()}) -> ok
5825
5826       texCoord1s(S :: i()) -> ok
5827
5828       texCoord1sv(X1 :: {S :: i()}) -> ok
5829
5830       texCoord2d(S :: f(), T :: f()) -> ok
5831
5832       texCoord2dv(X1 :: {S :: f(), T :: f()}) -> ok
5833
5834       texCoord2f(S :: f(), T :: f()) -> ok
5835
5836       texCoord2fv(X1 :: {S :: f(), T :: f()}) -> ok
5837
5838       texCoord2i(S :: i(), T :: i()) -> ok
5839
5840       texCoord2iv(X1 :: {S :: i(), T :: i()}) -> ok
5841
5842       texCoord2s(S :: i(), T :: i()) -> ok
5843
5844       texCoord2sv(X1 :: {S :: i(), T :: i()}) -> ok
5845
5846       texCoord3d(S :: f(), T :: f(), R :: f()) -> ok
5847
5848       texCoord3dv(X1 :: {S :: f(), T :: f(), R :: f()}) -> ok
5849
5850       texCoord3f(S :: f(), T :: f(), R :: f()) -> ok
5851
5852       texCoord3fv(X1 :: {S :: f(), T :: f(), R :: f()}) -> ok
5853
5854       texCoord3i(S :: i(), T :: i(), R :: i()) -> ok
5855
5856       texCoord3iv(X1 :: {S :: i(), T :: i(), R :: i()}) -> ok
5857
5858       texCoord3s(S :: i(), T :: i(), R :: i()) -> ok
5859
5860       texCoord3sv(X1 :: {S :: i(), T :: i(), R :: i()}) -> ok
5861
5862       texCoord4d(S :: f(), T :: f(), R :: f(), Q :: f()) -> ok
5863
5864       texCoord4dv(X1 :: {S :: f(), T :: f(), R :: f(), Q :: f()}) -> ok
5865
5866       texCoord4f(S :: f(), T :: f(), R :: f(), Q :: f()) -> ok
5867
5868       texCoord4fv(X1 :: {S :: f(), T :: f(), R :: f(), Q :: f()}) -> ok
5869
5870       texCoord4i(S :: i(), T :: i(), R :: i(), Q :: i()) -> ok
5871
5872       texCoord4iv(X1 :: {S :: i(), T :: i(), R :: i(), Q :: i()}) -> ok
5873
5874       texCoord4s(S :: i(), T :: i(), R :: i(), Q :: i()) -> ok
5875
5876       texCoord4sv(X1 :: {S :: i(), T :: i(), R :: i(), Q :: i()}) -> ok
5877
5878              gl:texCoord()  specifies texture coordinates in one, two, three,
5879              or four dimensions. gl:texCoord1() sets the current texture  co‐
5880              ordinates to (s 0 0 1); a call to gl:texCoord2() sets them to (s
5881              t 0 1). Similarly, gl:texCoord3() specifies the texture  coordi‐
5882              nates  as  (s t r 1), and gl:texCoord4() defines all four compo‐
5883              nents explicitly as (s t r q).
5884
5885              External documentation.
5886
5887       texCoordPointer(Size :: i(),
5888                       Type :: enum(),
5889                       Stride :: i(),
5890                       Ptr :: offset() | mem()) ->
5891                          ok
5892
5893              gl:texCoordPointer/4 specifies the location and data  format  of
5894              an  array  of  texture  coordinates  to use when rendering. Size
5895              specifies the number of coordinates per texture coordinate  set,
5896              and  must be 1, 2, 3, or 4. Type specifies the data type of each
5897              texture coordinate, and Stride specifies the  byte  stride  from
5898              one  texture  coordinate  set to the next, allowing vertices and
5899              attributes to be packed into a single array or stored  in  sepa‐
5900              rate arrays. (Single-array storage may be more efficient on some
5901              implementations; see gl:interleavedArrays/3.)
5902
5903              External documentation.
5904
5905       texEnvf(Target :: enum(), Pname :: enum(), Param :: f()) -> ok
5906
5907       texEnvfv(Target :: enum(), Pname :: enum(), Params :: tuple()) ->
5908                   ok
5909
5910       texEnvi(Target :: enum(), Pname :: enum(), Param :: i()) -> ok
5911
5912       texEnviv(Target :: enum(), Pname :: enum(), Params :: tuple()) ->
5913                   ok
5914
5915              A texture environment specifies how texture  values  are  inter‐
5916              preted  when  a  fragment  is  textured. When Target is ?GL_TEX‐
5917              TURE_FILTER_CONTROL, Pname must  be  ?GL_TEXTURE_LOD_BIAS.  When
5918              Target  is  ?GL_TEXTURE_ENV,  Pname can be ?GL_TEXTURE_ENV_MODE,
5919              ?GL_TEXTURE_ENV_COLOR,    ?GL_COMBINE_RGB,    ?GL_COMBINE_ALPHA,
5920              ?GL_RGB_SCALE,   ?GL_ALPHA_SCALE,   ?GL_SRC0_RGB,  ?GL_SRC1_RGB,
5921              ?GL_SRC2_RGB, ?GL_SRC0_ALPHA, ?GL_SRC1_ALPHA, or ?GL_SRC2_ALPHA.
5922
5923              External documentation.
5924
5925       texGend(Coord :: enum(), Pname :: enum(), Param :: f()) -> ok
5926
5927       texGendv(Coord :: enum(), Pname :: enum(), Params :: tuple()) ->
5928                   ok
5929
5930       texGenf(Coord :: enum(), Pname :: enum(), Param :: f()) -> ok
5931
5932       texGenfv(Coord :: enum(), Pname :: enum(), Params :: tuple()) ->
5933                   ok
5934
5935       texGeni(Coord :: enum(), Pname :: enum(), Param :: i()) -> ok
5936
5937       texGeniv(Coord :: enum(), Pname :: enum(), Params :: tuple()) ->
5938                   ok
5939
5940              gl:texGen() selects a texture-coordinate generation function  or
5941              supplies  coefficients for one of the functions. Coord names one
5942              of the (s, t, r, q) texture coordinates; it must be one  of  the
5943              symbols  ?GL_S,  ?GL_T,  ?GL_R,  or  ?GL_Q. Pname must be one of
5944              three   symbolic   constants:   ?GL_TEXTURE_GEN_MODE,    ?GL_OB‐
5945              JECT_PLANE,  or ?GL_EYE_PLANE. If Pname is ?GL_TEXTURE_GEN_MODE,
5946              then  Params  chooses  a   mode,   one   of   ?GL_OBJECT_LINEAR,
5947              ?GL_EYE_LINEAR,  ?GL_SPHERE_MAP,  ?GL_NORMAL_MAP, or ?GL_REFLEC‐
5948              TION_MAP. If Pname is either ?GL_OBJECT_PLANE or  ?GL_EYE_PLANE,
5949              Params  contains coefficients for the corresponding texture gen‐
5950              eration function.
5951
5952              External documentation.
5953
5954       texImage1D(Target, Level, InternalFormat, Width, Border, Format,
5955                  Type, Pixels) ->
5956                     ok
5957
5958              Types:
5959
5960                 Target = enum()
5961                 Level = InternalFormat = Width = Border = i()
5962                 Format = Type = enum()
5963                 Pixels = offset() | mem()
5964
5965              Texturing maps a portion of a specified texture image onto  each
5966              graphical  primitive  for  which texturing is enabled. To enable
5967              and disable  one-dimensional  texturing,  call  gl:enable/1  and
5968              gl:disable/1 with argument ?GL_TEXTURE_1D.
5969
5970              External documentation.
5971
5972       texImage2D(Target, Level, InternalFormat, Width, Height, Border,
5973                  Format, Type, Pixels) ->
5974                     ok
5975
5976              Types:
5977
5978                 Target = enum()
5979                 Level = InternalFormat = Width = Height = Border = i()
5980                 Format = Type = enum()
5981                 Pixels = offset() | mem()
5982
5983              Texturing  allows  elements  of  an  image  array  to be read by
5984              shaders.
5985
5986              External documentation.
5987
5988       texImage2DMultisample(Target, Samples, Internalformat, Width,
5989                             Height, Fixedsamplelocations) ->
5990                                ok
5991
5992              Types:
5993
5994                 Target = enum()
5995                 Samples = i()
5996                 Internalformat = enum()
5997                 Width = Height = i()
5998                 Fixedsamplelocations = 0 | 1
5999
6000              gl:texImage2DMultisample/6 establishes the data storage, format,
6001              dimensions  and number of samples of a multisample texture's im‐
6002              age.
6003
6004              External documentation.
6005
6006       texImage3D(Target, Level, InternalFormat, Width, Height, Depth,
6007                  Border, Format, Type, Pixels) ->
6008                     ok
6009
6010              Types:
6011
6012                 Target = enum()
6013                 Level = InternalFormat = Width = Height = Depth  =  Border  =
6014                 i()
6015                 Format = Type = enum()
6016                 Pixels = offset() | mem()
6017
6018              Texturing  maps a portion of a specified texture image onto each
6019              graphical primitive for which texturing is  enabled.  To  enable
6020              and  disable  three-dimensional  texturing, call gl:enable/1 and
6021              gl:disable/1 with argument ?GL_TEXTURE_3D.
6022
6023              External documentation.
6024
6025       texImage3DMultisample(Target, Samples, Internalformat, Width,
6026                             Height, Depth, Fixedsamplelocations) ->
6027                                ok
6028
6029              Types:
6030
6031                 Target = enum()
6032                 Samples = i()
6033                 Internalformat = enum()
6034                 Width = Height = Depth = i()
6035                 Fixedsamplelocations = 0 | 1
6036
6037              gl:texImage3DMultisample/7 establishes the data storage, format,
6038              dimensions  and number of samples of a multisample texture's im‐
6039              age.
6040
6041              External documentation.
6042
6043       texParameterIiv(Target :: enum(),
6044                       Pname :: enum(),
6045                       Params :: tuple()) ->
6046                          ok
6047
6048       texParameterIuiv(Target :: enum(),
6049                        Pname :: enum(),
6050                        Params :: tuple()) ->
6051                           ok
6052
6053       texParameterf(Target :: enum(), Pname :: enum(), Param :: f()) ->
6054                        ok
6055
6056       texParameterfv(Target :: enum(),
6057                      Pname :: enum(),
6058                      Params :: tuple()) ->
6059                         ok
6060
6061       texParameteri(Target :: enum(), Pname :: enum(), Param :: i()) ->
6062                        ok
6063
6064       texParameteriv(Target :: enum(),
6065                      Pname :: enum(),
6066                      Params :: tuple()) ->
6067                         ok
6068
6069              gl:texParameter() and gl:textureParameter() assign the value  or
6070              values  in  Params  to the texture parameter specified as Pname.
6071              For gl:texParameter(), Target defines the target texture, either
6072              ?GL_TEXTURE_1D,  ?GL_TEXTURE_1D_ARRAY,  ?GL_TEXTURE_2D, ?GL_TEX‐
6073              TURE_2D_ARRAY, ?GL_TEXTURE_2D_MULTISAMPLE, ?GL_TEXTURE_2D_MULTI‐
6074              SAMPLE_ARRAY,   ?GL_TEXTURE_3D,  ?GL_TEXTURE_CUBE_MAP,  ?GL_TEX‐
6075              TURE_CUBE_MAP_ARRAY,  or  ?GL_TEXTURE_RECTANGLE.  The  following
6076              symbols are accepted in Pname:
6077
6078              External documentation.
6079
6080       texStorage1D(Target :: enum(),
6081                    Levels :: i(),
6082                    Internalformat :: enum(),
6083                    Width :: i()) ->
6084                       ok
6085
6086              gl:texStorage1D/4  and gl:textureStorage1D() specify the storage
6087              requirements for all levels of a one-dimensional texture  simul‐
6088              taneously.  Once  a  texture is specified with this command, the
6089              format and dimensions of all levels become immutable  unless  it
6090              is a proxy texture. The contents of the image may still be modi‐
6091              fied, however, its storage requirements may not change.  Such  a
6092              texture is referred to as an immutable-format texture.
6093
6094              External documentation.
6095
6096       texStorage2D(Target :: enum(),
6097                    Levels :: i(),
6098                    Internalformat :: enum(),
6099                    Width :: i(),
6100                    Height :: i()) ->
6101                       ok
6102
6103              gl:texStorage2D/5  and gl:textureStorage2D() specify the storage
6104              requirements for all levels of a two-dimensional texture or one-
6105              dimensional  texture  array  simultaneously.  Once  a texture is
6106              specified with this command, the format and  dimensions  of  all
6107              levels  become  immutable unless it is a proxy texture. The con‐
6108              tents of the image may still be modified, however,  its  storage
6109              requirements may not change. Such a texture is referred to as an
6110              immutable-format texture.
6111
6112              External documentation.
6113
6114       texStorage2DMultisample(Target, Samples, Internalformat, Width,
6115                               Height, Fixedsamplelocations) ->
6116                                  ok
6117
6118              Types:
6119
6120                 Target = enum()
6121                 Samples = i()
6122                 Internalformat = enum()
6123                 Width = Height = i()
6124                 Fixedsamplelocations = 0 | 1
6125
6126              gl:texStorage2DMultisample/6  and   gl:textureStorage2DMultisam‐
6127              ple()  specify  the  storage  requirements for a two-dimensional
6128              multisample texture. Once a texture is specified with this  com‐
6129              mand,  its format and dimensions become immutable unless it is a
6130              proxy texture. The contents of the image may still be  modified,
6131              however, its storage requirements may not change. Such a texture
6132              is referred to as an immutable-format texture.
6133
6134              External documentation.
6135
6136       texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) ->
6137                       ok
6138
6139              Types:
6140
6141                 Target = enum()
6142                 Levels = i()
6143                 Internalformat = enum()
6144                 Width = Height = Depth = i()
6145
6146              gl:texStorage3D/6 and gl:textureStorage3D() specify the  storage
6147              requirements  for  all levels of a three-dimensional, two-dimen‐
6148              sional array or cube-map array texture  simultaneously.  Once  a
6149              texture  is  specified  with this command, the format and dimen‐
6150              sions of all levels become immutable unless it is a  proxy  tex‐
6151              ture.  The contents of the image may still be modified, however,
6152              its storage requirements may not change. Such a texture  is  re‐
6153              ferred to as an immutable-format texture.
6154
6155              External documentation.
6156
6157       texStorage3DMultisample(Target, Samples, Internalformat, Width,
6158                               Height, Depth, Fixedsamplelocations) ->
6159                                  ok
6160
6161              Types:
6162
6163                 Target = enum()
6164                 Samples = i()
6165                 Internalformat = enum()
6166                 Width = Height = Depth = i()
6167                 Fixedsamplelocations = 0 | 1
6168
6169              gl:texStorage3DMultisample/7   and  gl:textureStorage3DMultisam‐
6170              ple() specify the storage  requirements  for  a  two-dimensional
6171              multisample array texture. Once a texture is specified with this
6172              command, its format and dimensions become immutable unless it is
6173              a  proxy  texture.  The contents of the image may still be modi‐
6174              fied, however, its storage requirements may not change.  Such  a
6175              texture is referred to as an immutable-format texture.
6176
6177              External documentation.
6178
6179       texSubImage1D(Target, Level, Xoffset, Width, Format, Type, Pixels) ->
6180                        ok
6181
6182              Types:
6183
6184                 Target = enum()
6185                 Level = Xoffset = Width = i()
6186                 Format = Type = enum()
6187                 Pixels = offset() | mem()
6188
6189              Texturing  maps a portion of a specified texture image onto each
6190              graphical primitive for which texturing is enabled. To enable or
6191              disable  one-dimensional texturing, call gl:enable/1 and gl:dis‐
6192              able/1 with argument ?GL_TEXTURE_1D.
6193
6194              External documentation.
6195
6196       texSubImage2D(Target, Level, Xoffset, Yoffset, Width, Height,
6197                     Format, Type, Pixels) ->
6198                        ok
6199
6200              Types:
6201
6202                 Target = enum()
6203                 Level = Xoffset = Yoffset = Width = Height = i()
6204                 Format = Type = enum()
6205                 Pixels = offset() | mem()
6206
6207              Texturing maps a portion of a specified texture image onto  each
6208              graphical primitive for which texturing is enabled.
6209
6210              External documentation.
6211
6212       texSubImage3D(Target, Level, Xoffset, Yoffset, Zoffset, Width,
6213                     Height, Depth, Format, Type, Pixels) ->
6214                        ok
6215
6216              Types:
6217
6218                 Target = enum()
6219                 Level  = Xoffset = Yoffset = Zoffset = Width = Height = Depth
6220                 = i()
6221                 Format = Type = enum()
6222                 Pixels = offset() | mem()
6223
6224              Texturing maps a portion of a specified texture image onto  each
6225              graphical primitive for which texturing is enabled.
6226
6227              External documentation.
6228
6229       textureBarrier() -> ok
6230
6231              The  values  of  rendered  fragments are undefined when a shader
6232              stage fetches texels and the same texels are written  via  frag‐
6233              ment shader outputs, even if the reads and writes are not in the
6234              same drawing command. To safely read the  result  of  a  written
6235              texel  via  a  texel fetch in a subsequent drawing command, call
6236              gl:textureBarrier/0 between the two drawing commands to  guaran‐
6237              tee  that writes have completed and caches have been invalidated
6238              before subsequent drawing commands are executed.
6239
6240              External documentation.
6241
6242       textureView(Texture, Target, Origtexture, Internalformat,
6243                   Minlevel, Numlevels, Minlayer, Numlayers) ->
6244                      ok
6245
6246              Types:
6247
6248                 Texture = i()
6249                 Target = enum()
6250                 Origtexture = i()
6251                 Internalformat = enum()
6252                 Minlevel = Numlevels = Minlayer = Numlayers = i()
6253
6254              gl:textureView/8 initializes a texture object as  an  alias,  or
6255              view  of another texture object, sharing some or all of the par‐
6256              ent texture's data store with the initialized  texture.  Texture
6257              specifies  a  name  previously  reserved by a successful call to
6258              gl:genTextures/1 but that has not yet been bound or given a tar‐
6259              get.  Target specifies the target for the newly initialized tex‐
6260              ture and must be compatible with the target of the  parent  tex‐
6261              ture, given in Origtexture as specified in the following table:
6262
6263              External documentation.
6264
6265       transformFeedbackBufferBase(Xfb :: i(),
6266                                   Index :: i(),
6267                                   Buffer :: i()) ->
6268                                      ok
6269
6270              gl:transformFeedbackBufferBase/3  binds the buffer object Buffer
6271              to the binding point at index Index of  the  transform  feedback
6272              object Xfb.
6273
6274              External documentation.
6275
6276       transformFeedbackBufferRange(Xfb :: i(),
6277                                    Index :: i(),
6278                                    Buffer :: i(),
6279                                    Offset :: i(),
6280                                    Size :: i()) ->
6281                                       ok
6282
6283              gl:transformFeedbackBufferRange/5  binds  a  range of the buffer
6284              object Buffer represented by Offset  and  Size  to  the  binding
6285              point at index Index of the transform feedback object Xfb.
6286
6287              External documentation.
6288
6289       transformFeedbackVaryings(Program :: i(),
6290                                 Varyings :: [unicode:chardata()],
6291                                 BufferMode :: enum()) ->
6292                                    ok
6293
6294              The  names  of  the  vertex  or  geometry  shader  outputs to be
6295              recorded  in  transform  feedback  mode  are   specified   using
6296              gl:transformFeedbackVaryings/3.  When  a  geometry shader is ac‐
6297              tive, transform feedback records the values of selected geometry
6298              shader  output  variables  from the emitted vertices. Otherwise,
6299              the values of the selected vertex shader outputs are recorded.
6300
6301              External documentation.
6302
6303       translated(X :: f(), Y :: f(), Z :: f()) -> ok
6304
6305       translatef(X :: f(), Y :: f(), Z :: f()) -> ok
6306
6307              gl:translate() produces a translation by (x y  z).  The  current
6308              matrix  (see  gl:matrixMode/1) is multiplied by this translation
6309              matrix, with the product replacing the  current  matrix,  as  if
6310              gl:multMatrix()  were  called  with the following matrix for its
6311              argument:
6312
6313              External documentation.
6314
6315       uniform1d(Location :: i(), X :: f()) -> ok
6316
6317       uniform1dv(Location :: i(), Value :: [f()]) -> ok
6318
6319       uniform1f(Location :: i(), V0 :: f()) -> ok
6320
6321       uniform1fv(Location :: i(), Value :: [f()]) -> ok
6322
6323       uniform1i(Location :: i(), V0 :: i()) -> ok
6324
6325       uniform1iv(Location :: i(), Value :: [i()]) -> ok
6326
6327       uniform1ui(Location :: i(), V0 :: i()) -> ok
6328
6329       uniform1uiv(Location :: i(), Value :: [i()]) -> ok
6330
6331       uniform2d(Location :: i(), X :: f(), Y :: f()) -> ok
6332
6333       uniform2dv(Location :: i(), Value :: [{f(), f()}]) -> ok
6334
6335       uniform2f(Location :: i(), V0 :: f(), V1 :: f()) -> ok
6336
6337       uniform2fv(Location :: i(), Value :: [{f(), f()}]) -> ok
6338
6339       uniform2i(Location :: i(), V0 :: i(), V1 :: i()) -> ok
6340
6341       uniform2iv(Location :: i(), Value :: [{i(), i()}]) -> ok
6342
6343       uniform2ui(Location :: i(), V0 :: i(), V1 :: i()) -> ok
6344
6345       uniform2uiv(Location :: i(), Value :: [{i(), i()}]) -> ok
6346
6347       uniform3d(Location :: i(), X :: f(), Y :: f(), Z :: f()) -> ok
6348
6349       uniform3dv(Location :: i(), Value :: [{f(), f(), f()}]) -> ok
6350
6351       uniform3f(Location :: i(), V0 :: f(), V1 :: f(), V2 :: f()) -> ok
6352
6353       uniform3fv(Location :: i(), Value :: [{f(), f(), f()}]) -> ok
6354
6355       uniform3i(Location :: i(), V0 :: i(), V1 :: i(), V2 :: i()) -> ok
6356
6357       uniform3iv(Location :: i(), Value :: [{i(), i(), i()}]) -> ok
6358
6359       uniform3ui(Location :: i(), V0 :: i(), V1 :: i(), V2 :: i()) -> ok
6360
6361       uniform3uiv(Location :: i(), Value :: [{i(), i(), i()}]) -> ok
6362
6363       uniform4d(Location :: i(), X :: f(), Y :: f(), Z :: f(), W :: f()) ->
6364                    ok
6365
6366       uniform4dv(Location :: i(), Value :: [{f(), f(), f(), f()}]) -> ok
6367
6368       uniform4f(Location :: i(),
6369                 V0 :: f(),
6370                 V1 :: f(),
6371                 V2 :: f(),
6372                 V3 :: f()) ->
6373                    ok
6374
6375       uniform4fv(Location :: i(), Value :: [{f(), f(), f(), f()}]) -> ok
6376
6377       uniform4i(Location :: i(),
6378                 V0 :: i(),
6379                 V1 :: i(),
6380                 V2 :: i(),
6381                 V3 :: i()) ->
6382                    ok
6383
6384       uniform4iv(Location :: i(), Value :: [{i(), i(), i(), i()}]) -> ok
6385
6386       uniform4ui(Location :: i(),
6387                  V0 :: i(),
6388                  V1 :: i(),
6389                  V2 :: i(),
6390                  V3 :: i()) ->
6391                     ok
6392
6393       uniform4uiv(Location :: i(), Value :: [{i(), i(), i(), i()}]) ->
6394                      ok
6395
6396       uniformMatrix2dv(Location :: i(),
6397                        Transpose :: 0 | 1,
6398                        Value :: [{f(), f(), f(), f()}]) ->
6399                           ok
6400
6401       uniformMatrix2fv(Location :: i(),
6402                        Transpose :: 0 | 1,
6403                        Value :: [{f(), f(), f(), f()}]) ->
6404                           ok
6405
6406       uniformMatrix2x3dv(Location :: i(),
6407                          Transpose :: 0 | 1,
6408                          Value :: [{f(), f(), f(), f(), f(), f()}]) ->
6409                             ok
6410
6411       uniformMatrix2x3fv(Location :: i(),
6412                          Transpose :: 0 | 1,
6413                          Value :: [{f(), f(), f(), f(), f(), f()}]) ->
6414                             ok
6415
6416       uniformMatrix2x4dv(Location :: i(),
6417                          Transpose :: 0 | 1,
6418                          Value ::
6419                              [{f(), f(), f(), f(), f(), f(), f(), f()}]) ->
6420                             ok
6421
6422       uniformMatrix2x4fv(Location :: i(),
6423                          Transpose :: 0 | 1,
6424                          Value ::
6425                              [{f(), f(), f(), f(), f(), f(), f(), f()}]) ->
6426                             ok
6427
6428       uniformMatrix3dv(Location :: i(),
6429                        Transpose :: 0 | 1,
6430                        Value ::
6431                            [{f(),
6432                              f(),
6433                              f(),
6434                              f(),
6435                              f(),
6436                              f(),
6437                              f(),
6438                              f(),
6439                              f()}]) ->
6440                           ok
6441
6442       uniformMatrix3fv(Location :: i(),
6443                        Transpose :: 0 | 1,
6444                        Value ::
6445                            [{f(),
6446                              f(),
6447                              f(),
6448                              f(),
6449                              f(),
6450                              f(),
6451                              f(),
6452                              f(),
6453                              f()}]) ->
6454                           ok
6455
6456       uniformMatrix3x2dv(Location :: i(),
6457                          Transpose :: 0 | 1,
6458                          Value :: [{f(), f(), f(), f(), f(), f()}]) ->
6459                             ok
6460
6461       uniformMatrix3x2fv(Location :: i(),
6462                          Transpose :: 0 | 1,
6463                          Value :: [{f(), f(), f(), f(), f(), f()}]) ->
6464                             ok
6465
6466       uniformMatrix3x4dv(Location, Transpose, Value) -> ok
6467
6468       uniformMatrix3x4fv(Location, Transpose, Value) -> ok
6469
6470       uniformMatrix4dv(Location, Transpose, Value) -> ok
6471
6472       uniformMatrix4fv(Location, Transpose, Value) -> ok
6473
6474       uniformMatrix4x2dv(Location :: i(),
6475                          Transpose :: 0 | 1,
6476                          Value ::
6477                              [{f(), f(), f(), f(), f(), f(), f(), f()}]) ->
6478                             ok
6479
6480       uniformMatrix4x2fv(Location :: i(),
6481                          Transpose :: 0 | 1,
6482                          Value ::
6483                              [{f(), f(), f(), f(), f(), f(), f(), f()}]) ->
6484                             ok
6485
6486       uniformMatrix4x3dv(Location, Transpose, Value) -> ok
6487
6488       uniformMatrix4x3fv(Location, Transpose, Value) -> ok
6489
6490              Types:
6491
6492                 Location = i()
6493                 Transpose = 0 | 1
6494                 Value =
6495                     [{f(), f(), f(), f(), f(), f(), f(), f(), f(), f(),  f(),
6496                 f()}]
6497
6498              gl:uniform()  modifies the value of a uniform variable or a uni‐
6499              form variable array. The location of the uniform variable to  be
6500              modified  is  specified by Location, which should be a value re‐
6501              turned by gl:getUniformLocation/2. gl:uniform() operates on  the
6502              program  object  that  was made part of current state by calling
6503              gl:useProgram/1.
6504
6505              External documentation.
6506
6507       uniformBlockBinding(Program :: i(),
6508                           UniformBlockIndex :: i(),
6509                           UniformBlockBinding :: i()) ->
6510                              ok
6511
6512              Binding points for active  uniform  blocks  are  assigned  using
6513              gl:uniformBlockBinding/3.  Each  of  a  program's active uniform
6514              blocks has a corresponding uniform buffer binding point. Program
6515              is   the  name  of  a  program  object  for  which  the  command
6516              gl:linkProgram/1 has been issued in the past.
6517
6518              External documentation.
6519
6520       uniformSubroutinesuiv(Shadertype :: enum(), Indices :: [i()]) ->
6521                                ok
6522
6523              gl:uniformSubroutines() loads all active subroutine uniforms for
6524              shader  stage  Shadertype of the current program with subroutine
6525              indices from Indices, storing Indices[i] into the uniform at lo‐
6526              cation I. Count must be equal to the value of ?GL_ACTIVE_SUBROU‐
6527              TINE_UNIFORM_LOCATIONS for  the  program  currently  in  use  at
6528              shader stage Shadertype. Furthermore, all values in Indices must
6529              be less than the value of ?GL_ACTIVE_SUBROUTINES for the  shader
6530              stage.
6531
6532              External documentation.
6533
6534       useProgram(Program :: i()) -> ok
6535
6536              gl:useProgram/1 installs the program object specified by Program
6537              as part of current rendering state. One or more executables  are
6538              created in a program object by successfully attaching shader ob‐
6539              jects to it with gl:attachShader/2, successfully  compiling  the
6540              shader objects with gl:compileShader/1, and successfully linking
6541              the program object with gl:linkProgram/1.
6542
6543              External documentation.
6544
6545       useProgramStages(Pipeline :: i(), Stages :: i(), Program :: i()) ->
6546                           ok
6547
6548              gl:useProgramStages/3 binds executables from  a  program  object
6549              associated  with a specified set of shader stages to the program
6550              pipeline object given by Pipeline. Pipeline specifies  the  pro‐
6551              gram  pipeline  object  to which to bind the executables. Stages
6552              contains a logical combination of  bits  indicating  the  shader
6553              stages  to  use  within Program with the program pipeline object
6554              Pipeline. Stages must  be  a  logical  combination  of  ?GL_VER‐
6555              TEX_SHADER_BIT,   ?GL_TESS_CONTROL_SHADER_BIT,  ?GL_TESS_EVALUA‐
6556              TION_SHADER_BIT,       ?GL_GEOMETRY_SHADER_BIT,        ?GL_FRAG‐
6557              MENT_SHADER_BIT  and  ?GL_COMPUTE_SHADER_BIT.  Additionally, the
6558              special value ?GL_ALL_SHADER_BITS may be specified  to  indicate
6559              that all executables contained in Program should be installed in
6560              Pipeline.
6561
6562              External documentation.
6563
6564       validateProgram(Program :: i()) -> ok
6565
6566              gl:validateProgram/1 checks to see whether the executables  con‐
6567              tained  in  Program  can execute given the current OpenGL state.
6568              The information generated by  the  validation  process  will  be
6569              stored  in Program's information log. The validation information
6570              may consist of an empty string, or it may be a string containing
6571              information  about how the current program object interacts with
6572              the rest of current OpenGL state. This provides a way for OpenGL
6573              implementers  to  convey  more information about why the current
6574              program is inefficient, suboptimal, failing to execute,  and  so
6575              on.
6576
6577              External documentation.
6578
6579       validateProgramPipeline(Pipeline :: i()) -> ok
6580
6581              gl:validateProgramPipeline/1  instructs  the  implementation  to
6582              validate the shader executables contained  in  Pipeline  against
6583              the  current GL state. The implementation may use this as an op‐
6584              portunity to perform any internal shader modifications that  may
6585              be required to ensure correct operation of the installed shaders
6586              given the current GL state.
6587
6588              External documentation.
6589
6590       vertex2d(X :: f(), Y :: f()) -> ok
6591
6592       vertex2dv(X1 :: {X :: f(), Y :: f()}) -> ok
6593
6594       vertex2f(X :: f(), Y :: f()) -> ok
6595
6596       vertex2fv(X1 :: {X :: f(), Y :: f()}) -> ok
6597
6598       vertex2i(X :: i(), Y :: i()) -> ok
6599
6600       vertex2iv(X1 :: {X :: i(), Y :: i()}) -> ok
6601
6602       vertex2s(X :: i(), Y :: i()) -> ok
6603
6604       vertex2sv(X1 :: {X :: i(), Y :: i()}) -> ok
6605
6606       vertex3d(X :: f(), Y :: f(), Z :: f()) -> ok
6607
6608       vertex3dv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
6609
6610       vertex3f(X :: f(), Y :: f(), Z :: f()) -> ok
6611
6612       vertex3fv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
6613
6614       vertex3i(X :: i(), Y :: i(), Z :: i()) -> ok
6615
6616       vertex3iv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
6617
6618       vertex3s(X :: i(), Y :: i(), Z :: i()) -> ok
6619
6620       vertex3sv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
6621
6622       vertex4d(X :: f(), Y :: f(), Z :: f(), W :: f()) -> ok
6623
6624       vertex4dv(X1 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) -> ok
6625
6626       vertex4f(X :: f(), Y :: f(), Z :: f(), W :: f()) -> ok
6627
6628       vertex4fv(X1 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) -> ok
6629
6630       vertex4i(X :: i(), Y :: i(), Z :: i(), W :: i()) -> ok
6631
6632       vertex4iv(X1 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) -> ok
6633
6634       vertex4s(X :: i(), Y :: i(), Z :: i(), W :: i()) -> ok
6635
6636       vertex4sv(X1 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) -> ok
6637
6638              gl:vertex() commands  are  used  within  gl:'begin'/1/gl:'end'/0
6639              pairs  to specify point, line, and polygon vertices. The current
6640              color, normal, texture coordinates, and fog coordinate are asso‐
6641              ciated with the vertex when gl:vertex() is called.
6642
6643              External documentation.
6644
6645       vertexArrayElementBuffer(Vaobj :: i(), Buffer :: i()) -> ok
6646
6647              gl:vertexArrayElementBuffer/2 binds a buffer object with id Buf‐
6648              fer to the element array buffer bind point of a vertex array ob‐
6649              ject  with id Vaobj. If Buffer is zero, any existing element ar‐
6650              ray buffer binding to Vaobj is removed.
6651
6652              External documentation.
6653
6654       vertexAttrib1d(Index :: i(), X :: f()) -> ok
6655
6656       vertexAttrib1dv(Index :: i(), X2 :: {X :: f()}) -> ok
6657
6658       vertexAttrib1f(Index :: i(), X :: f()) -> ok
6659
6660       vertexAttrib1fv(Index :: i(), X2 :: {X :: f()}) -> ok
6661
6662       vertexAttrib1s(Index :: i(), X :: i()) -> ok
6663
6664       vertexAttrib1sv(Index :: i(), X2 :: {X :: i()}) -> ok
6665
6666       vertexAttrib2d(Index :: i(), X :: f(), Y :: f()) -> ok
6667
6668       vertexAttrib2dv(Index :: i(), X2 :: {X :: f(), Y :: f()}) -> ok
6669
6670       vertexAttrib2f(Index :: i(), X :: f(), Y :: f()) -> ok
6671
6672       vertexAttrib2fv(Index :: i(), X2 :: {X :: f(), Y :: f()}) -> ok
6673
6674       vertexAttrib2s(Index :: i(), X :: i(), Y :: i()) -> ok
6675
6676       vertexAttrib2sv(Index :: i(), X2 :: {X :: i(), Y :: i()}) -> ok
6677
6678       vertexAttrib3d(Index :: i(), X :: f(), Y :: f(), Z :: f()) -> ok
6679
6680       vertexAttrib3dv(Index :: i(),
6681                       X2 :: {X :: f(), Y :: f(), Z :: f()}) ->
6682                          ok
6683
6684       vertexAttrib3f(Index :: i(), X :: f(), Y :: f(), Z :: f()) -> ok
6685
6686       vertexAttrib3fv(Index :: i(),
6687                       X2 :: {X :: f(), Y :: f(), Z :: f()}) ->
6688                          ok
6689
6690       vertexAttrib3s(Index :: i(), X :: i(), Y :: i(), Z :: i()) -> ok
6691
6692       vertexAttrib3sv(Index :: i(),
6693                       X2 :: {X :: i(), Y :: i(), Z :: i()}) ->
6694                          ok
6695
6696       vertexAttrib4Nbv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6697
6698       vertexAttrib4Niv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6699
6700       vertexAttrib4Nsv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6701
6702       vertexAttrib4Nub(Index :: i(),
6703                        X :: i(),
6704                        Y :: i(),
6705                        Z :: i(),
6706                        W :: i()) ->
6707                           ok
6708
6709       vertexAttrib4Nubv(Index :: i(),
6710                         X2 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) ->
6711                            ok
6712
6713       vertexAttrib4Nuiv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6714
6715       vertexAttrib4Nusv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6716
6717       vertexAttrib4bv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6718
6719       vertexAttrib4d(Index :: i(),
6720                      X :: f(),
6721                      Y :: f(),
6722                      Z :: f(),
6723                      W :: f()) ->
6724                         ok
6725
6726       vertexAttrib4dv(Index :: i(),
6727                       X2 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) ->
6728                          ok
6729
6730       vertexAttrib4f(Index :: i(),
6731                      X :: f(),
6732                      Y :: f(),
6733                      Z :: f(),
6734                      W :: f()) ->
6735                         ok
6736
6737       vertexAttrib4fv(Index :: i(),
6738                       X2 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) ->
6739                          ok
6740
6741       vertexAttrib4iv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6742
6743       vertexAttrib4s(Index :: i(),
6744                      X :: i(),
6745                      Y :: i(),
6746                      Z :: i(),
6747                      W :: i()) ->
6748                         ok
6749
6750       vertexAttrib4sv(Index :: i(),
6751                       X2 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) ->
6752                          ok
6753
6754       vertexAttrib4ubv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6755
6756       vertexAttrib4uiv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6757
6758       vertexAttrib4usv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6759
6760       vertexAttribI1i(Index :: i(), X :: i()) -> ok
6761
6762       vertexAttribI1iv(Index :: i(), X2 :: {X :: i()}) -> ok
6763
6764       vertexAttribI1ui(Index :: i(), X :: i()) -> ok
6765
6766       vertexAttribI1uiv(Index :: i(), X2 :: {X :: i()}) -> ok
6767
6768       vertexAttribI2i(Index :: i(), X :: i(), Y :: i()) -> ok
6769
6770       vertexAttribI2iv(Index :: i(), X2 :: {X :: i(), Y :: i()}) -> ok
6771
6772       vertexAttribI2ui(Index :: i(), X :: i(), Y :: i()) -> ok
6773
6774       vertexAttribI2uiv(Index :: i(), X2 :: {X :: i(), Y :: i()}) -> ok
6775
6776       vertexAttribI3i(Index :: i(), X :: i(), Y :: i(), Z :: i()) -> ok
6777
6778       vertexAttribI3iv(Index :: i(),
6779                        X2 :: {X :: i(), Y :: i(), Z :: i()}) ->
6780                           ok
6781
6782       vertexAttribI3ui(Index :: i(), X :: i(), Y :: i(), Z :: i()) -> ok
6783
6784       vertexAttribI3uiv(Index :: i(),
6785                         X2 :: {X :: i(), Y :: i(), Z :: i()}) ->
6786                            ok
6787
6788       vertexAttribI4bv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6789
6790       vertexAttribI4i(Index :: i(),
6791                       X :: i(),
6792                       Y :: i(),
6793                       Z :: i(),
6794                       W :: i()) ->
6795                          ok
6796
6797       vertexAttribI4iv(Index :: i(),
6798                        X2 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) ->
6799                           ok
6800
6801       vertexAttribI4sv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6802
6803       vertexAttribI4ubv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6804
6805       vertexAttribI4ui(Index :: i(),
6806                        X :: i(),
6807                        Y :: i(),
6808                        Z :: i(),
6809                        W :: i()) ->
6810                           ok
6811
6812       vertexAttribI4uiv(Index :: i(),
6813                         X2 :: {X :: i(), Y :: i(), Z :: i(), W :: i()}) ->
6814                            ok
6815
6816       vertexAttribI4usv(Index :: i(), V :: {i(), i(), i(), i()}) -> ok
6817
6818       vertexAttribL1d(Index :: i(), X :: f()) -> ok
6819
6820       vertexAttribL1dv(Index :: i(), X2 :: {X :: f()}) -> ok
6821
6822       vertexAttribL2d(Index :: i(), X :: f(), Y :: f()) -> ok
6823
6824       vertexAttribL2dv(Index :: i(), X2 :: {X :: f(), Y :: f()}) -> ok
6825
6826       vertexAttribL3d(Index :: i(), X :: f(), Y :: f(), Z :: f()) -> ok
6827
6828       vertexAttribL3dv(Index :: i(),
6829                        X2 :: {X :: f(), Y :: f(), Z :: f()}) ->
6830                           ok
6831
6832       vertexAttribL4d(Index :: i(),
6833                       X :: f(),
6834                       Y :: f(),
6835                       Z :: f(),
6836                       W :: f()) ->
6837                          ok
6838
6839       vertexAttribL4dv(Index :: i(),
6840                        X2 :: {X :: f(), Y :: f(), Z :: f(), W :: f()}) ->
6841                           ok
6842
6843              The gl:vertexAttrib() family of entry points allows an  applica‐
6844              tion to pass generic vertex attributes in numbered locations.
6845
6846              External documentation.
6847
6848       vertexArrayAttribBinding(Vaobj :: i(),
6849                                Attribindex :: i(),
6850                                Bindingindex :: i()) ->
6851                                   ok
6852
6853       vertexAttribBinding(Attribindex :: i(), Bindingindex :: i()) -> ok
6854
6855              gl:vertexAttribBinding/2  and  gl:vertexArrayAttribBinding/3 es‐
6856              tablishes an association between the generic vertex attribute of
6857              a vertex array object whose index is given by Attribindex, and a
6858              vertex buffer binding whose index is given by Bindingindex.  For
6859              gl:vertexAttribBinding/2,  the  vertex  array object affected is
6860              that currently bound. For  gl:vertexArrayAttribBinding/3,  Vaobj
6861              is the name of the vertex array object.
6862
6863              External documentation.
6864
6865       vertexAttribDivisor(Index :: i(), Divisor :: i()) -> ok
6866
6867              gl:vertexAttribDivisor/2 modifies the rate at which generic ver‐
6868              tex attributes advance  when  rendering  multiple  instances  of
6869              primitives in a single draw call. If Divisor is zero, the attri‐
6870              bute at slot Index advances once per vertex. If Divisor is  non-
6871              zero,  the  attribute advances once per Divisor instances of the
6872              set(s) of vertices being rendered. An attribute is  referred  to
6873              as  instanced  if  its  ?GL_VERTEX_ATTRIB_ARRAY_DIVISOR value is
6874              non-zero.
6875
6876              External documentation.
6877
6878       vertexArrayAttribFormat(Vaobj, Attribindex, Size, Type,
6879                               Normalized, Relativeoffset) ->
6880                                  ok
6881
6882       vertexArrayAttribIFormat(Vaobj :: i(),
6883                                Attribindex :: i(),
6884                                Size :: i(),
6885                                Type :: enum(),
6886                                Relativeoffset :: i()) ->
6887                                   ok
6888
6889       vertexArrayAttribLFormat(Vaobj :: i(),
6890                                Attribindex :: i(),
6891                                Size :: i(),
6892                                Type :: enum(),
6893                                Relativeoffset :: i()) ->
6894                                   ok
6895
6896       vertexAttribFormat(Attribindex :: i(),
6897                          Size :: i(),
6898                          Type :: enum(),
6899                          Normalized :: 0 | 1,
6900                          Relativeoffset :: i()) ->
6901                             ok
6902
6903       vertexAttribIFormat(Attribindex :: i(),
6904                           Size :: i(),
6905                           Type :: enum(),
6906                           Relativeoffset :: i()) ->
6907                              ok
6908
6909       vertexAttribIPointer(Index :: i(),
6910                            Size :: i(),
6911                            Type :: enum(),
6912                            Stride :: i(),
6913                            Pointer :: offset() | mem()) ->
6914                               ok
6915
6916       vertexAttribLFormat(Attribindex :: i(),
6917                           Size :: i(),
6918                           Type :: enum(),
6919                           Relativeoffset :: i()) ->
6920                              ok
6921
6922       vertexAttribLPointer(Index :: i(),
6923                            Size :: i(),
6924                            Type :: enum(),
6925                            Stride :: i(),
6926                            Pointer :: offset() | mem()) ->
6927                               ok
6928
6929              gl:vertexAttribFormat/5, gl:vertexAttribIFormat/4 and gl:vertex‐
6930              AttribLFormat/4,   as   well   as  gl:vertexArrayAttribFormat/6,
6931              gl:vertexArrayAttribIFormat/5 and  gl:vertexArrayAttribLFormat/5
6932              specify  the  organization  of  data in vertex arrays. The first
6933              three calls operate on the bound vertex  array  object,  whereas
6934              the  last  three  ones modify the state of a vertex array object
6935              with ID Vaobj. Attribindex specifies the index  of  the  generic
6936              vertex attribute array whose data layout is being described, and
6937              must be less than the value of ?GL_MAX_VERTEX_ATTRIBS.
6938
6939              External documentation.
6940
6941       vertexAttribPointer(Index, Size, Type, Normalized, Stride,
6942                           Pointer) ->
6943                              ok
6944
6945              Types:
6946
6947                 Index = Size = i()
6948                 Type = enum()
6949                 Normalized = 0 | 1
6950                 Stride = i()
6951                 Pointer = offset() | mem()
6952
6953              gl:vertexAttribPointer/6, gl:vertexAttribIPointer/5 and  gl:ver‐
6954              texAttribLPointer/5  specify the location and data format of the
6955              array of generic vertex attributes at index Index  to  use  when
6956              rendering. Size specifies the number of components per attribute
6957              and must be 1, 2, 3, 4, or ?GL_BGRA.  Type  specifies  the  data
6958              type  of  each  component,  and Stride specifies the byte stride
6959              from one attribute to the next, allowing vertices and attributes
6960              to be packed into a single array or stored in separate arrays.
6961
6962              External documentation.
6963
6964       vertexArrayBindingDivisor(Vaobj :: i(),
6965                                 Bindingindex :: i(),
6966                                 Divisor :: i()) ->
6967                                    ok
6968
6969       vertexBindingDivisor(Bindingindex :: i(), Divisor :: i()) -> ok
6970
6971              gl:vertexBindingDivisor/2   and   gl:vertexArrayBindingDivisor/3
6972              modify the rate at which generic vertex attributes advance  when
6973              rendering multiple instances of primitives in a single draw com‐
6974              mand. If Divisor is zero, the attributes using the buffer  bound
6975              to Bindingindex advance once per vertex. If Divisor is non-zero,
6976              the attributes advance once per Divisor instances of the  set(s)
6977              of  vertices  being rendered. An attribute is referred to as in‐
6978              stanced if the corresponding Divisor value is non-zero.
6979
6980              External documentation.
6981
6982       vertexPointer(Size :: i(),
6983                     Type :: enum(),
6984                     Stride :: i(),
6985                     Ptr :: offset() | mem()) ->
6986                        ok
6987
6988              gl:vertexPointer/4 specifies the location and data format of  an
6989              array  of  vertex coordinates to use when rendering. Size speci‐
6990              fies the number of coordinates per vertex, and must be 2, 3,  or
6991              4.  Type  specifies the data type of each coordinate, and Stride
6992              specifies the byte stride from one vertex to the next,  allowing
6993              vertices  and  attributes  to  be  packed into a single array or
6994              stored in separate arrays. (Single-array storage may be more ef‐
6995              ficient on some implementations; see gl:interleavedArrays/3.)
6996
6997              External documentation.
6998
6999       viewport(X :: i(), Y :: i(), Width :: i(), Height :: i()) -> ok
7000
7001              gl:viewport/4  specifies  the  affine  transformation of x and y
7002              from normalized device coordinates to window coordinates. Let (x
7003              nd y nd) be normalized device coordinates. Then the window coor‐
7004              dinates (x w y w) are computed as follows:
7005
7006              External documentation.
7007
7008       viewportArrayv(First :: i(), V :: [{f(), f(), f(), f()}]) -> ok
7009
7010              gl:viewportArrayv/2 specifies the parameters for multiple  view‐
7011              ports  simulataneously.  First  specifies the index of the first
7012              viewport to modify and Count specifies the number  of  viewports
7013              to  modify.  First  must be less than the value of ?GL_MAX_VIEW‐
7014              PORTS, and First + Count must be less than or equal to the value
7015              of  ?GL_MAX_VIEWPORTS.  Viewports  whose indices lie outside the
7016              range [First, First + Count) are not modified.  V  contains  the
7017              address of an array of floating point values specifying the left
7018              ( x), bottom ( y), width ( w), and height ( h) of each viewport,
7019              in that order. x and y give the location of the viewport's lower
7020              left corner, and w and h give the width and height of the  view‐
7021              port,  respectively. The viewport specifies the affine transfor‐
7022              mation of x and y from normalized device coordinates  to  window
7023              coordinates.  Let  (x nd y nd) be normalized device coordinates.
7024              Then the window coordinates (x w y w) are computed as follows:
7025
7026              External documentation.
7027
7028       viewportIndexedf(Index :: i(),
7029                        X :: f(),
7030                        Y :: f(),
7031                        W :: f(),
7032                        H :: f()) ->
7033                           ok
7034
7035       viewportIndexedfv(Index :: i(), V :: {f(), f(), f(), f()}) -> ok
7036
7037              gl:viewportIndexedf/5 and gl:viewportIndexedfv/2 specify the pa‐
7038              rameters for a single viewport. Index specifies the index of the
7039              viewport to modify.  Index  must  be  less  than  the  value  of
7040              ?GL_MAX_VIEWPORTS.  For  gl:viewportIndexedf/5,  X,  Y, W, and H
7041              specify the left, bottom, width and height of  the  viewport  in
7042              pixels, respectively. For gl:viewportIndexedfv/2, V contains the
7043              address of an array of floating point values specifying the left
7044              ( x), bottom ( y), width ( w), and height ( h) of each viewport,
7045              in that order. x and y give the location of the viewport's lower
7046              left  corner, and w and h give the width and height of the view‐
7047              port, respectively. The viewport specifies the affine  transfor‐
7048              mation  of  x and y from normalized device coordinates to window
7049              coordinates. Let (x nd y nd) be normalized  device  coordinates.
7050              Then the window coordinates (x w y w) are computed as follows:
7051
7052              External documentation.
7053
7054       waitSync(Sync :: i(), Flags :: i(), Timeout :: i()) -> ok
7055
7056              gl:waitSync/3  causes the GL server to block and wait until Sync
7057              becomes signaled. Sync is the name of an  existing  sync  object
7058              upon which to wait. Flags and Timeout are currently not used and
7059              must be set to zero and the special  value  ?GL_TIMEOUT_IGNORED,
7060              respectively
7061
7062              Flags and Timeout are placeholders for anticipated future exten‐
7063              sions of sync object capabilities. They must have these reserved
7064              values in order that existing code calling gl:waitSync/3 operate
7065              properly in the presence of such extensions.
7066
7067              External documentation.
7068
7069       windowPos2d(X :: f(), Y :: f()) -> ok
7070
7071       windowPos2dv(X1 :: {X :: f(), Y :: f()}) -> ok
7072
7073       windowPos2f(X :: f(), Y :: f()) -> ok
7074
7075       windowPos2fv(X1 :: {X :: f(), Y :: f()}) -> ok
7076
7077       windowPos2i(X :: i(), Y :: i()) -> ok
7078
7079       windowPos2iv(X1 :: {X :: i(), Y :: i()}) -> ok
7080
7081       windowPos2s(X :: i(), Y :: i()) -> ok
7082
7083       windowPos2sv(X1 :: {X :: i(), Y :: i()}) -> ok
7084
7085       windowPos3d(X :: f(), Y :: f(), Z :: f()) -> ok
7086
7087       windowPos3dv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
7088
7089       windowPos3f(X :: f(), Y :: f(), Z :: f()) -> ok
7090
7091       windowPos3fv(X1 :: {X :: f(), Y :: f(), Z :: f()}) -> ok
7092
7093       windowPos3i(X :: i(), Y :: i(), Z :: i()) -> ok
7094
7095       windowPos3iv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
7096
7097       windowPos3s(X :: i(), Y :: i(), Z :: i()) -> ok
7098
7099       windowPos3sv(X1 :: {X :: i(), Y :: i(), Z :: i()}) -> ok
7100
7101              The GL maintains a 3D position in window coordinates. This posi‐
7102              tion,  called the raster position, is used to position pixel and
7103              bitmap write operations. It is maintained  with  subpixel  accu‐
7104              racy. See gl:bitmap/7, gl:drawPixels/5, and gl:copyPixels/5.
7105
7106              External documentation.
7107
7108
7109
7110Ericsson AB                        wx 2.3.1                              gl(3)
Impressum