]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/uniformblock.cpp
Store implementation limits in a central struct
[libs/gl.git] / source / core / uniformblock.cpp
index 25511d251e2361e56b67285b86b7e8add1f14585..59871cdde8249b3b90e0dd03a89db66963e2efd6 100644 (file)
@@ -3,6 +3,7 @@
 #include <msp/gl/extensions/arb_uniform_buffer_object.h>
 #include "buffer.h"
 #include "color.h"
+#include "deviceinfo.h"
 #include "error.h"
 #include "matrix.h"
 #include "uniform.h"
@@ -24,11 +25,16 @@ void DefaultUniformBlock::attach(const Program::UniformInfo &info, const Uniform
        if(info.block->bind_point>=0)
                throw invalid_argument("DefaultUniformBlock::attach");
 
-       uniforms[info.location] = &uni;
+       attach(info.location, uni);
 }
 
 void DefaultUniformBlock::attach(int index, const Uniform &uni)
 {
+       if(index<0)
+               return;
+
+       if(static_cast<unsigned>(index)>=uniforms.size())
+               uniforms.resize(index+1, 0);
        uniforms[index] = &uni;
 }
 
@@ -37,8 +43,9 @@ void DefaultUniformBlock::apply(int index) const
        if(index>=0)
                throw invalid_argument("DefaultUniformBlock::apply");
 
-       for(map<int, const Uniform *>::const_iterator i=uniforms.begin(); i!=uniforms.end(); ++i)
-               i->second->apply(i->first);
+       for(unsigned i=0; i<uniforms.size(); ++i)
+               if(uniforms[i])
+                       uniforms[i]->apply(i);
 }
 
 
@@ -61,7 +68,7 @@ BufferBackedUniformBlock::~BufferBackedUniformBlock()
 
 unsigned BufferBackedUniformBlock::get_alignment() const
 {
-       return BufferRange::get_uniform_buffer_alignment();
+       return Limits::get_global().uniform_buffer_alignment;
 }
 
 void BufferBackedUniformBlock::location_changed(Buffer *buf, unsigned off, unsigned) const