+void ProgramData::NamedUniform::replace_value(Uniform *v)
+{
+ /* UniformBlock does not copy the uniforms, so existing default blocks
+ will be left with stale pointers. This is not a problem as long as no
+ one stores pointers to the blocks and expects them to stay valid. */
+ delete value;
+ value = v;
+}
+
+
+ProgramData::SharedBlock::SharedBlock(UniformBlock *b):
+ used(0),
+ dirty(0),
+ block(b)
+{
+ indices.type_flag = 0xFD;
+}
+
+const UInt8 *ProgramData::SharedBlock::get_uniform_indices() const
+{
+ return (indices.type_flag==0xFE ? indices.dynamic.values : indices.values);
+}
+