inline bool is_vector(DataType t) { return !is_matrix(t) && (t&0x3000); }
inline bool is_image(DataType t) { return t&0x70000; }
+inline DataType get_matrix_column_type(DataType t)
+{
+ unsigned cols = ((t&0xC000)>>14)+1;
+ return static_cast<DataType>((t&~0xC0FF) | (get_type_size(t)/cols));
+}
+
+inline DataType get_element_type(DataType t)
+{
+ unsigned elems = (((t&0xC000)>>14)+1)*(((t&0x3000)>>12)+1);
+ return static_cast<DataType>((t&~0xC0FF) | (get_type_size(t)/elems));
+}
+
GLenum get_gl_type(DataType);
DataType from_gl_type(GLenum);
{
u.location = glGetUniformLocation(id, u.name.c_str());
u.block = &default_block;
+ u.array_stride = get_type_size(u.type);
+ if(is_matrix(u.type))
+ u.matrix_stride = get_type_size(get_matrix_column_type(u.type));
default_block.uniforms.push_back(&u);
if(is_image(u.type) && u.location>=0)