1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
'''OpenGL extension VERSION.GL_1_5
This module customises the behaviour of the
OpenGL.raw.GL.VERSION.GL_1_5 to provide a more
Python-friendly API
The official definition of this extension is available here:
http://www.opengl.org/registry/specs/VERSION/GL_1_5.txt
'''
from OpenGL import platform, constants, constant, arrays
from OpenGL import extensions, wrapper
from OpenGL.GL import glget
import ctypes
from OpenGL.raw.GL.VERSION.GL_1_5 import *
### END AUTOGENERATED SECTION
from OpenGL.lazywrapper import lazy
from OpenGL.arrays import ArrayDatatype
glDeleteBuffers = arrays.setInputArraySizeType(
glDeleteBuffers,
None,
arrays.GLuintArray,
'buffers',
)
glGenBuffers = wrapper.wrapper( glGenBuffers ).setOutput(
'buffers', lambda n: (n,), 'n',
)
def _sizeOfArrayInput( pyArgs, index, wrapper ):
return (
arrays.ArrayDatatype.arrayByteCount( pyArgs[index] )
)
@lazy( glBufferData )
def glBufferData( baseOperation, target, size, data=None, usage=None ):
"""Copy given data into the currently bound vertex-buffer-data object
target -- the symbolic constant indicating which buffer type is intended
size -- if provided, the count-in-bytes of the array
data -- data-pointer to be used, may be None to initialize without
copying over a data-set
usage -- hint to the driver as to how to set up access to the buffer
Note: parameter "size" can be omitted, which makes the signature
glBufferData( target, data, usage )
instead of:
glBufferData( target, size, data, usage )
"""
if usage is None:
usage = data
data = size
size = None
data = ArrayDatatype.asArray( data )
if size is None:
size = ArrayDatatype.arrayByteCount( data )
return baseOperation( target, size, data, usage )
@lazy( glBufferSubData )
def glBufferSubData( baseOperation, target, offset, size=None, data=None ):
"""Copy subset of data into the currently bound vertex-buffer-data object
target -- the symbolic constant indicating which buffer type is intended
offset -- offset from beginning of buffer at which to copy bytes
size -- the count-in-bytes of the array (if an int/long), if None,
calculate size from data, if an array and data is None, use as
data (i.e. the parameter can be omitted and calculated)
data -- data-pointer to be used, may be None to initialize without
copying over a data-set
Note that if size is not an int/long it is considered to be data
*iff* data is None
"""
if size is None:
if data is None:
raise TypeError( "Need data or size" )
elif (not isinstance( size, (int,long))) and (data is None):
data = size
size = None
try:
if size is not None:
size = int( size )
except TypeError, err:
if data is not None:
raise TypeError(
"""Expect an integer size *or* a data-array, not both"""
)
data = size
size = None
data = ArrayDatatype.asArray( data )
if size is None:
size = ArrayDatatype.arrayByteCount( data )
return baseOperation( target, offset, size, data )
glGetBufferParameteriv = wrapper.wrapper(glGetBufferParameteriv).setOutput(
"params",(1,),
)
@lazy( glGetBufferPointerv )
def glGetBufferPointerv( baseOperation, target, pname, params=None ):
"""Retrieve a ctypes pointer to buffer's data"""
if params is None:
size = glGetBufferParameteriv( target, GL_BUFFER_SIZE )
data = arrays.ArrayDatatype.zeros( (size,), GL_UNSIGNED_BYTE )
result = baseOperation( target, pname, ctypes.byref( data ) )
return data
else:
return baseOperation( target, pname, params )
@lazy( glDeleteQueries )
def glDeleteQueries( baseOperation, n, ids=None ):
if ids is None:
ids = arrays.GLuintArray.asArray( n )
n = arrays.GLuintArray.arraySize( ids )
else:
ids = arrays.GLuintArray.asArray( ids )
return baseOperation( n,ids )
@lazy( glGenQueries )
def glGenQueries( baseOperation, n, ids=None ):
"""Generate n queries, if ids is None, is allocated
returns array of ids
"""
if ids is None:
ids = arrays.GLuintArray.zeros( (n,))
else:
ids = arrays.GLuintArray.asArray( ids )
baseOperation( n, ids )
return ids
for func in (
'glGetQueryiv','glGetQueryObjectiv','glGetQueryObjectuiv',
):
globals()[func] = wrapper.wrapper(globals()[func]).setOutput(
"params", (1,)
)
try:
del func, glget
except NameError, err:
pass
|