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 None 475glProgramUniform2fvEXT=wrapper.wrapper(glProgramUniform2fvEXT).setInputArraySize( 476 'value', None 477) 478# INPUT glProgramUniform3fvEXT.value size not checked against None 479glProgramUniform3fvEXT=wrapper.wrapper(glProgramUniform3fvEXT).setInputArraySize( 480 'value', None 481) 482# INPUT glProgramUniform4fvEXT.value size not checked against None 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 None 491glProgramUniform2ivEXT=wrapper.wrapper(glProgramUniform2ivEXT).setInputArraySize( 492 'value', None 493) 494# INPUT glProgramUniform3ivEXT.value size not checked against None 495glProgramUniform3ivEXT=wrapper.wrapper(glProgramUniform3ivEXT).setInputArraySize( 496 'value', None 497) 498# INPUT glProgramUniform4ivEXT.value size not checked against None 499glProgramUniform4ivEXT=wrapper.wrapper(glProgramUniform4ivEXT).setInputArraySize( 500 'value', None 501) 502# INPUT glProgramUniformMatrix2fvEXT.value size not checked against None 503glProgramUniformMatrix2fvEXT=wrapper.wrapper(glProgramUniformMatrix2fvEXT).setInputArraySize( 504 'value', None 505) 506# INPUT glProgramUniformMatrix3fvEXT.value size not checked against None 507glProgramUniformMatrix3fvEXT=wrapper.wrapper(glProgramUniformMatrix3fvEXT).setInputArraySize( 508 'value', None 509) 510# INPUT glProgramUniformMatrix4fvEXT.value size not checked against None 511glProgramUniformMatrix4fvEXT=wrapper.wrapper(glProgramUniformMatrix4fvEXT).setInputArraySize( 512 'value', None 513) 514# INPUT glProgramUniformMatrix2x3fvEXT.value size not checked against None 515glProgramUniformMatrix2x3fvEXT=wrapper.wrapper(glProgramUniformMatrix2x3fvEXT).setInputArraySize( 516 'value', None 517) 518# INPUT glProgramUniformMatrix3x2fvEXT.value size not checked against None 519glProgramUniformMatrix3x2fvEXT=wrapper.wrapper(glProgramUniformMatrix3x2fvEXT).setInputArraySize( 520 'value', None 521) 522# INPUT glProgramUniformMatrix2x4fvEXT.value size not checked against None 523glProgramUniformMatrix2x4fvEXT=wrapper.wrapper(glProgramUniformMatrix2x4fvEXT).setInputArraySize( 524 'value', None 525) 526# INPUT glProgramUniformMatrix4x2fvEXT.value size not checked against None 527glProgramUniformMatrix4x2fvEXT=wrapper.wrapper(glProgramUniformMatrix4x2fvEXT).setInputArraySize( 528 'value', None 529) 530# INPUT glProgramUniformMatrix3x4fvEXT.value size not checked against None 531glProgramUniformMatrix3x4fvEXT=wrapper.wrapper(glProgramUniformMatrix3x4fvEXT).setInputArraySize( 532 'value', None 533) 534# INPUT glProgramUniformMatrix4x3fvEXT.value size not checked against None 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 None 571glProgramUniform2uivEXT=wrapper.wrapper(glProgramUniform2uivEXT).setInputArraySize( 572 'value', None 573) 574# INPUT glProgramUniform3uivEXT.value size not checked against None 575glProgramUniform3uivEXT=wrapper.wrapper(glProgramUniform3uivEXT).setInputArraySize( 576 'value', None 577) 578# INPUT glProgramUniform4uivEXT.value size not checked against None 579glProgramUniform4uivEXT=wrapper.wrapper(glProgramUniform4uivEXT).setInputArraySize( 580 'value', None 581) 582# INPUT glNamedProgramLocalParameters4fvEXT.params size not checked against None 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 None 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 None 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 'target' 607glGetFloati_vEXT=wrapper.wrapper(glGetFloati_vEXT).setInputArraySize( 608 'params', None 609) 610# INPUT glGetDoublei_vEXT.params size not checked against 'target' 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) 665# INPUT glGetNamedFramebufferParameterivEXT.params size not checked against 'pname' 666glGetNamedFramebufferParameterivEXT=wrapper.wrapper(glGetNamedFramebufferParameterivEXT).setInputArraySize( 667 'params', None 668) 669# INPUT glProgramUniform1dvEXT.value size not checked against count 670glProgramUniform1dvEXT=wrapper.wrapper(glProgramUniform1dvEXT).setInputArraySize( 671 'value', None 672) 673# INPUT glProgramUniform2dvEXT.value size not checked against count 674glProgramUniform2dvEXT=wrapper.wrapper(glProgramUniform2dvEXT).setInputArraySize( 675 'value', None 676) 677# INPUT glProgramUniform3dvEXT.value size not checked against count 678glProgramUniform3dvEXT=wrapper.wrapper(glProgramUniform3dvEXT).setInputArraySize( 679 'value', None 680) 681# INPUT glProgramUniform4dvEXT.value size not checked against count 682glProgramUniform4dvEXT=wrapper.wrapper(glProgramUniform4dvEXT).setInputArraySize( 683 'value', None 684) 685# INPUT glProgramUniformMatrix2dvEXT.value size not checked against count 686glProgramUniformMatrix2dvEXT=wrapper.wrapper(glProgramUniformMatrix2dvEXT).setInputArraySize( 687 'value', None 688) 689# INPUT glProgramUniformMatrix3dvEXT.value size not checked against count 690glProgramUniformMatrix3dvEXT=wrapper.wrapper(glProgramUniformMatrix3dvEXT).setInputArraySize( 691 'value', None 692) 693# INPUT glProgramUniformMatrix4dvEXT.value size not checked against count 694glProgramUniformMatrix4dvEXT=wrapper.wrapper(glProgramUniformMatrix4dvEXT).setInputArraySize( 695 'value', None 696) 697# INPUT glProgramUniformMatrix2x3dvEXT.value size not checked against count 698glProgramUniformMatrix2x3dvEXT=wrapper.wrapper(glProgramUniformMatrix2x3dvEXT).setInputArraySize( 699 'value', None 700) 701# INPUT glProgramUniformMatrix2x4dvEXT.value size not checked against count 702glProgramUniformMatrix2x4dvEXT=wrapper.wrapper(glProgramUniformMatrix2x4dvEXT).setInputArraySize( 703 'value', None 704) 705# INPUT glProgramUniformMatrix3x2dvEXT.value size not checked against count 706glProgramUniformMatrix3x2dvEXT=wrapper.wrapper(glProgramUniformMatrix3x2dvEXT).setInputArraySize( 707 'value', None 708) 709# INPUT glProgramUniformMatrix3x4dvEXT.value size not checked against count 710glProgramUniformMatrix3x4dvEXT=wrapper.wrapper(glProgramUniformMatrix3x4dvEXT).setInputArraySize( 711 'value', None 712) 713# INPUT glProgramUniformMatrix4x2dvEXT.value size not checked against count 714glProgramUniformMatrix4x2dvEXT=wrapper.wrapper(glProgramUniformMatrix4x2dvEXT).setInputArraySize( 715 'value', None 716) 717# INPUT glProgramUniformMatrix4x3dvEXT.value size not checked against count 718glProgramUniformMatrix4x3dvEXT=wrapper.wrapper(glProgramUniformMatrix4x3dvEXT).setInputArraySize( 719 'value', None 720) 721### END AUTOGENERATED SECTION