1'''OpenGL extension VERSION.GLES2_2_0 2 3This module customises the behaviour of the 4OpenGL.raw.GLES2.VERSION.GLES2_2_0 to provide a more 5Python-friendly API 6 7The official definition of this extension is available here: 8http://www.opengl.org/registry/specs/VERSION/GLES2_2_0.txt 9''' 10from OpenGL import platform, constant, arrays 11from OpenGL import extensions, wrapper 12import ctypes 13from OpenGL.raw.GLES2 import _types, _glgets 14from OpenGL.raw.GLES2.VERSION.GLES2_2_0 import * 15from OpenGL.raw.GLES2.VERSION.GLES2_2_0 import _EXTENSION_NAME 16 17def glInitGles220VERSION(): 18 '''Return boolean indicating whether this extension is available''' 19 from OpenGL import extensions 20 return extensions.hasGLExtension( _EXTENSION_NAME ) 21 22# INPUT glBufferData.data size not checked against size 23glBufferData=wrapper.wrapper(glBufferData).setInputArraySize( 24 'data', None 25) 26# INPUT glBufferSubData.data size not checked against size 27glBufferSubData=wrapper.wrapper(glBufferSubData).setInputArraySize( 28 'data', None 29) 30# INPUT glCompressedTexImage2D.data size not checked against imageSize 31glCompressedTexImage2D=wrapper.wrapper(glCompressedTexImage2D).setInputArraySize( 32 'data', None 33) 34# INPUT glCompressedTexSubImage2D.data size not checked against imageSize 35glCompressedTexSubImage2D=wrapper.wrapper(glCompressedTexSubImage2D).setInputArraySize( 36 'data', None 37) 38# INPUT glDeleteBuffers.buffers size not checked against n 39glDeleteBuffers=wrapper.wrapper(glDeleteBuffers).setInputArraySize( 40 'buffers', None 41) 42# INPUT glDeleteFramebuffers.framebuffers size not checked against n 43glDeleteFramebuffers=wrapper.wrapper(glDeleteFramebuffers).setInputArraySize( 44 'framebuffers', None 45) 46# INPUT glDeleteRenderbuffers.renderbuffers size not checked against n 47glDeleteRenderbuffers=wrapper.wrapper(glDeleteRenderbuffers).setInputArraySize( 48 'renderbuffers', None 49) 50# INPUT glDeleteTextures.textures size not checked against n 51glDeleteTextures=wrapper.wrapper(glDeleteTextures).setInputArraySize( 52 'textures', None 53) 54# INPUT glDrawElements.indices size not checked against 'count,type' 55glDrawElements=wrapper.wrapper(glDrawElements).setInputArraySize( 56 'indices', None 57) 58glGenBuffers=wrapper.wrapper(glGenBuffers).setOutput( 59 'buffers',size=lambda x:(x,),pnameArg='n',orPassIn=True 60) 61glGenFramebuffers=wrapper.wrapper(glGenFramebuffers).setOutput( 62 'framebuffers',size=lambda x:(x,),pnameArg='n',orPassIn=True 63) 64glGenRenderbuffers=wrapper.wrapper(glGenRenderbuffers).setOutput( 65 'renderbuffers',size=lambda x:(x,),pnameArg='n',orPassIn=True 66) 67glGenTextures=wrapper.wrapper(glGenTextures).setOutput( 68 'textures',size=lambda x:(x,),pnameArg='n',orPassIn=True 69) 70glGetActiveAttrib=wrapper.wrapper(glGetActiveAttrib).setOutput( 71 'length',size=(1,),orPassIn=True 72).setOutput( 73 'type',size=(1,),orPassIn=True 74).setOutput( 75 'name',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True 76).setOutput( 77 'size',size=(1,),orPassIn=True 78) 79glGetActiveUniform=wrapper.wrapper(glGetActiveUniform).setOutput( 80 'length',size=(1,),orPassIn=True 81).setOutput( 82 'type',size=(1,),orPassIn=True 83).setOutput( 84 'name',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True 85).setOutput( 86 'size',size=(1,),orPassIn=True 87) 88# glGetAttachedShaders.obj is OUTPUT without known output size 89# INPUT glGetAttachedShaders.shaders size not checked against maxCount 90glGetAttachedShaders=wrapper.wrapper(glGetAttachedShaders).setOutput( 91 'count',size=(1,),orPassIn=True 92).setInputArraySize( 93 'shaders', None 94) 95glGetBooleanv=wrapper.wrapper(glGetBooleanv).setOutput( 96 'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 97) 98glGetBufferParameteriv=wrapper.wrapper(glGetBufferParameteriv).setOutput( 99 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 100) 101glGetFloatv=wrapper.wrapper(glGetFloatv).setOutput( 102 'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 103) 104glGetFramebufferAttachmentParameteriv=wrapper.wrapper(glGetFramebufferAttachmentParameteriv).setOutput( 105 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 106) 107glGetIntegerv=wrapper.wrapper(glGetIntegerv).setOutput( 108 'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 109) 110glGetProgramiv=wrapper.wrapper(glGetProgramiv).setOutput( 111 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 112) 113glGetProgramInfoLog=wrapper.wrapper(glGetProgramInfoLog).setOutput( 114 'length',size=(1,),orPassIn=True 115).setOutput( 116 'infoLog',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True 117) 118glGetRenderbufferParameteriv=wrapper.wrapper(glGetRenderbufferParameteriv).setOutput( 119 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 120) 121glGetShaderiv=wrapper.wrapper(glGetShaderiv).setOutput( 122 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 123) 124glGetShaderInfoLog=wrapper.wrapper(glGetShaderInfoLog).setOutput( 125 'length',size=(1,),orPassIn=True 126).setOutput( 127 'infoLog',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True 128) 129glGetShaderPrecisionFormat=wrapper.wrapper(glGetShaderPrecisionFormat).setOutput( 130 'range',size=(2,),orPassIn=True 131).setOutput( 132 'precision',size=(2,),orPassIn=True 133) 134glGetShaderSource=wrapper.wrapper(glGetShaderSource).setOutput( 135 'source',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True 136).setOutput( 137 'length',size=(1,),orPassIn=True 138) 139glGetTexParameterfv=wrapper.wrapper(glGetTexParameterfv).setOutput( 140 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 141) 142glGetTexParameteriv=wrapper.wrapper(glGetTexParameteriv).setOutput( 143 'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True 144) 145# glGetUniformfv.params is OUTPUT without known output size 146# glGetUniformiv.params is OUTPUT without known output size 147glGetVertexAttribfv=wrapper.wrapper(glGetVertexAttribfv).setOutput( 148 'params',size=(4,),orPassIn=True 149) 150glGetVertexAttribiv=wrapper.wrapper(glGetVertexAttribiv).setOutput( 151 'params',size=(4,),orPassIn=True 152) 153glGetVertexAttribPointerv=wrapper.wrapper(glGetVertexAttribPointerv).setOutput( 154 'pointer',size=(1,),orPassIn=True 155) 156# OUTPUT glReadPixels.pixels COMPSIZE(format,type,width,height) 157# INPUT glShaderBinary.binary size not checked against length 158# INPUT glShaderBinary.shaders size not checked against count 159glShaderBinary=wrapper.wrapper(glShaderBinary).setInputArraySize( 160 'binary', None 161).setInputArraySize( 162 'shaders', None 163) 164# INPUT glShaderSource.length size not checked against count 165# INPUT glShaderSource.string size not checked against count 166glShaderSource=wrapper.wrapper(glShaderSource).setInputArraySize( 167 'length', None 168).setInputArraySize( 169 'string', None 170) 171# INPUT glTexImage2D.pixels size not checked against 'format,type,width,height' 172glTexImage2D=wrapper.wrapper(glTexImage2D).setInputArraySize( 173 'pixels', None 174) 175# INPUT glTexParameterfv.params size not checked against 'pname' 176glTexParameterfv=wrapper.wrapper(glTexParameterfv).setInputArraySize( 177 'params', None 178) 179# INPUT glTexParameteriv.params size not checked against 'pname' 180glTexParameteriv=wrapper.wrapper(glTexParameteriv).setInputArraySize( 181 'params', None 182) 183# INPUT glTexSubImage2D.pixels size not checked against 'format,type,width,height' 184glTexSubImage2D=wrapper.wrapper(glTexSubImage2D).setInputArraySize( 185 'pixels', None 186) 187# INPUT glUniform1fv.value size not checked against count 188glUniform1fv=wrapper.wrapper(glUniform1fv).setInputArraySize( 189 'value', None 190) 191# INPUT glUniform1iv.value size not checked against count 192glUniform1iv=wrapper.wrapper(glUniform1iv).setInputArraySize( 193 'value', None 194) 195# INPUT glUniform2fv.value size not checked against count 196glUniform2fv=wrapper.wrapper(glUniform2fv).setInputArraySize( 197 'value', None 198) 199# INPUT glUniform2iv.value size not checked against count 200glUniform2iv=wrapper.wrapper(glUniform2iv).setInputArraySize( 201 'value', None 202) 203# INPUT glUniform3fv.value size not checked against count 204glUniform3fv=wrapper.wrapper(glUniform3fv).setInputArraySize( 205 'value', None 206) 207# INPUT glUniform3iv.value size not checked against count 208glUniform3iv=wrapper.wrapper(glUniform3iv).setInputArraySize( 209 'value', None 210) 211# INPUT glUniform4fv.value size not checked against count 212glUniform4fv=wrapper.wrapper(glUniform4fv).setInputArraySize( 213 'value', None 214) 215# INPUT glUniform4iv.value size not checked against count 216glUniform4iv=wrapper.wrapper(glUniform4iv).setInputArraySize( 217 'value', None 218) 219# INPUT glUniformMatrix2fv.value size not checked against count 220glUniformMatrix2fv=wrapper.wrapper(glUniformMatrix2fv).setInputArraySize( 221 'value', None 222) 223# INPUT glUniformMatrix3fv.value size not checked against count 224glUniformMatrix3fv=wrapper.wrapper(glUniformMatrix3fv).setInputArraySize( 225 'value', None 226) 227# INPUT glUniformMatrix4fv.value size not checked against count 228glUniformMatrix4fv=wrapper.wrapper(glUniformMatrix4fv).setInputArraySize( 229 'value', None 230) 231glVertexAttrib1fv=wrapper.wrapper(glVertexAttrib1fv).setInputArraySize( 232 'v', 1 233) 234glVertexAttrib2fv=wrapper.wrapper(glVertexAttrib2fv).setInputArraySize( 235 'v', 2 236) 237glVertexAttrib3fv=wrapper.wrapper(glVertexAttrib3fv).setInputArraySize( 238 'v', 3 239) 240glVertexAttrib4fv=wrapper.wrapper(glVertexAttrib4fv).setInputArraySize( 241 'v', 4 242) 243# INPUT glVertexAttribPointer.pointer size not checked against 'size,type,stride' 244glVertexAttribPointer=wrapper.wrapper(glVertexAttribPointer).setInputArraySize( 245 'pointer', None 246) 247### END AUTOGENERATED SECTION 248from OpenGL import converters 249from OpenGL.lazywrapper import lazy as _lazy 250 251glShaderSource = platform.createExtensionFunction( 252 'glShaderSource', dll=platform.PLATFORM.GLES2, 253 resultType=None, 254 argTypes=(_types.GLhandle, _types.GLsizei, ctypes.POINTER(ctypes.c_char_p), arrays.GLintArray,), 255 doc = 'glShaderSource( GLhandle(shaderObj),[bytes(string),...]) -> None', 256 argNames = ('shaderObj', 'count', 'string', 'length',), 257 extension = _EXTENSION_NAME, 258) 259 260conv = converters.StringLengths( name='string' ) 261glShaderSource = wrapper.wrapper( 262 glShaderSource 263).setPyConverter( 264 'count' # number of strings 265).setPyConverter( 266 'length' # lengths of strings 267).setPyConverter( 268 'string', conv.stringArray 269).setCResolver( 270 'string', conv.stringArrayForC, 271).setCConverter( 272 'length', conv, 273).setCConverter( 274 'count', conv.totalCount, 275) 276try: 277 del conv 278except NameError as err: 279 pass 280 281glGetShaderiv = wrapper.wrapper( glGetShaderiv ).setOutput( 282 'params', 283 size=(1,), 284 arrayType=arrays.GLintArray, 285 orPassIn = True, 286) 287 288 289@_lazy( glGetShaderInfoLog ) 290def glGetShaderInfoLog( baseOperation, obj ): 291 """Retrieve the shader's error messages as a Python string 292 293 returns string which is '' if no message 294 """ 295 length = int(glGetShaderiv(obj, GL_INFO_LOG_LENGTH)) 296 if length > 0: 297 log = ctypes.create_string_buffer(length) 298 baseOperation(obj, length, None, log) 299 return log.value.strip(_NULL_8_BYTE) # null-termination 300 return '' 301@_lazy( glGetProgramInfoLog ) 302def glGetProgramInfoLog( baseOperation, obj ): 303 """Retrieve the shader program's error messages as a Python string 304 305 returns string which is '' if no message 306 """ 307 length = int(glGetProgramiv(obj, GL_INFO_LOG_LENGTH)) 308 if length > 0: 309 log = ctypes.create_string_buffer(length) 310 baseOperation(obj, length, None, log) 311 return log.value.strip(_NULL_8_BYTE) # null-termination 312 return '' 313 314@_lazy( glGetAttachedShaders ) 315def glGetAttachedShaders( baseOperation, obj ): 316 """Retrieve the attached objects as an array of GLhandle instances""" 317 length= glGetProgramiv( obj, GL_ATTACHED_SHADERS ) 318 if length > 0: 319 storage = arrays.GLuintArray.zeros( (length,)) 320 baseOperation( obj, length, None, storage ) 321 return storage 322 return arrays.GLuintArray.zeros( (0,)) 323 324 325@_lazy( glGetShaderSource ) 326def glGetShaderSource( baseOperation, obj ): 327 """Retrieve the program/shader's source code as a Python string 328 329 returns string which is '' if no source code 330 """ 331 length = int(glGetShaderiv(obj, GL_OBJECT_SHADER_SOURCE_LENGTH)) 332 if length > 0: 333 source = ctypes.create_string_buffer(length) 334 baseOperation(obj, length, None, source) 335 return source.value.strip(_NULL_8_BYTE) # null-termination 336 return '' 337 338@_lazy( glGetActiveUniform ) 339def glGetActiveUniform(baseOperation,program, index): 340 """Retrieve the name, size and type of the uniform of the index in the program""" 341 max_index = int(glGetProgramiv( program, GL_OBJECT_ACTIVE_UNIFORMS )) 342 length = int(glGetProgramiv( program, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH)) 343 if index < max_index and index >= 0: 344 if length > 0: 345 name = ctypes.create_string_buffer(length) 346 size = arrays.GLintArray.zeros( (1,)) 347 gl_type = arrays.GLenumArray.zeros( (1,)) 348 namelen = arrays.GLsizeiArray.zeros( (1,)) 349 baseOperation(program, index, length, namelen, size, gl_type, name) 350 return name.value[:int(namelen[0])], size[0], gl_type[0] 351 raise ValueError( """No currently specified uniform names""" ) 352 raise IndexError( 'Index %s out of range 0 to %i' % (index, max_index - 1, ) ) 353 354@_lazy( glGetUniformLocation ) 355def glGetUniformLocation( baseOperation, program, name ): 356 """Check that name is a string with a null byte at the end of it""" 357 if not name: 358 raise ValueError( """Non-null name required""" ) 359 name = as_8_bit( name ) 360 if name[-1] != _NULL_8_BYTE: 361 name = name + _NULL_8_BYTE 362 return baseOperation( program, name ) 363@_lazy( glGetAttribLocation ) 364def glGetAttribLocation( baseOperation, program, name ): 365 """Check that name is a string with a null byte at the end of it""" 366 if not name: 367 raise ValueError( """Non-null name required""" ) 368 369 name = as_8_bit( name ) 370 if name[-1] != _NULL_8_BYTE: 371 name = name + _NULL_8_BYTE 372 return baseOperation( program, name ) 373 374@_lazy( glVertexAttribPointer ) 375def glVertexAttribPointer( 376 baseOperation, index, size, type, 377 normalized, stride, pointer, 378): 379 """Set an attribute pointer for a given shader (index) 380 381 index -- the index of the generic vertex to bind, see 382 glGetAttribLocation for retrieval of the value, 383 note that index is a global variable, not per-shader 384 size -- number of basic elements per record, 1,2,3, or 4 385 type -- enum constant for data-type 386 normalized -- whether to perform int to float 387 normalization on integer-type values 388 stride -- stride in machine units (bytes) between 389 consecutive records, normally used to create 390 "interleaved" arrays 391 pointer -- data-pointer which provides the data-values, 392 normally a vertex-buffer-object or offset into the 393 same. 394 395 This implementation stores a copy of the data-pointer 396 in the contextdata structure in order to prevent null- 397 reference errors in the renderer. 398 """ 399 array = ArrayDatatype.asArray( pointer, type ) 400 key = ('vertex-attrib',index) 401 contextdata.setValue( key, array ) 402 return baseOperation( 403 index, size, type, 404 normalized, stride, 405 ArrayDatatype.voidDataPointer( array ) 406 ) 407 408