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