]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/vertexarraybuilder.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / builders / vertexarraybuilder.cpp
index 011a6c0515c59788e1db5675ee65c1f37c2ca9d2..14d03b98136773543739e14ef8febe191c10afde 100644 (file)
@@ -1,3 +1,4 @@
+#include <limits>
 #include "vertexarray.h"
 #include "vertexarraybuilder.h"
 
@@ -13,16 +14,15 @@ VertexArrayBuilder::VertexArrayBuilder(VertexArray &a):
 void VertexArrayBuilder::vertex_(const Vector4 &vtx)
 {
        char *ptr = array.append();
-       const VertexFormat &format = array.get_format();
-       for(const uint16_t *a=format.begin(); a!=format.end(); ++a)
+       for(VertexAttribute a: array.get_format())
        {
-               unsigned sem = get_attribute_semantic(*a);
-               bool integer = is_integer_attribute(*a);
-               DataType type = get_attribute_source_type(*a);
-               unsigned cc = get_attribute_component_count(*a);
-
-               if(sem<attr.size())
+               unsigned sem = get_attribute_semantic(a);
+               if(!is_padding(a) && sem<attr.size())
                {
+                       bool integer = is_integer_attribute(a);
+                       DataType type = get_attribute_source_type(a);
+                       unsigned cc = get_attribute_component_count(a);
+
                        const Vector4 &value = (sem==0 ? vtx : attr[sem]);
                        if(type==UNSIGNED_BYTE)
                                store_attribute<uint8_t>(ptr, value, !integer, cc);
@@ -40,7 +40,7 @@ void VertexArrayBuilder::vertex_(const Vector4 &vtx)
                                store_attribute<float>(ptr, value, false, cc);
                }
 
-               ptr += get_attribute_size(*a);
+               ptr += get_attribute_size(a);
        }
 }