X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=a908284b3abae9de3e8f177b8165daf084ff6eba;hb=9ec0e018234391efa66cc0f4080bfe470b910288;hp=40eba5e5d6840a4580c1d311c67da732231253ab;hpb=282a10854eda602d874e200c8301cf57d6501e81;p=libs%2Fgl.git diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index 40eba5e5..a908284b 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -20,44 +20,20 @@ ProgramData::ProgramData(const Program *p): tied_program(p) { } -// Blocks are intentionally left uncopied -ProgramData::ProgramData(const ProgramData &other): +ProgramData::ProgramData(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) + uniforms(move(other.uniforms)), + uniform_data(move(other.uniform_data)), + generation(other.generation), + blocks(move(other.blocks)), + programs(move(other.programs)), + last_buffer_block(other.last_buffer_block), + buffer(other.buffer), + dirty(other.dirty), + debug_name(move(other.debug_name)) { - 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; + other.blocks.clear(); + other.buffer = 0; } ProgramData::~ProgramData() @@ -466,6 +442,12 @@ void ProgramData::copy_uniform(const ProgramData &source, Tag tag) 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);