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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
'''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, constant, arrays
from OpenGL import extensions, wrapper
import ctypes
from OpenGL.raw.GL import _types, _glgets
from OpenGL.raw.GL.VERSION.GL_1_5 import *
from OpenGL.raw.GL.VERSION.GL_1_5 import _EXTENSION_NAME
def glInitGl15VERSION():
'''Return boolean indicating whether this extension is available'''
from OpenGL import extensions
return extensions.hasGLExtension( _EXTENSION_NAME )
glGenQueries=wrapper.wrapper(glGenQueries).setOutput(
'ids',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
# INPUT glDeleteQueries.ids size not checked against n
glDeleteQueries=wrapper.wrapper(glDeleteQueries).setInputArraySize(
'ids', None
)
glGetQueryiv=wrapper.wrapper(glGetQueryiv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetQueryObjectiv=wrapper.wrapper(glGetQueryObjectiv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetQueryObjectuiv=wrapper.wrapper(glGetQueryObjectuiv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
# INPUT glDeleteBuffers.buffers size not checked against n
glDeleteBuffers=wrapper.wrapper(glDeleteBuffers).setInputArraySize(
'buffers', None
)
glGenBuffers=wrapper.wrapper(glGenBuffers).setOutput(
'buffers',size=lambda x:(x,),pnameArg='n',orPassIn=True
)
# 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
)
glGetBufferSubData=wrapper.wrapper(glGetBufferSubData).setOutput(
'data',size=lambda x:(x,),pnameArg='size',orPassIn=True
)
glGetBufferParameteriv=wrapper.wrapper(glGetBufferParameteriv).setOutput(
'params',size=_glgets._glget_size_mapping,pnameArg='pname',orPassIn=True
)
glGetBufferPointerv=wrapper.wrapper(glGetBufferPointerv).setOutput(
'params',size=(1,),orPassIn=True
)
### END AUTOGENERATED SECTION
from OpenGL.lazywrapper import lazy as _lazy
from OpenGL.arrays import ArrayDatatype
from OpenGL._bytes import integer_types
@_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, integer_types)) and (data is None):
data = size
size = None
try:
if size is not None:
size = int( size )
except TypeError:
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 )
@_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 )
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
|