Package glitter :: Package utils :: Module shaderdtypes
[hide private]
[frames] | no frames]

Source Code for Module glitter.utils.shaderdtypes

  1  """Datatypes for use with L{ShaderProgram}s. 
  2   
  3  @author: Stephan Wenger 
  4  @date: 2012-02-29 
  5  """ 
  6   
  7  import numpy as _np 
  8   
  9  import glitter.raw as _gl 
 10  from glitter.utils.dtypes import Datatype, bool8, int32, uint32, float32, float64 
11 12 -class ShaderDatatype(object):
13 _gltype_db = {} 14 _db = {} 15
16 - def __init__(self, name, _gltype, dtype=int32, shape=1, texture=False, atomic=True):
17 self._name = name 18 self._gltype = _gltype 19 self._dtype = dtype 20 self._shape = (shape,) if not hasattr(shape, "__iter__") else tuple(shape) 21 self._texture = texture 22 self._atomic = atomic 23 24 Datatype._gltype_db[self._gltype] = self 25 Datatype._db[self._dtype, self._shape, self._texture, self._atomic] = self
26 27 @classmethod
28 - def _from_gl(cls, _gltype):
29 return Datatype._gltype_db[_gltype]
30
31 - def get_value(self, program, location):
32 data = _np.empty(self._shape, int32.as_numpy() if self._dtype.is_boolean() else self._dtype.as_numpy()) 33 if self._dtype == int32 or self._dtype == bool8: 34 _gl.glGetUniformiv(program._id, location, _gl.cast(data.ctypes, _gl.glGetUniformiv.argtypes[-1])) 35 elif self._dtype == uint32: 36 _gl.glGetUniformuiv(program._id, location, _gl.cast(data.ctypes, _gl.glGetUniformuiv.argtypes[-1])) 37 elif self._dtype == float32: 38 _gl.glGetUniformfv(program._id, location, _gl.cast(data.ctypes, _gl.glGetUniformfv.argtypes[-1])) 39 elif self._dtype == float64: 40 _gl.glGetUniformdv(program._id, location, _gl.cast(data.ctypes, _gl.glGetUniformdv.argtypes[-1])) 41 else: 42 raise TypeError("cannot get uniform variable of type %s" % self) 43 return data.astype(self._dtype.as_numpy())
44
45 - def set_value(self, program, location, value, count):
46 dtype = int32 if self._dtype.is_boolean() else self._dtype 47 value = _np.ascontiguousarray(value, dtype.as_numpy()) 48 if count == 1: 49 if value.shape != self._shape and value.shape != (count,) + self._shape: 50 raise TypeError("shapes do not match") 51 elif self._shape == (1,): 52 if value.shape != (count,) and value.shape != (count,) + self._shape: 53 raise TypeError("shapes do not match") 54 else: 55 if value.shape != (count,) + self._shape: 56 raise TypeError("shapes do not match") 57 if len(self._shape) == 1: 58 setter = getattr(_gl, "glUniform%d%sv" % (self._shape[0], dtype.charcode)) 59 with program: 60 setter(location, count, _gl.cast(value.ctypes, setter.argtypes[-1])) 61 else: 62 if self._shape[0] == self._shape[1]: 63 setter = getattr(_gl, "glUniformMatrix%d%sv" % (self._shape[0], dtype.charcode)) 64 else: 65 setter = getattr(_gl, "glUniformMatrix%dx%d%sv" % (self._shape[1], self._shape[0], dtype.charcode)) 66 with program: 67 setter(location, count, _gl.GL_TRUE, _gl.cast(value.ctypes, setter.argtypes[-1]))
68
69 - def is_signed(self):
70 return self.dtype.is_signed
71
72 - def is_unsigned(self):
73 return not self.dtype.is_unsigned()
74
75 - def is_integer(self):
76 return self.dtype.is_integer()
77
78 - def is_float(self):
79 return self.dtype.is_float()
80
81 - def is_boolean(self):
82 return self.dtype.is_boolean()
83
84 - def is_texture(self):
85 return self._texture
86
87 - def is_atomic(self):
88 return self._atomic
89
90 - def __str__(self):
91 return self._name
92 93 shader_float = ShaderDatatype("float", _gl.GL_FLOAT, dtype=float32) 94 shader_vec2 = ShaderDatatype("vec2", _gl.GL_FLOAT_VEC2, dtype=float32, shape=2) 95 shader_vec3 = ShaderDatatype("vec3", _gl.GL_FLOAT_VEC3, dtype=float32, shape=3) 96 shader_vec4 = ShaderDatatype("vec4", _gl.GL_FLOAT_VEC4, dtype=float32, shape=4) 97 shader_double = ShaderDatatype("double", _gl.GL_DOUBLE, dtype=float64) 98 shader_dvec2 = ShaderDatatype("dvec2", _gl.GL_DOUBLE_VEC2, dtype=float64, shape=2) 99 shader_dvec3 = ShaderDatatype("dvec3", _gl.GL_DOUBLE_VEC3, dtype=float64, shape=3) 100 shader_dvec4 = ShaderDatatype("dvec4", _gl.GL_DOUBLE_VEC4, dtype=float64, shape=4) 101 shader_int = ShaderDatatype("int", _gl.GL_INT, dtype=int32) 102 shader_ivec2 = ShaderDatatype("ivec2", _gl.GL_INT_VEC2, dtype=int32, shape=2) 103 shader_ivec3 = ShaderDatatype("ivec3", _gl.GL_INT_VEC3, dtype=int32, shape=3) 104 shader_ivec4 = ShaderDatatype("ivec4", _gl.GL_INT_VEC4, dtype=int32, shape=4) 105 shader_unsigned_int = ShaderDatatype("unsigned int", _gl.GL_UNSIGNED_INT, dtype=uint32) 106 shader_uvec2 = ShaderDatatype("uvec2", _gl.GL_UNSIGNED_INT_VEC2, dtype=uint32, shape=2) 107 shader_uvec3 = ShaderDatatype("uvec3", _gl.GL_UNSIGNED_INT_VEC3, dtype=uint32, shape=3) 108 shader_uvec4 = ShaderDatatype("uvec4", _gl.GL_UNSIGNED_INT_VEC4, dtype=uint32, shape=4) 109 shader_bool = ShaderDatatype("bool", _gl.GL_BOOL, dtype=bool8) 110 shader_bvec2 = ShaderDatatype("bvec2", _gl.GL_BOOL_VEC2, dtype=bool8, shape=2) 111 shader_bvec3 = ShaderDatatype("bvec3", _gl.GL_BOOL_VEC3, dtype=bool8, shape=3) 112 shader_bvec4 = ShaderDatatype("bvec4", _gl.GL_BOOL_VEC4, dtype=bool8, shape=4) 113 shader_mat2 = ShaderDatatype("mat2", _gl.GL_FLOAT_MAT2, dtype=float32, shape=(2, 2)) 114 shader_mat3 = ShaderDatatype("mat3", _gl.GL_FLOAT_MAT3, dtype=float32, shape=(3, 3)) 115 shader_mat4 = ShaderDatatype("mat4", _gl.GL_FLOAT_MAT4, dtype=float32, shape=(4, 4)) 116 shader_dmat2 = ShaderDatatype("dmat2", _gl.GL_DOUBLE_MAT2, dtype=float64, shape=(2, 2)) 117 shader_dmat3 = ShaderDatatype("dmat3", _gl.GL_DOUBLE_MAT3, dtype=float64, shape=(3, 3)) 118 shader_dmat4 = ShaderDatatype("dmat4", _gl.GL_DOUBLE_MAT4, dtype=float64, shape=(4, 4)) 119 shader_sampler1D = ShaderDatatype("sampler1D", _gl.GL_SAMPLER_1D, texture=True) 120 shader_sampler2D = ShaderDatatype("sampler2D", _gl.GL_SAMPLER_2D, texture=True) 121 shader_sampler3D = ShaderDatatype("sampler3D", _gl.GL_SAMPLER_3D, texture=True) 122 shader_samplerCube = ShaderDatatype("samplerCube", _gl.GL_SAMPLER_CUBE, texture=True) 123 shader_sampler1DShadow = ShaderDatatype("sampler1DShadow", _gl.GL_SAMPLER_1D_SHADOW, texture=True) 124 shader_sampler2DShadow = ShaderDatatype("sampler2DShadow", _gl.GL_SAMPLER_2D_SHADOW, texture=True) 125 shader_sampler1DArray = ShaderDatatype("sampler1DArray", _gl.GL_SAMPLER_1D_ARRAY, texture=True) 126 shader_sampler2DArray = ShaderDatatype("sampler2DArray", _gl.GL_SAMPLER_2D_ARRAY, texture=True) 127 shader_sampler1DArrayShadow = ShaderDatatype("sampler1DArrayShadow", _gl.GL_SAMPLER_1D_ARRAY_SHADOW, texture=True) 128 shader_sampler2DArrayShadow = ShaderDatatype("sampler2DArrayShadow", _gl.GL_SAMPLER_2D_ARRAY_SHADOW, texture=True) 129 shader_sampler2DMS = ShaderDatatype("sampler2DMS", _gl.GL_SAMPLER_2D_MULTISAMPLE, texture=True) 130 shader_sampler2DMSArray = ShaderDatatype("sampler2DMSArray", _gl.GL_SAMPLER_2D_MULTISAMPLE_ARRAY, texture=True) 131 shader_samplerCubeShadow = ShaderDatatype("samplerCubeShadow", _gl.GL_SAMPLER_CUBE_SHADOW, texture=True) 132 shader_samplerBuffer = ShaderDatatype("samplerBuffer", _gl.GL_SAMPLER_BUFFER, texture=True) 133 shader_sampler2DRect = ShaderDatatype("sampler2DRect", _gl.GL_SAMPLER_2D_RECT, texture=True) 134 shader_sampler2DRectShadow = ShaderDatatype("sampler2DRectShadow", _gl.GL_SAMPLER_2D_RECT_SHADOW, texture=True) 135 shader_isampler1D = ShaderDatatype("isampler1D", _gl.GL_INT_SAMPLER_1D, texture=True) 136 shader_isampler2D = ShaderDatatype("isampler2D", _gl.GL_INT_SAMPLER_2D, texture=True) 137 shader_isampler3D = ShaderDatatype("isampler3D", _gl.GL_INT_SAMPLER_3D, texture=True) 138 shader_isamplerCube = ShaderDatatype("isamplerCube", _gl.GL_INT_SAMPLER_CUBE, texture=True) 139 shader_isampler1DArray = ShaderDatatype("isampler1DArray", _gl.GL_INT_SAMPLER_1D_ARRAY, texture=True) 140 shader_isampler2DArray = ShaderDatatype("isampler2DArray", _gl.GL_INT_SAMPLER_2D_ARRAY, texture=True) 141 shader_isampler2DMS = ShaderDatatype("isampler2DMS", _gl.GL_INT_SAMPLER_2D_MULTISAMPLE, texture=True) 142 shader_isampler2DMSArray = ShaderDatatype("isampler2DMSArray", _gl.GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, texture=True) 143 shader_isamplerBuffer = ShaderDatatype("isamplerBuffer", _gl.GL_INT_SAMPLER_BUFFER, texture=True) 144 shader_isampler2DRect = ShaderDatatype("isampler2DRect", _gl.GL_INT_SAMPLER_2D_RECT, texture=True) 145 shader_usampler1D = ShaderDatatype("usampler1D", _gl.GL_UNSIGNED_INT_SAMPLER_1D, texture=True) 146 shader_usampler2D = ShaderDatatype("usampler2D", _gl.GL_UNSIGNED_INT_SAMPLER_2D, texture=True) 147 shader_usampler3D = ShaderDatatype("usampler3D", _gl.GL_UNSIGNED_INT_SAMPLER_3D, texture=True) 148 shader_usamplerCube = ShaderDatatype("usamplerCube", _gl.GL_UNSIGNED_INT_SAMPLER_CUBE, texture=True) 149 shader_usampler1DArray = ShaderDatatype("usampler1DArray", _gl.GL_UNSIGNED_INT_SAMPLER_1D_ARRAY, texture=True) 150 shader_usampler2DArray = ShaderDatatype("usampler2DArray", _gl.GL_UNSIGNED_INT_SAMPLER_2D_ARRAY, texture=True) 151 shader_usampler2DMS = ShaderDatatype("usampler2DMS", _gl.GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE, texture=True) 152 shader_usampler2DMSArray = ShaderDatatype("usampler2DMSArray", _gl.GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY, texture=True) 153 shader_usamplerBuffer = ShaderDatatype("usamplerBuffer", _gl.GL_UNSIGNED_INT_SAMPLER_BUFFER, texture=True) 154 shader_usampler2DRect = ShaderDatatype("usampler2DRect", _gl.GL_UNSIGNED_INT_SAMPLER_2D_RECT, texture=True) 155 shader_image1D = ShaderDatatype("image1D", _gl.GL_IMAGE_1D, texture=True) 156 shader_image2D = ShaderDatatype("image2D", _gl.GL_IMAGE_2D, texture=True) 157 shader_image3D = ShaderDatatype("image3D", _gl.GL_IMAGE_3D, texture=True) 158 shader_image2DRect = ShaderDatatype("image2DRect", _gl.GL_IMAGE_2D_RECT, texture=True) 159 shader_imageCube = ShaderDatatype("imageCube", _gl.GL_IMAGE_CUBE, texture=True) 160 shader_imageBuffer = ShaderDatatype("imageBuffer", _gl.GL_IMAGE_BUFFER, texture=True) 161 shader_image1DArray = ShaderDatatype("image1DArray", _gl.GL_IMAGE_1D_ARRAY, texture=True) 162 shader_image2DArray = ShaderDatatype("image2DArray", _gl.GL_IMAGE_2D_ARRAY, texture=True) 163 shader_image2DMS = ShaderDatatype("image2DMS", _gl.GL_IMAGE_2D_MULTISAMPLE, texture=True) 164 shader_image2DMSArray = ShaderDatatype("image2DMSArray", _gl.GL_IMAGE_2D_MULTISAMPLE_ARRAY, texture=True) 165 shader_iimage1D = ShaderDatatype("iimage1D", _gl.GL_INT_IMAGE_1D, texture=True) 166 shader_iimage2D = ShaderDatatype("iimage2D", _gl.GL_INT_IMAGE_2D, texture=True) 167 shader_iimage3D = ShaderDatatype("iimage3D", _gl.GL_INT_IMAGE_3D, texture=True) 168 shader_iimage2DRect = ShaderDatatype("iimage2DRect", _gl.GL_INT_IMAGE_2D_RECT, texture=True) 169 shader_iimageCube = ShaderDatatype("iimageCube", _gl.GL_INT_IMAGE_CUBE, texture=True) 170 shader_iimageBuffer = ShaderDatatype("iimageBuffer", _gl.GL_INT_IMAGE_BUFFER, texture=True) 171 shader_iimage1DArray = ShaderDatatype("iimage1DArray", _gl.GL_INT_IMAGE_1D_ARRAY, texture=True) 172 shader_iimage2DArray = ShaderDatatype("iimage2DArray", _gl.GL_INT_IMAGE_2D_ARRAY, texture=True) 173 shader_iimage2DMS = ShaderDatatype("iimage2DMS", _gl.GL_INT_IMAGE_2D_MULTISAMPLE, texture=True) 174 shader_iimage2DMSArray = ShaderDatatype("iimage2DMSArray", _gl.GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY, texture=True) 175 shader_uimage1D = ShaderDatatype("uimage1D", _gl.GL_UNSIGNED_INT_IMAGE_1D, texture=True) 176 shader_uimage2D = ShaderDatatype("uimage2D", _gl.GL_UNSIGNED_INT_IMAGE_2D, texture=True) 177 shader_uimage3D = ShaderDatatype("uimage3D", _gl.GL_UNSIGNED_INT_IMAGE_3D, texture=True) 178 shader_uimage2DRect = ShaderDatatype("uimage2DRect", _gl.GL_UNSIGNED_INT_IMAGE_2D_RECT, texture=True) 179 shader_uimageCube = ShaderDatatype("uimageCube", _gl.GL_UNSIGNED_INT_IMAGE_CUBE, texture=True) 180 shader_uimageBuffer = ShaderDatatype("uimageBuffer", _gl.GL_UNSIGNED_INT_IMAGE_BUFFER, texture=True) 181 shader_uimage1DArray = ShaderDatatype("uimage1DArray", _gl.GL_UNSIGNED_INT_IMAGE_1D_ARRAY, texture=True) 182 shader_uimage2DArray = ShaderDatatype("uimage2DArray", _gl.GL_UNSIGNED_INT_IMAGE_2D_ARRAY, texture=True) 183 shader_uimage2DMS = ShaderDatatype("uimage2DMS", _gl.GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE, texture=True) 184 shader_uimage2DMSArray = ShaderDatatype("uimage2DMSArray", _gl.GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY, texture=True) 185 shader_atomic_uint = ShaderDatatype("atomic_uint", _gl.GL_UNSIGNED_INT_ATOMIC_COUNTER, dtype=uint32, atomic=True) 186 187 __all__ = [ 188 "ShaderDatatype", 189 "shader_float", 190 "shader_vec2", 191 "shader_vec3", 192 "shader_vec4", 193 "shader_double", 194 "shader_dvec2", 195 "shader_dvec3", 196 "shader_dvec4", 197 "shader_int", 198 "shader_ivec2", 199 "shader_ivec3", 200 "shader_ivec4", 201 "shader_unsigned_int", 202 "shader_uvec2", 203 "shader_uvec3", 204 "shader_uvec4", 205 "shader_bool", 206 "shader_bvec2", 207 "shader_bvec3", 208 "shader_bvec4", 209 "shader_mat2", 210 "shader_mat3", 211 "shader_mat4", 212 "shader_dmat2", 213 "shader_dmat3", 214 "shader_dmat4", 215 "shader_sampler1D", 216 "shader_sampler2D", 217 "shader_sampler3D", 218 "shader_samplerCube", 219 "shader_sampler1DShadow", 220 "shader_sampler2DShadow", 221 "shader_sampler1DArray", 222 "shader_sampler2DArray", 223 "shader_sampler1DArrayShadow", 224 "shader_sampler2DArrayShadow", 225 "shader_sampler2DMS", 226 "shader_sampler2DMSArray", 227 "shader_samplerCubeShadow", 228 "shader_samplerBuffer", 229 "shader_sampler2DRect", 230 "shader_sampler2DRectShadow", 231 "shader_isampler1D", 232 "shader_isampler2D", 233 "shader_isampler3D", 234 "shader_isamplerCube", 235 "shader_isampler1DArray", 236 "shader_isampler2DArray", 237 "shader_isampler2DMS", 238 "shader_isampler2DMSArray", 239 "shader_isamplerBuffer", 240 "shader_isampler2DRect", 241 "shader_usampler1D", 242 "shader_usampler2D", 243 "shader_usampler3D", 244 "shader_usamplerCube", 245 "shader_usampler1DArray", 246 "shader_usampler2DArray", 247 "shader_usampler2DMS", 248 "shader_usampler2DMSArray", 249 "shader_usamplerBuffer", 250 "shader_usampler2DRect", 251 "shader_image1D", 252 "shader_image2D", 253 "shader_image3D", 254 "shader_image2DRect", 255 "shader_imageCube", 256 "shader_imageBuffer", 257 "shader_image1DArray", 258 "shader_image2DArray", 259 "shader_image2DMS", 260 "shader_image2DMSArray", 261 "shader_iimage1D", 262 "shader_iimage2D", 263 "shader_iimage3D", 264 "shader_iimage2DRect", 265 "shader_iimageCube", 266 "shader_iimageBuffer", 267 "shader_iimage1DArray", 268 "shader_iimage2DArray", 269 "shader_iimage2DMS", 270 "shader_iimage2DMSArray", 271 "shader_uimage1D", 272 "shader_uimage2D", 273 "shader_uimage3D", 274 "shader_uimage2DRect", 275 "shader_uimageCube", 276 "shader_uimageBuffer", 277 "shader_uimage1DArray", 278 "shader_uimage2DArray", 279 "shader_uimage2DMS", 280 "shader_uimage2DMSArray", 281 "shader_atomic_uint", 282 ] 283