]> git.tdb.fi Git - libs/gl.git/commitdiff
Set array and matrix strides for default-block uniforms
authorMikko Rasa <tdb@tdb.fi>
Tue, 28 Sep 2021 09:22:51 +0000 (12:22 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 28 Sep 2021 09:45:34 +0000 (12:45 +0300)
These are based on the client memory layout required by glUniform* calls.

source/core/datatype.h
source/core/program.cpp

index d7414a26905a9469756783896c8f3f15acb1b4a8..a0b80e35772cc303ef88f9f2d586199cc739f799 100644 (file)
@@ -96,6 +96,18 @@ inline bool is_matrix(DataType t) { return t&0xC000; }
 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);
 
index 4e09038074613d64f0d5559127e51df305a156c2..919fceebe68eee80081116b1ab65397250056303 100644 (file)
@@ -344,6 +344,9 @@ void Program::query_uniforms()
                {
                        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)