tied_program(p)
{ }
-// Blocks are intentionally left uncopied
-ProgramData::ProgramData(const ProgramData &other):
- tied_program(other.tied_program),
- uniforms(other.uniforms),
- uniform_data(other.uniform_data),
- generation(other.generation)
-{ }
-
-ProgramData::ProgramData(const ProgramData &other, const Program *p):
- tied_program(p)
-{
- if(tied_program)
- {
- for(const TaggedUniform &u: other.uniforms)
- validate_tag(u.tag);
- }
-
- uniforms = other.uniforms;
- uniform_data = other.uniform_data;
-}
-
-ProgramData &ProgramData::operator=(const ProgramData &other)
-{
- tied_program = other.tied_program;
-
- uniforms = other.uniforms;
- uniform_data = other.uniform_data;
-
- for(SharedBlock &b: blocks)
- delete b.block;
- blocks.clear();
- programs.clear();
-
- last_buffer_block = 0;
- buffer = 0;
- dirty = 0;
-
- return *this;
-}
-
ProgramData::ProgramData(ProgramData &&other):
tied_program(other.tied_program),
uniforms(move(other.uniforms)),
uniform(tag, tu.type, tu.array_size, source.uniform_data.data()+tu.data_offset);
}
+void ProgramData::copy_uniforms(const ProgramData &source)
+{
+ for(const TaggedUniform &u: source.uniforms)
+ uniform(u.tag, u.type, u.array_size, source.uniform_data.data()+u.data_offset);
+}
+
int ProgramData::find_uniform_index(Tag tag) const
{
auto i = lower_bound_member(uniforms, tag, &TaggedUniform::tag);
#endif
}
- buffer->storage(required_size);
+ buffer->storage(required_size, STREAMING);
}
}
}