if(i>=0)
{
uniforms[i].replace_value(uni);
-
- if(static_cast<unsigned>(i)<MASK_BITS)
- dirty |= 1<<i;
- else // Force a full update if the mask isn't wide enough
- dirty = ALL_ONES;
-
+ dirty |= 1<<i;
return;
}
+ if(uniforms.size()>=MASK_BITS)
+ {
+ delete uni;
+ throw too_many_uniforms(name);
+ }
+
vector<NamedUniform>::iterator j = lower_bound(uniforms.begin(), uniforms.end(), name, uniform_name_compare);
NamedUniform nu;
{
unsigned required_size = last_block->get_required_buffer_size();
if(last_block->get_required_buffer_size()>buffer->get_size())
- buffer->data(required_size, 0);
+ {
+ if(buffer->get_size()>0)
+ {
+ delete buffer;
+ buffer = new Buffer(UNIFORM_BUFFER);
+ last_block->change_buffer(buffer);
+ }
+
+ buffer->storage(required_size);
+ }
}
}