]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/uniformblock.cpp
Use a vector for storage in DefaultUniformBlock
[libs/gl.git] / source / core / uniformblock.cpp
index 25511d251e2361e56b67285b86b7e8add1f14585..f114ea584d04b7ff35ef550348febd4f9c38585d 100644 (file)
@@ -24,11 +24,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 +42,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);
 }