1'''OpenGL extension EXT.direct_state_access
2
3This module customises the behaviour of the
4OpenGL.raw.GL.EXT.direct_state_access to provide a more
5Python-friendly API
6
7Overview (from the spec)
8
9	This extension introduces a set of new "direct state access"
10	commands (meaning no selector is involved) to access (update and
11	query) OpenGL state that previously depended on the OpenGL state
12	selectors for access.  These new commands supplement the existing
13	selector-based OpenGL commands to access the same state.
14
15	The intent of this extension is to make it more efficient for
16	libraries to avoid disturbing selector and latched state.  The
17	extension also allows more efficient command usage by eliminating
18	the need for selector update commands.
19
20	Two derivative advantages of this extension are 1) display lists
21	can be executed using these commands that avoid disturbing selectors
22	that subsequent commands may depend on, and 2) drivers implemented
23	with a dual-thread partitioning with OpenGL command buffering from
24	an application thread and then OpenGL command dispatching in a
25	concurrent driver thread can avoid thread synchronization created by
26	selector saving, setting, command execution, and selector restoration.
27
28	This extension does not itself add any new OpenGL state.
29
30	We call a state variable in OpenGL an "OpenGL state selector" or
31	simply a "selector" if OpenGL commands depend on the state variable
32	to determine what state to query or update.  The matrix mode and
33	active texture are both selectors.  Object bindings for buffers,
34	programs, textures, and framebuffer objects are also selectors.
35
36	We call OpenGL state "latched" if the state is set by one OpenGL
37	command but then that state is saved by a subsequent command or the
38	state determines how client memory or buffer object memory is accessed
39	by a subsequent command.  The array and element array buffer bindings
40	are latched by vertex array specification commands to determine
41	which buffer a given vertex array uses.  Vertex array state and pixel
42	pack/unpack state decides how client memory or buffer object memory is
43	accessed by subsequent vertex pulling or image specification commands.
44
45	The existence of selectors and latched state in the OpenGL API
46	reduces the number of parameters to various sets of OpenGL commands
47	but complicates the access to state for layered libraries which seek
48	to access state without disturbing other state, namely the state of
49	state selectors and latched state.  In many cases, selectors and
50	latched state were introduced by extensions as OpenGL evolved to
51	minimize the disruption to the OpenGL API when new functionality,
52	particularly the pluralization of existing functionality as when
53	texture objects and later multiple texture units, was introduced.
54
55	The OpenGL API involves several selectors (listed in historical
56	order of introduction):
57
58	  o  The matrix mode.
59
60	  o  The current bound texture for each supported texture target.
61
62	  o  The active texture.
63
64	  o  The active client texture.
65
66	  o  The current bound program for each supported program target.
67
68	  o  The current bound buffer for each supported buffer target.
69
70	  o  The current GLSL program.
71
72	  o  The current framebuffer object.
73
74	The new selector-free update commands can be compiled into display
75	lists.
76
77	The OpenGL API has latched state for vertex array buffer objects
78	and pixel store state.  When an application issues a GL command to
79	unpack or pack pixels (for example, glTexImage2D or glReadPixels
80	respectively), the current unpack and pack pixel store state
81	determines how the pixels are unpacked from/packed to client memory
82	or pixel buffer objects.  For example, consider:
83
84	  glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_TRUE);
85	  glPixelStorei(GL_UNPACK_ROW_LENGTH, 640);
86	  glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 47);
87	  glDrawPixels(100, 100, GL_RGB, GL_FLOAT, pixels);
88
89	The unpack swap bytes and row length state set by the preceding
90	glPixelStorei commands (as well as the 6 other unpack pixel store
91	state variables) control how data is read (unpacked) from buffer of
92	data pointed to by pixels.  The glBindBuffer command also specifies
93	an unpack buffer object (47) so the pixel pointer is actually treated
94	as a byte offset into buffer object 47.
95
96	When an application issues a command to configure a vertex array,
97	the current array buffer state is latched as the binding for the
98	particular vertex array being specified.  For example, consider:
99
100	  glBindBuffer(GL_ARRAY_BUFFER, 23);
101	  glVertexPointer(3, GL_FLOAT, 12, pointer);
102
103	The glBindBuffer command updates the array buffering binding
104	(GL_ARRAY_BUFFER_BINDING) to the buffer object named 23.  The
105	subsequent glVertexPointer command specifies explicit parameters
106	for the size, type, stride, and pointer to access the position
107	vertex array BUT ALSO latches the current array buffer binding for
108	the vertex array buffer binding (GL_VERTEX_ARRAY_BUFFER_BINDING).
109	Effectively the current array buffer binding buffer object becomes
110	an implicit fifth parameter to glVertexPointer and this applies to
111	all the gl*Pointer vertex array specification commands.
112
113	Selectors and latched state create problems for layered libraries
114	using OpenGL because selectors require the selector state to be
115	modified to update some other state and latched state means implicit
116	state can affect the operation of commands specifying, packing, or
117	unpacking data through pointers/offsets.  For layered libraries,
118	a state update performed by the library may attempt to save the
119	selector state, set the selector, update/query some state the
120	selector controls, and then restore the selector to its saved state.
121	Layered libraries can skip the selector save/restore but this risks
122	introducing uncertainty about the state of a selector after calling
123	layered library routines.  Such selector side-effects are difficult
124	to document and lead to compatibility issues as the layered library
125	evolves or its usage varies.  For latched state, layered libraries
126	may find commands such as glDrawPixels do not work as expected
127	because latched pixel store state is not what the library expects.
128	Querying or pushing the latched state, setting the latched state
129	explicitly, performing the operation involving latched state, and
130	then restoring or popping the latched state avoids entanglements
131	with latched state but at considerable cost.
132
133	EXAMPLE USAGE OF THIS EXTENSION'S FUNCTIONALITY
134
135	Consider the following routine to set the modelview matrix involving
136	the matrix mode selector:
137
138	  void setModelviewMatrix(const GLfloat matrix[16])
139	  {
140	    GLenum savedMatrixMode;
141
142	    glGetIntegerv(GL_MATRIX_MODE, &savedMatrixMode);
143	    glMatrixMode(GL_MODELVIEW);
144	    glLoadMatrixf(matrix);
145	    glMatrixMode(savedMatrixMode);
146	  }
147
148	Notice that four OpenGL commands are required to update the current
149	modelview matrix without disturbing the matrix mode selector.
150
151	OpenGL query commands can also substantially reduce the performance
152	of modern OpenGL implementations which may off-load OpenGL state
153	processing to another CPU core/thread or to the GPU itself.
154
155	An alternative to querying the selector is to use the
156	glPushAttrib/glPopAttrib commands.  However this approach typically
157	involves pushing far more state than simply the one or two selectors
158	that need to be saved and restored.  Because so much state is
159	associated with a given push/pop attribute bit, the glPushAttrib
160	and glPopAttrib commands are considerably more costly than the
161	save/restore approach.  Additionally glPushAttrib risks overflowing
162	the attribute stack.
163
164	The reliability and performance of layered libraries and applications
165	can be improved by adding to the OpenGL API a new set of commands
166	to access directly OpenGL state that otherwise involves selectors
167	to access.
168
169	The above example can be reimplemented more efficiently and without
170	selector side-effects:
171
172	  void setModelviewMatrix(const GLfloat matrix[16])
173	  {
174	    glMatrixLoadfEXT(GL_MODELVIEW, matrix);
175	  }
176
177	Consider a layered library seeking to load a texture:
178
179	  void loadTexture(GLint texobj, GLint width, GLint height,
180	                   void *data)
181	  {
182	    glBindTexture(GL_TEXTURE_2D, texobj);
183	    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8,
184	                 width, height, GL_RGB, GL_FLOAT, data);
185	  }
186
187	The library expects the data to be packed into the buffer pointed
188	to by data.  But what if the current pixel unpack buffer binding
189	is not zero so the current pixel unpack buffer, rather than client
190	memory, will be read?  Or what if the application has modified
191	the GL_UNPACK_ROW_LENGTH pixel store state before loadTexture
192	is called?
193
194	We can fix the routine by calling glBindBuffer(GL_PIXEL_UNPACK_BUFFER,
195	0) and setting all the pixel store unpack state to the initial state
196	the loadTexture routine expects, but this is expensive.  It also risks
197	disturbing the state so when loadTexture returns to the application,
198	the application doesn't realize the current texture object (for
199	whatever texture unit the current active texture happens to be) and
200	pixel store state has changed.
201
202	We can more efficiently implement this routine without disturbing
203	selector or latched state as follows:
204
205	  void loadTexture(GLint texobj, GLint width, GLint height,
206	                   void *data)
207	  {
208	    glPushClientAttribDefaultEXT(GL_CLIENT_PIXEL_STORE_BIT);
209	    glTextureImage2D(texobj, GL_TEXTURE_2D, 0, GL_RGB8,
210	                     width, height, GL_RGB, GL_FLOAT, data);
211	    glPopClientAttrib();
212	  }
213
214	Now loadTexture does not have to worry about inappropriately
215	configured pixel store state or a non-zero pixel unpack buffer
216	binding.  And loadTexture has no unintended side-effects for
217	selector or latched state (assuming the client attrib state does
218	not overflow).
219
220The official definition of this extension is available here:
221http://www.opengl.org/registry/specs/EXT/direct_state_access.txt
222'''
223from OpenGL import platform, constant, arrays
224from OpenGL import extensions, wrapper
225import ctypes
226from OpenGL.raw.GL import _types, _glgets
227from OpenGL.raw.GL.EXT.direct_state_access import *
228from OpenGL.raw.GL.EXT.direct_state_access import _EXTENSION_NAME
229
230def glInitDirectStateAccessEXT():
231    '''Return boolean indicating whether this extension is available'''
232    from OpenGL import extensions
233    return extensions.hasGLExtension( _EXTENSION_NAME )
234
235glMatrixLoadfEXT=wrapper.wrapper(glMatrixLoadfEXT).setInputArraySize(
236    'm', 16
237)
238glMatrixLoaddEXT=wrapper.wrapper(glMatrixLoaddEXT).setInputArraySize(
239    'm', 16
240)
241glMatrixMultfEXT=wrapper.wrapper(glMatrixMultfEXT).setInputArraySize(
242    'm', 16
243)
244glMatrixMultdEXT=wrapper.wrapper(glMatrixMultdEXT).setInputArraySize(
245    'm', 16
246)
247# INPUT glTextureParameterfvEXT.params size not checked against 'pname'
248glTextureParameterfvEXT=wrapper.wrapper(glTextureParameterfvEXT).setInputArraySize(
249    'params', None
250)
251# INPUT glTextureParameterivEXT.params size not checked against 'pname'
252glTextureParameterivEXT=wrapper.wrapper(glTextureParameterivEXT).setInputArraySize(
253    'params', None
254)
255# INPUT glTextureImage1DEXT.pixels size not checked against 'format,type,width'
256glTextureImage1DEXT=wrapper.wrapper(glTextureImage1DEXT).setInputArraySize(
257    'pixels', None
258)
259# INPUT glTextureImage2DEXT.pixels size not checked against 'format,type,width,height'
260glTextureImage2DEXT=wrapper.wrapper(glTextureImage2DEXT).setInputArraySize(
261    'pixels', None
262)
263# INPUT glTextureSubImage1DEXT.pixels size not checked against 'format,type,width'
264glTextureSubImage1DEXT=wrapper.wrapper(glTextureSubImage1DEXT).setInputArraySize(
265    'pixels', None
266)
267# INPUT glTextureSubImage2DEXT.pixels size not checked against 'format,type,width,height'
268glTextureSubImage2DEXT=wrapper.wrapper(glTextureSubImage2DEXT).setInputArraySize(
269    'pixels', None
270)
271# OUTPUT glGetTextureImageEXT.pixels COMPSIZE(target, level, format, type)
272glGetTextureParameterfvEXT=wrapper.wrapper(glGetTextureParameterfvEXT).setOutput(
273    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
274)
275glGetTextureParameterivEXT=wrapper.wrapper(glGetTextureParameterivEXT).setOutput(
276    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
277)
278glGetTextureLevelParameterfvEXT=wrapper.wrapper(glGetTextureLevelParameterfvEXT).setOutput(
279    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
280)
281glGetTextureLevelParameterivEXT=wrapper.wrapper(glGetTextureLevelParameterivEXT).setOutput(
282    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
283)
284# INPUT glTextureImage3DEXT.pixels size not checked against 'format,type,width,height,depth'
285glTextureImage3DEXT=wrapper.wrapper(glTextureImage3DEXT).setInputArraySize(
286    'pixels', None
287)
288# INPUT glTextureSubImage3DEXT.pixels size not checked against 'format,type,width,height,depth'
289glTextureSubImage3DEXT=wrapper.wrapper(glTextureSubImage3DEXT).setInputArraySize(
290    'pixels', None
291)
292# INPUT glMultiTexCoordPointerEXT.pointer size not checked against 'size,type,stride'
293glMultiTexCoordPointerEXT=wrapper.wrapper(glMultiTexCoordPointerEXT).setInputArraySize(
294    'pointer', None
295)
296# INPUT glMultiTexEnvfvEXT.params size not checked against 'pname'
297glMultiTexEnvfvEXT=wrapper.wrapper(glMultiTexEnvfvEXT).setInputArraySize(
298    'params', None
299)
300# INPUT glMultiTexEnvivEXT.params size not checked against 'pname'
301glMultiTexEnvivEXT=wrapper.wrapper(glMultiTexEnvivEXT).setInputArraySize(
302    'params', None
303)
304# INPUT glMultiTexGendvEXT.params size not checked against 'pname'
305glMultiTexGendvEXT=wrapper.wrapper(glMultiTexGendvEXT).setInputArraySize(
306    'params', None
307)
308# INPUT glMultiTexGenfvEXT.params size not checked against 'pname'
309glMultiTexGenfvEXT=wrapper.wrapper(glMultiTexGenfvEXT).setInputArraySize(
310    'params', None
311)
312# INPUT glMultiTexGenivEXT.params size not checked against 'pname'
313glMultiTexGenivEXT=wrapper.wrapper(glMultiTexGenivEXT).setInputArraySize(
314    'params', None
315)
316glGetMultiTexEnvfvEXT=wrapper.wrapper(glGetMultiTexEnvfvEXT).setOutput(
317    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
318)
319glGetMultiTexEnvivEXT=wrapper.wrapper(glGetMultiTexEnvivEXT).setOutput(
320    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
321)
322glGetMultiTexGendvEXT=wrapper.wrapper(glGetMultiTexGendvEXT).setOutput(
323    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
324)
325glGetMultiTexGenfvEXT=wrapper.wrapper(glGetMultiTexGenfvEXT).setOutput(
326    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
327)
328glGetMultiTexGenivEXT=wrapper.wrapper(glGetMultiTexGenivEXT).setOutput(
329    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
330)
331# INPUT glMultiTexParameterivEXT.params size not checked against 'pname'
332glMultiTexParameterivEXT=wrapper.wrapper(glMultiTexParameterivEXT).setInputArraySize(
333    'params', None
334)
335# INPUT glMultiTexParameterfvEXT.params size not checked against 'pname'
336glMultiTexParameterfvEXT=wrapper.wrapper(glMultiTexParameterfvEXT).setInputArraySize(
337    'params', None
338)
339# INPUT glMultiTexImage1DEXT.pixels size not checked against 'format,type,width'
340glMultiTexImage1DEXT=wrapper.wrapper(glMultiTexImage1DEXT).setInputArraySize(
341    'pixels', None
342)
343# INPUT glMultiTexImage2DEXT.pixels size not checked against 'format,type,width,height'
344glMultiTexImage2DEXT=wrapper.wrapper(glMultiTexImage2DEXT).setInputArraySize(
345    'pixels', None
346)
347# INPUT glMultiTexSubImage1DEXT.pixels size not checked against 'format,type,width'
348glMultiTexSubImage1DEXT=wrapper.wrapper(glMultiTexSubImage1DEXT).setInputArraySize(
349    'pixels', None
350)
351# INPUT glMultiTexSubImage2DEXT.pixels size not checked against 'format,type,width,height'
352glMultiTexSubImage2DEXT=wrapper.wrapper(glMultiTexSubImage2DEXT).setInputArraySize(
353    'pixels', None
354)
355# OUTPUT glGetMultiTexImageEXT.pixels COMPSIZE(target, level, format, type)
356glGetMultiTexParameterfvEXT=wrapper.wrapper(glGetMultiTexParameterfvEXT).setOutput(
357    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
358)
359glGetMultiTexParameterivEXT=wrapper.wrapper(glGetMultiTexParameterivEXT).setOutput(
360    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
361)
362glGetMultiTexLevelParameterfvEXT=wrapper.wrapper(glGetMultiTexLevelParameterfvEXT).setOutput(
363    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
364)
365glGetMultiTexLevelParameterivEXT=wrapper.wrapper(glGetMultiTexLevelParameterivEXT).setOutput(
366    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
367)
368# INPUT glMultiTexImage3DEXT.pixels size not checked against 'format,type,width,height,depth'
369glMultiTexImage3DEXT=wrapper.wrapper(glMultiTexImage3DEXT).setInputArraySize(
370    'pixels', None
371)
372# INPUT glMultiTexSubImage3DEXT.pixels size not checked against 'format,type,width,height,depth'
373glMultiTexSubImage3DEXT=wrapper.wrapper(glMultiTexSubImage3DEXT).setInputArraySize(
374    'pixels', None
375)
376glGetFloatIndexedvEXT=wrapper.wrapper(glGetFloatIndexedvEXT).setOutput(
377    'data',size=_glgets._glget_size_mapping,pnameArg='target',orPassIn=True
378)
379glGetDoubleIndexedvEXT=wrapper.wrapper(glGetDoubleIndexedvEXT).setOutput(
380    'data',size=_glgets._glget_size_mapping,pnameArg='target',orPassIn=True
381)
382glGetPointerIndexedvEXT=wrapper.wrapper(glGetPointerIndexedvEXT).setOutput(
383    'data',size=(1,),orPassIn=True
384)
385glGetIntegerIndexedvEXT=wrapper.wrapper(glGetIntegerIndexedvEXT).setOutput(
386    'data',size=_glgets._glget_size_mapping,pnameArg='target',orPassIn=True
387)
388glGetBooleanIndexedvEXT=wrapper.wrapper(glGetBooleanIndexedvEXT).setOutput(
389    'data',size=_glgets._glget_size_mapping,pnameArg='target',orPassIn=True
390)
391# INPUT glCompressedTextureImage3DEXT.bits size not checked against imageSize
392glCompressedTextureImage3DEXT=wrapper.wrapper(glCompressedTextureImage3DEXT).setInputArraySize(
393    'bits', None
394)
395# INPUT glCompressedTextureImage2DEXT.bits size not checked against imageSize
396glCompressedTextureImage2DEXT=wrapper.wrapper(glCompressedTextureImage2DEXT).setInputArraySize(
397    'bits', None
398)
399# INPUT glCompressedTextureImage1DEXT.bits size not checked against imageSize
400glCompressedTextureImage1DEXT=wrapper.wrapper(glCompressedTextureImage1DEXT).setInputArraySize(
401    'bits', None
402)
403# INPUT glCompressedTextureSubImage3DEXT.bits size not checked against imageSize
404glCompressedTextureSubImage3DEXT=wrapper.wrapper(glCompressedTextureSubImage3DEXT).setInputArraySize(
405    'bits', None
406)
407# INPUT glCompressedTextureSubImage2DEXT.bits size not checked against imageSize
408glCompressedTextureSubImage2DEXT=wrapper.wrapper(glCompressedTextureSubImage2DEXT).setInputArraySize(
409    'bits', None
410)
411# INPUT glCompressedTextureSubImage1DEXT.bits size not checked against imageSize
412glCompressedTextureSubImage1DEXT=wrapper.wrapper(glCompressedTextureSubImage1DEXT).setInputArraySize(
413    'bits', None
414)
415# OUTPUT glGetCompressedTextureImageEXT.img COMPSIZE(target, lod)
416# INPUT glCompressedMultiTexImage3DEXT.bits size not checked against imageSize
417glCompressedMultiTexImage3DEXT=wrapper.wrapper(glCompressedMultiTexImage3DEXT).setInputArraySize(
418    'bits', None
419)
420# INPUT glCompressedMultiTexImage2DEXT.bits size not checked against imageSize
421glCompressedMultiTexImage2DEXT=wrapper.wrapper(glCompressedMultiTexImage2DEXT).setInputArraySize(
422    'bits', None
423)
424# INPUT glCompressedMultiTexImage1DEXT.bits size not checked against imageSize
425glCompressedMultiTexImage1DEXT=wrapper.wrapper(glCompressedMultiTexImage1DEXT).setInputArraySize(
426    'bits', None
427)
428# INPUT glCompressedMultiTexSubImage3DEXT.bits size not checked against imageSize
429glCompressedMultiTexSubImage3DEXT=wrapper.wrapper(glCompressedMultiTexSubImage3DEXT).setInputArraySize(
430    'bits', None
431)
432# INPUT glCompressedMultiTexSubImage2DEXT.bits size not checked against imageSize
433glCompressedMultiTexSubImage2DEXT=wrapper.wrapper(glCompressedMultiTexSubImage2DEXT).setInputArraySize(
434    'bits', None
435)
436# INPUT glCompressedMultiTexSubImage1DEXT.bits size not checked against imageSize
437glCompressedMultiTexSubImage1DEXT=wrapper.wrapper(glCompressedMultiTexSubImage1DEXT).setInputArraySize(
438    'bits', None
439)
440# OUTPUT glGetCompressedMultiTexImageEXT.img COMPSIZE(target, lod)
441glMatrixLoadTransposefEXT=wrapper.wrapper(glMatrixLoadTransposefEXT).setInputArraySize(
442    'm', 16
443)
444glMatrixLoadTransposedEXT=wrapper.wrapper(glMatrixLoadTransposedEXT).setInputArraySize(
445    'm', 16
446)
447glMatrixMultTransposefEXT=wrapper.wrapper(glMatrixMultTransposefEXT).setInputArraySize(
448    'm', 16
449)
450glMatrixMultTransposedEXT=wrapper.wrapper(glMatrixMultTransposedEXT).setInputArraySize(
451    'm', 16
452)
453# INPUT glNamedBufferDataEXT.data size not checked against 'size'
454glNamedBufferDataEXT=wrapper.wrapper(glNamedBufferDataEXT).setInputArraySize(
455    'data', None
456)
457# INPUT glNamedBufferSubDataEXT.data size not checked against 'size'
458glNamedBufferSubDataEXT=wrapper.wrapper(glNamedBufferSubDataEXT).setInputArraySize(
459    'data', None
460)
461glGetNamedBufferParameterivEXT=wrapper.wrapper(glGetNamedBufferParameterivEXT).setOutput(
462    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
463)
464glGetNamedBufferPointervEXT=wrapper.wrapper(glGetNamedBufferPointervEXT).setOutput(
465    'params',size=(1,),orPassIn=True
466)
467glGetNamedBufferSubDataEXT=wrapper.wrapper(glGetNamedBufferSubDataEXT).setOutput(
468    'data',size=_glgets._glget_size_mapping,pnameArg='size',orPassIn=True
469)
470# INPUT glProgramUniform1fvEXT.value size not checked against count
471glProgramUniform1fvEXT=wrapper.wrapper(glProgramUniform1fvEXT).setInputArraySize(
472    'value', None
473)
474# INPUT glProgramUniform2fvEXT.value size not checked against count*2
475glProgramUniform2fvEXT=wrapper.wrapper(glProgramUniform2fvEXT).setInputArraySize(
476    'value', None
477)
478# INPUT glProgramUniform3fvEXT.value size not checked against count*3
479glProgramUniform3fvEXT=wrapper.wrapper(glProgramUniform3fvEXT).setInputArraySize(
480    'value', None
481)
482# INPUT glProgramUniform4fvEXT.value size not checked against count*4
483glProgramUniform4fvEXT=wrapper.wrapper(glProgramUniform4fvEXT).setInputArraySize(
484    'value', None
485)
486# INPUT glProgramUniform1ivEXT.value size not checked against count
487glProgramUniform1ivEXT=wrapper.wrapper(glProgramUniform1ivEXT).setInputArraySize(
488    'value', None
489)
490# INPUT glProgramUniform2ivEXT.value size not checked against count*2
491glProgramUniform2ivEXT=wrapper.wrapper(glProgramUniform2ivEXT).setInputArraySize(
492    'value', None
493)
494# INPUT glProgramUniform3ivEXT.value size not checked against count*3
495glProgramUniform3ivEXT=wrapper.wrapper(glProgramUniform3ivEXT).setInputArraySize(
496    'value', None
497)
498# INPUT glProgramUniform4ivEXT.value size not checked against count*4
499glProgramUniform4ivEXT=wrapper.wrapper(glProgramUniform4ivEXT).setInputArraySize(
500    'value', None
501)
502# INPUT glProgramUniformMatrix2fvEXT.value size not checked against count*4
503glProgramUniformMatrix2fvEXT=wrapper.wrapper(glProgramUniformMatrix2fvEXT).setInputArraySize(
504    'value', None
505)
506# INPUT glProgramUniformMatrix3fvEXT.value size not checked against count*9
507glProgramUniformMatrix3fvEXT=wrapper.wrapper(glProgramUniformMatrix3fvEXT).setInputArraySize(
508    'value', None
509)
510# INPUT glProgramUniformMatrix4fvEXT.value size not checked against count*16
511glProgramUniformMatrix4fvEXT=wrapper.wrapper(glProgramUniformMatrix4fvEXT).setInputArraySize(
512    'value', None
513)
514# INPUT glProgramUniformMatrix2x3fvEXT.value size not checked against count*6
515glProgramUniformMatrix2x3fvEXT=wrapper.wrapper(glProgramUniformMatrix2x3fvEXT).setInputArraySize(
516    'value', None
517)
518# INPUT glProgramUniformMatrix3x2fvEXT.value size not checked against count*6
519glProgramUniformMatrix3x2fvEXT=wrapper.wrapper(glProgramUniformMatrix3x2fvEXT).setInputArraySize(
520    'value', None
521)
522# INPUT glProgramUniformMatrix2x4fvEXT.value size not checked against count*8
523glProgramUniformMatrix2x4fvEXT=wrapper.wrapper(glProgramUniformMatrix2x4fvEXT).setInputArraySize(
524    'value', None
525)
526# INPUT glProgramUniformMatrix4x2fvEXT.value size not checked against count*8
527glProgramUniformMatrix4x2fvEXT=wrapper.wrapper(glProgramUniformMatrix4x2fvEXT).setInputArraySize(
528    'value', None
529)
530# INPUT glProgramUniformMatrix3x4fvEXT.value size not checked against count*12
531glProgramUniformMatrix3x4fvEXT=wrapper.wrapper(glProgramUniformMatrix3x4fvEXT).setInputArraySize(
532    'value', None
533)
534# INPUT glProgramUniformMatrix4x3fvEXT.value size not checked against count*12
535glProgramUniformMatrix4x3fvEXT=wrapper.wrapper(glProgramUniformMatrix4x3fvEXT).setInputArraySize(
536    'value', None
537)
538# INPUT glTextureParameterIivEXT.params size not checked against 'pname'
539glTextureParameterIivEXT=wrapper.wrapper(glTextureParameterIivEXT).setInputArraySize(
540    'params', None
541)
542# INPUT glTextureParameterIuivEXT.params size not checked against 'pname'
543glTextureParameterIuivEXT=wrapper.wrapper(glTextureParameterIuivEXT).setInputArraySize(
544    'params', None
545)
546glGetTextureParameterIivEXT=wrapper.wrapper(glGetTextureParameterIivEXT).setOutput(
547    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
548)
549glGetTextureParameterIuivEXT=wrapper.wrapper(glGetTextureParameterIuivEXT).setOutput(
550    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
551)
552# INPUT glMultiTexParameterIivEXT.params size not checked against 'pname'
553glMultiTexParameterIivEXT=wrapper.wrapper(glMultiTexParameterIivEXT).setInputArraySize(
554    'params', None
555)
556# INPUT glMultiTexParameterIuivEXT.params size not checked against 'pname'
557glMultiTexParameterIuivEXT=wrapper.wrapper(glMultiTexParameterIuivEXT).setInputArraySize(
558    'params', None
559)
560glGetMultiTexParameterIivEXT=wrapper.wrapper(glGetMultiTexParameterIivEXT).setOutput(
561    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
562)
563glGetMultiTexParameterIuivEXT=wrapper.wrapper(glGetMultiTexParameterIuivEXT).setOutput(
564    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
565)
566# INPUT glProgramUniform1uivEXT.value size not checked against count
567glProgramUniform1uivEXT=wrapper.wrapper(glProgramUniform1uivEXT).setInputArraySize(
568    'value', None
569)
570# INPUT glProgramUniform2uivEXT.value size not checked against count*2
571glProgramUniform2uivEXT=wrapper.wrapper(glProgramUniform2uivEXT).setInputArraySize(
572    'value', None
573)
574# INPUT glProgramUniform3uivEXT.value size not checked against count*3
575glProgramUniform3uivEXT=wrapper.wrapper(glProgramUniform3uivEXT).setInputArraySize(
576    'value', None
577)
578# INPUT glProgramUniform4uivEXT.value size not checked against count*4
579glProgramUniform4uivEXT=wrapper.wrapper(glProgramUniform4uivEXT).setInputArraySize(
580    'value', None
581)
582# INPUT glNamedProgramLocalParameters4fvEXT.params size not checked against count*4
583glNamedProgramLocalParameters4fvEXT=wrapper.wrapper(glNamedProgramLocalParameters4fvEXT).setInputArraySize(
584    'params', None
585)
586glNamedProgramLocalParameterI4ivEXT=wrapper.wrapper(glNamedProgramLocalParameterI4ivEXT).setInputArraySize(
587    'params', 4
588)
589# INPUT glNamedProgramLocalParametersI4ivEXT.params size not checked against count*4
590glNamedProgramLocalParametersI4ivEXT=wrapper.wrapper(glNamedProgramLocalParametersI4ivEXT).setInputArraySize(
591    'params', None
592)
593glNamedProgramLocalParameterI4uivEXT=wrapper.wrapper(glNamedProgramLocalParameterI4uivEXT).setInputArraySize(
594    'params', 4
595)
596# INPUT glNamedProgramLocalParametersI4uivEXT.params size not checked against count*4
597glNamedProgramLocalParametersI4uivEXT=wrapper.wrapper(glNamedProgramLocalParametersI4uivEXT).setInputArraySize(
598    'params', None
599)
600glGetNamedProgramLocalParameterIivEXT=wrapper.wrapper(glGetNamedProgramLocalParameterIivEXT).setOutput(
601    'params',size=(4,),orPassIn=True
602)
603glGetNamedProgramLocalParameterIuivEXT=wrapper.wrapper(glGetNamedProgramLocalParameterIuivEXT).setOutput(
604    'params',size=(4,),orPassIn=True
605)
606# INPUT glGetFloati_vEXT.params size not checked against 'pname'
607glGetFloati_vEXT=wrapper.wrapper(glGetFloati_vEXT).setInputArraySize(
608    'params', None
609)
610# INPUT glGetDoublei_vEXT.params size not checked against 'pname'
611glGetDoublei_vEXT=wrapper.wrapper(glGetDoublei_vEXT).setInputArraySize(
612    'params', None
613)
614glGetPointeri_vEXT=wrapper.wrapper(glGetPointeri_vEXT).setInputArraySize(
615    'params', 1
616)
617# INPUT glNamedProgramStringEXT.string size not checked against len
618glNamedProgramStringEXT=wrapper.wrapper(glNamedProgramStringEXT).setInputArraySize(
619    'string', None
620)
621glNamedProgramLocalParameter4dvEXT=wrapper.wrapper(glNamedProgramLocalParameter4dvEXT).setInputArraySize(
622    'params', 4
623)
624glNamedProgramLocalParameter4fvEXT=wrapper.wrapper(glNamedProgramLocalParameter4fvEXT).setInputArraySize(
625    'params', 4
626)
627glGetNamedProgramLocalParameterdvEXT=wrapper.wrapper(glGetNamedProgramLocalParameterdvEXT).setOutput(
628    'params',size=(4,),orPassIn=True
629)
630glGetNamedProgramLocalParameterfvEXT=wrapper.wrapper(glGetNamedProgramLocalParameterfvEXT).setOutput(
631    'params',size=(4,),orPassIn=True
632)
633glGetNamedProgramivEXT=wrapper.wrapper(glGetNamedProgramivEXT).setOutput(
634    'params',size=(1,),orPassIn=True
635)
636# OUTPUT glGetNamedProgramStringEXT.string COMPSIZE(program, pname)
637glGetNamedRenderbufferParameterivEXT=wrapper.wrapper(glGetNamedRenderbufferParameterivEXT).setOutput(
638    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
639)
640glGetNamedFramebufferAttachmentParameterivEXT=wrapper.wrapper(glGetNamedFramebufferAttachmentParameterivEXT).setOutput(
641    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
642)
643# INPUT glFramebufferDrawBuffersEXT.bufs size not checked against n
644glFramebufferDrawBuffersEXT=wrapper.wrapper(glFramebufferDrawBuffersEXT).setInputArraySize(
645    'bufs', None
646)
647glGetFramebufferParameterivEXT=wrapper.wrapper(glGetFramebufferParameterivEXT).setOutput(
648    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
649)
650glGetVertexArrayPointervEXT=wrapper.wrapper(glGetVertexArrayPointervEXT).setInputArraySize(
651    'param', 1
652)
653# INPUT glNamedBufferStorageEXT.data size not checked against size
654glNamedBufferStorageEXT=wrapper.wrapper(glNamedBufferStorageEXT).setInputArraySize(
655    'data', None
656)
657# INPUT glClearNamedBufferDataEXT.data size not checked against 'format,type'
658glClearNamedBufferDataEXT=wrapper.wrapper(glClearNamedBufferDataEXT).setInputArraySize(
659    'data', None
660)
661# INPUT glClearNamedBufferSubDataEXT.data size not checked against 'format,type'
662glClearNamedBufferSubDataEXT=wrapper.wrapper(glClearNamedBufferSubDataEXT).setInputArraySize(
663    'data', None
664)
665glGetNamedFramebufferParameterivEXT=wrapper.wrapper(glGetNamedFramebufferParameterivEXT).setOutput(
666    'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
667)
668# INPUT glProgramUniform1dvEXT.value size not checked against count
669glProgramUniform1dvEXT=wrapper.wrapper(glProgramUniform1dvEXT).setInputArraySize(
670    'value', None
671)
672# INPUT glProgramUniform2dvEXT.value size not checked against count*2
673glProgramUniform2dvEXT=wrapper.wrapper(glProgramUniform2dvEXT).setInputArraySize(
674    'value', None
675)
676# INPUT glProgramUniform3dvEXT.value size not checked against count*3
677glProgramUniform3dvEXT=wrapper.wrapper(glProgramUniform3dvEXT).setInputArraySize(
678    'value', None
679)
680# INPUT glProgramUniform4dvEXT.value size not checked against count*4
681glProgramUniform4dvEXT=wrapper.wrapper(glProgramUniform4dvEXT).setInputArraySize(
682    'value', None
683)
684# INPUT glProgramUniformMatrix2dvEXT.value size not checked against count*4
685glProgramUniformMatrix2dvEXT=wrapper.wrapper(glProgramUniformMatrix2dvEXT).setInputArraySize(
686    'value', None
687)
688# INPUT glProgramUniformMatrix3dvEXT.value size not checked against count*9
689glProgramUniformMatrix3dvEXT=wrapper.wrapper(glProgramUniformMatrix3dvEXT).setInputArraySize(
690    'value', None
691)
692# INPUT glProgramUniformMatrix4dvEXT.value size not checked against count*16
693glProgramUniformMatrix4dvEXT=wrapper.wrapper(glProgramUniformMatrix4dvEXT).setInputArraySize(
694    'value', None
695)
696# INPUT glProgramUniformMatrix2x3dvEXT.value size not checked against count*6
697glProgramUniformMatrix2x3dvEXT=wrapper.wrapper(glProgramUniformMatrix2x3dvEXT).setInputArraySize(
698    'value', None
699)
700# INPUT glProgramUniformMatrix2x4dvEXT.value size not checked against count*8
701glProgramUniformMatrix2x4dvEXT=wrapper.wrapper(glProgramUniformMatrix2x4dvEXT).setInputArraySize(
702    'value', None
703)
704# INPUT glProgramUniformMatrix3x2dvEXT.value size not checked against count*6
705glProgramUniformMatrix3x2dvEXT=wrapper.wrapper(glProgramUniformMatrix3x2dvEXT).setInputArraySize(
706    'value', None
707)
708# INPUT glProgramUniformMatrix3x4dvEXT.value size not checked against count*12
709glProgramUniformMatrix3x4dvEXT=wrapper.wrapper(glProgramUniformMatrix3x4dvEXT).setInputArraySize(
710    'value', None
711)
712# INPUT glProgramUniformMatrix4x2dvEXT.value size not checked against count*8
713glProgramUniformMatrix4x2dvEXT=wrapper.wrapper(glProgramUniformMatrix4x2dvEXT).setInputArraySize(
714    'value', None
715)
716# INPUT glProgramUniformMatrix4x3dvEXT.value size not checked against count*12
717glProgramUniformMatrix4x3dvEXT=wrapper.wrapper(glProgramUniformMatrix4x3dvEXT).setInputArraySize(
718    'value', None
719)
720### END AUTOGENERATED SECTION