camenduru's picture
thanks to vye16 ❤
fb5159d
'''OpenGL extension VERSION.GLES2_2_0
This module customises the behaviour of the
OpenGL.raw.GLES2.VERSION.GLES2_2_0 to provide a more
Python-friendly API
The official definition of this extension is available here:
http://www.opengl.org/registry/specs/VERSION/GLES2_2_0.txt
'''
from OpenGL import platform, constant, arrays
from OpenGL import extensions, wrapper
import ctypes
from OpenGL.raw.GLES2 import _types, _glgets
from OpenGL.raw.GLES2.VERSION.GLES2_2_0 import *
from OpenGL.raw.GLES2.VERSION.GLES2_2_0 import _EXTENSION_NAME
def glInitGles220VERSION():
'''Return boolean indicating whether this extension is available'''
from OpenGL import extensions
return extensions.hasGLExtension( _EXTENSION_NAME )
# INPUT glBufferData.data size not checked against size
glBufferData=wrapper.wrapper(glBufferData).setInputArraySize(
'data', None
)
# INPUT glBufferSubData.data size not checked against size
glBufferSubData=wrapper.wrapper(glBufferSubData).setInputArraySize(
'data', None
)
# INPUT glCompressedTexImage2D.data size not checked against imageSize
glCompressedTexImage2D=wrapper.wrapper(glCompressedTexImage2D).setInputArraySize(
'data', None
)
# INPUT glCompressedTexSubImage2D.data size not checked against imageSize
glCompressedTexSubImage2D=wrapper.wrapper(glCompressedTexSubImage2D).setInputArraySize(
'data', None
)
# INPUT glDeleteBuffers.buffers size not checked against n
glDeleteBuffers=wrapper.wrapper(glDeleteBuffers).setInputArraySize(
'buffers', None
)
# INPUT glDeleteFramebuffers.framebuffers size not checked against n
glDeleteFramebuffers=wrapper.wrapper(glDeleteFramebuffers).setInputArraySize(
'framebuffers', None
)
# INPUT glDeleteRenderbuffers.renderbuffers size not checked against n
glDeleteRenderbuffers=wrapper.wrapper(glDeleteRenderbuffers).setInputArraySize(
'renderbuffers', None
)
# INPUT glDeleteTextures.textures size not checked against n
glDeleteTextures=wrapper.wrapper(glDeleteTextures).setInputArraySize(
'textures', None
)
# INPUT glDrawElements.indices size not checked against 'count,type'
glDrawElements=wrapper.wrapper(glDrawElements).setInputArraySize(
'indices', None
)
glGenBuffers=wrapper.wrapper(glGenBuffers).setOutput(
'buffers',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
glGenFramebuffers=wrapper.wrapper(glGenFramebuffers).setOutput(
'framebuffers',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
glGenRenderbuffers=wrapper.wrapper(glGenRenderbuffers).setOutput(
'renderbuffers',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
glGenTextures=wrapper.wrapper(glGenTextures).setOutput(
'textures',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
glGetActiveAttrib=wrapper.wrapper(glGetActiveAttrib).setOutput(
'length',size=(1,),orPassIn=True
).setOutput(
'type',size=(1,),orPassIn=True
).setOutput(
'name',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True
).setOutput(
'size',size=(1,),orPassIn=True
)
glGetActiveUniform=wrapper.wrapper(glGetActiveUniform).setOutput(
'length',size=(1,),orPassIn=True
).setOutput(
'type',size=(1,),orPassIn=True
).setOutput(
'name',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True
).setOutput(
'size',size=(1,),orPassIn=True
)
# glGetAttachedShaders.obj is OUTPUT without known output size
# INPUT glGetAttachedShaders.shaders size not checked against maxCount
glGetAttachedShaders=wrapper.wrapper(glGetAttachedShaders).setOutput(
'count',size=(1,),orPassIn=True
).setInputArraySize(
'shaders', None
)
glGetBooleanv=wrapper.wrapper(glGetBooleanv).setOutput(
'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetBufferParameteriv=wrapper.wrapper(glGetBufferParameteriv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetFloatv=wrapper.wrapper(glGetFloatv).setOutput(
'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetFramebufferAttachmentParameteriv=wrapper.wrapper(glGetFramebufferAttachmentParameteriv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetIntegerv=wrapper.wrapper(glGetIntegerv).setOutput(
'data',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetProgramiv=wrapper.wrapper(glGetProgramiv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetProgramInfoLog=wrapper.wrapper(glGetProgramInfoLog).setOutput(
'length',size=(1,),orPassIn=True
).setOutput(
'infoLog',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True
)
glGetRenderbufferParameteriv=wrapper.wrapper(glGetRenderbufferParameteriv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetShaderiv=wrapper.wrapper(glGetShaderiv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetShaderInfoLog=wrapper.wrapper(glGetShaderInfoLog).setOutput(
'length',size=(1,),orPassIn=True
).setOutput(
'infoLog',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True
)
glGetShaderPrecisionFormat=wrapper.wrapper(glGetShaderPrecisionFormat).setOutput(
'range',size=(2,),orPassIn=True
).setOutput(
'precision',size=(2,),orPassIn=True
)
glGetShaderSource=wrapper.wrapper(glGetShaderSource).setOutput(
'source',size=lambda x:(x,),pnameArg='bufSize',orPassIn=True
).setOutput(
'length',size=(1,),orPassIn=True
)
glGetTexParameterfv=wrapper.wrapper(glGetTexParameterfv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetTexParameteriv=wrapper.wrapper(glGetTexParameteriv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
# glGetUniformfv.params is OUTPUT without known output size
# glGetUniformiv.params is OUTPUT without known output size
glGetVertexAttribfv=wrapper.wrapper(glGetVertexAttribfv).setOutput(
'params',size=(4,),orPassIn=True
)
glGetVertexAttribiv=wrapper.wrapper(glGetVertexAttribiv).setOutput(
'params',size=(4,),orPassIn=True
)
glGetVertexAttribPointerv=wrapper.wrapper(glGetVertexAttribPointerv).setOutput(
'pointer',size=(1,),orPassIn=True
)
# OUTPUT glReadPixels.pixels COMPSIZE(format,type,width,height)
# INPUT glShaderBinary.binary size not checked against length
# INPUT glShaderBinary.shaders size not checked against count
glShaderBinary=wrapper.wrapper(glShaderBinary).setInputArraySize(
'binary', None
).setInputArraySize(
'shaders', None
)
# INPUT glShaderSource.length size not checked against count
# INPUT glShaderSource.string size not checked against count
glShaderSource=wrapper.wrapper(glShaderSource).setInputArraySize(
'length', None
).setInputArraySize(
'string', None
)
# INPUT glTexImage2D.pixels size not checked against 'format,type,width,height'
glTexImage2D=wrapper.wrapper(glTexImage2D).setInputArraySize(
'pixels', None
)
# INPUT glTexParameterfv.params size not checked against 'pname'
glTexParameterfv=wrapper.wrapper(glTexParameterfv).setInputArraySize(
'params', None
)
# INPUT glTexParameteriv.params size not checked against 'pname'
glTexParameteriv=wrapper.wrapper(glTexParameteriv).setInputArraySize(
'params', None
)
# INPUT glTexSubImage2D.pixels size not checked against 'format,type,width,height'
glTexSubImage2D=wrapper.wrapper(glTexSubImage2D).setInputArraySize(
'pixels', None
)
# INPUT glUniform1fv.value size not checked against count
glUniform1fv=wrapper.wrapper(glUniform1fv).setInputArraySize(
'value', None
)
# INPUT glUniform1iv.value size not checked against count
glUniform1iv=wrapper.wrapper(glUniform1iv).setInputArraySize(
'value', None
)
# INPUT glUniform2fv.value size not checked against count
glUniform2fv=wrapper.wrapper(glUniform2fv).setInputArraySize(
'value', None
)
# INPUT glUniform2iv.value size not checked against count
glUniform2iv=wrapper.wrapper(glUniform2iv).setInputArraySize(
'value', None
)
# INPUT glUniform3fv.value size not checked against count
glUniform3fv=wrapper.wrapper(glUniform3fv).setInputArraySize(
'value', None
)
# INPUT glUniform3iv.value size not checked against count
glUniform3iv=wrapper.wrapper(glUniform3iv).setInputArraySize(
'value', None
)
# INPUT glUniform4fv.value size not checked against count
glUniform4fv=wrapper.wrapper(glUniform4fv).setInputArraySize(
'value', None
)
# INPUT glUniform4iv.value size not checked against count
glUniform4iv=wrapper.wrapper(glUniform4iv).setInputArraySize(
'value', None
)
# INPUT glUniformMatrix2fv.value size not checked against count
glUniformMatrix2fv=wrapper.wrapper(glUniformMatrix2fv).setInputArraySize(
'value', None
)
# INPUT glUniformMatrix3fv.value size not checked against count
glUniformMatrix3fv=wrapper.wrapper(glUniformMatrix3fv).setInputArraySize(
'value', None
)
# INPUT glUniformMatrix4fv.value size not checked against count
glUniformMatrix4fv=wrapper.wrapper(glUniformMatrix4fv).setInputArraySize(
'value', None
)
glVertexAttrib1fv=wrapper.wrapper(glVertexAttrib1fv).setInputArraySize(
'v', 1
)
glVertexAttrib2fv=wrapper.wrapper(glVertexAttrib2fv).setInputArraySize(
'v', 2
)
glVertexAttrib3fv=wrapper.wrapper(glVertexAttrib3fv).setInputArraySize(
'v', 3
)
glVertexAttrib4fv=wrapper.wrapper(glVertexAttrib4fv).setInputArraySize(
'v', 4
)
# INPUT glVertexAttribPointer.pointer size not checked against 'size,type,stride'
glVertexAttribPointer=wrapper.wrapper(glVertexAttribPointer).setInputArraySize(
'pointer', None
)
### END AUTOGENERATED SECTION
from OpenGL import converters
from OpenGL.lazywrapper import lazy as _lazy
glShaderSource = platform.createExtensionFunction(
'glShaderSource', dll=platform.PLATFORM.GLES2,
resultType=None,
argTypes=(_types.GLhandle, _types.GLsizei, ctypes.POINTER(ctypes.c_char_p), arrays.GLintArray,),
doc = 'glShaderSource( GLhandle(shaderObj),[bytes(string),...]) -> None',
argNames = ('shaderObj', 'count', 'string', 'length',),
extension = _EXTENSION_NAME,
)
conv = converters.StringLengths( name='string' )
glShaderSource = wrapper.wrapper(
glShaderSource
).setPyConverter(
'count' # number of strings
).setPyConverter(
'length' # lengths of strings
).setPyConverter(
'string', conv.stringArray
).setCResolver(
'string', conv.stringArrayForC,
).setCConverter(
'length', conv,
).setCConverter(
'count', conv.totalCount,
)
try:
del conv
except NameError as err:
pass
glGetShaderiv = wrapper.wrapper( glGetShaderiv ).setOutput(
'params',
size=(1,),
arrayType=arrays.GLintArray,
orPassIn = True,
)
@_lazy( glGetShaderInfoLog )
def glGetShaderInfoLog( baseOperation, obj ):
"""Retrieve the shader's error messages as a Python string
returns string which is '' if no message
"""
length = int(glGetShaderiv(obj, GL_INFO_LOG_LENGTH))
if length > 0:
log = ctypes.create_string_buffer(length)
baseOperation(obj, length, None, log)
return log.value.strip(_NULL_8_BYTE) # null-termination
return ''
@_lazy( glGetProgramInfoLog )
def glGetProgramInfoLog( baseOperation, obj ):
"""Retrieve the shader program's error messages as a Python string
returns string which is '' if no message
"""
length = int(glGetProgramiv(obj, GL_INFO_LOG_LENGTH))
if length > 0:
log = ctypes.create_string_buffer(length)
baseOperation(obj, length, None, log)
return log.value.strip(_NULL_8_BYTE) # null-termination
return ''
@_lazy( glGetAttachedShaders )
def glGetAttachedShaders( baseOperation, obj ):
"""Retrieve the attached objects as an array of GLhandle instances"""
length= glGetProgramiv( obj, GL_ATTACHED_SHADERS )
if length > 0:
storage = arrays.GLuintArray.zeros( (length,))
baseOperation( obj, length, None, storage )
return storage
return arrays.GLuintArray.zeros( (0,))
@_lazy( glGetShaderSource )
def glGetShaderSource( baseOperation, obj ):
"""Retrieve the program/shader's source code as a Python string
returns string which is '' if no source code
"""
length = int(glGetShaderiv(obj, GL_OBJECT_SHADER_SOURCE_LENGTH))
if length > 0:
source = ctypes.create_string_buffer(length)
baseOperation(obj, length, None, source)
return source.value.strip(_NULL_8_BYTE) # null-termination
return ''
@_lazy( glGetActiveUniform )
def glGetActiveUniform(baseOperation,program, index):
"""Retrieve the name, size and type of the uniform of the index in the program"""
max_index = int(glGetProgramiv( program, GL_OBJECT_ACTIVE_UNIFORMS ))
length = int(glGetProgramiv( program, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH))
if index < max_index and index >= 0:
if length > 0:
name = ctypes.create_string_buffer(length)
size = arrays.GLintArray.zeros( (1,))
gl_type = arrays.GLenumArray.zeros( (1,))
namelen = arrays.GLsizeiArray.zeros( (1,))
baseOperation(program, index, length, namelen, size, gl_type, name)
return name.value[:int(namelen[0])], size[0], gl_type[0]
raise ValueError( """No currently specified uniform names""" )
raise IndexError( 'Index %s out of range 0 to %i' % (index, max_index - 1, ) )
@_lazy( glGetUniformLocation )
def glGetUniformLocation( baseOperation, program, name ):
"""Check that name is a string with a null byte at the end of it"""
if not name:
raise ValueError( """Non-null name required""" )
name = as_8_bit( name )
if name[-1] != _NULL_8_BYTE:
name = name + _NULL_8_BYTE
return baseOperation( program, name )
@_lazy( glGetAttribLocation )
def glGetAttribLocation( baseOperation, program, name ):
"""Check that name is a string with a null byte at the end of it"""
if not name:
raise ValueError( """Non-null name required""" )
name = as_8_bit( name )
if name[-1] != _NULL_8_BYTE:
name = name + _NULL_8_BYTE
return baseOperation( program, name )
@_lazy( glVertexAttribPointer )
def glVertexAttribPointer(
baseOperation, index, size, type,
normalized, stride, pointer,
):
"""Set an attribute pointer for a given shader (index)
index -- the index of the generic vertex to bind, see
glGetAttribLocation for retrieval of the value,
note that index is a global variable, not per-shader
size -- number of basic elements per record, 1,2,3, or 4
type -- enum constant for data-type
normalized -- whether to perform int to float
normalization on integer-type values
stride -- stride in machine units (bytes) between
consecutive records, normally used to create
"interleaved" arrays
pointer -- data-pointer which provides the data-values,
normally a vertex-buffer-object or offset into the
same.
This implementation stores a copy of the data-pointer
in the contextdata structure in order to prevent null-
reference errors in the renderer.
"""
array = ArrayDatatype.asArray( pointer, type )
key = ('vertex-attrib',index)
contextdata.setValue( key, array )
return baseOperation(
index, size, type,
normalized, stride,
ArrayDatatype.voidDataPointer( array )
)