X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=4133b9acaabb207fbd63d077ca9bc8da7bcca2c4;hb=fcde8390ad577fe434dcd4b29e0f410d29f867c9;hp=d934b48782c23ce181a5022b5fcfeb6009ad83b4;hpb=4124807fcacedc8317bd109f056d48e077d0c12f;p=libs%2Fgl.git diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index d934b487..4133b9ac 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -20,6 +20,7 @@ namespace GL { ProgramData::ProgramData(const Program *p): tied_program(p), + generation(0), last_buffer_block(0), buffer(0), dirty(0) @@ -29,6 +30,7 @@ ProgramData::ProgramData(const Program *p): ProgramData::ProgramData(const ProgramData &other): tied_program(other.tied_program), uniforms(other.uniforms), + generation(other.generation), last_buffer_block(0), buffer(0), dirty(0) @@ -107,7 +109,7 @@ void ProgramData::uniform(Tag tag, Uniform *uni) return add_uniform(tag, uni); uniforms[i].replace_value(uni); - dirty |= 1< @@ -125,7 +127,7 @@ void ProgramData::uniform(Tag tag, V value) else uniforms[i].replace_value(new T(value)); - dirty |= 1< @@ -144,7 +146,7 @@ void ProgramData::uniform_array(Tag tag, unsigned n, V value) else uniforms[i].replace_value(new UniformArray(n, value)); - dirty |= 1<value; uniforms.erase(i); - dirty = ALL_ONES; + mark_dirty(ALL_ONES); } vector ProgramData::get_uniform_tags() const @@ -556,8 +565,15 @@ void ProgramData::update_block_uniform_indices(SharedBlock &block, const Program if(info.bind_point>=0) { if(!buffer) + { buffer = new Buffer(UNIFORM_BUFFER); +#ifdef DEBUG + if(!debug_name.empty()) + buffer->set_debug_name(debug_name); +#endif + } + BufferBackedUniformBlock *bb_block = new BufferBackedUniformBlock(info.data_size); block.block = bb_block; bb_block->use_buffer(buffer, last_buffer_block); @@ -656,6 +672,11 @@ void ProgramData::apply() const delete buffer; buffer = new Buffer(UNIFORM_BUFFER); last_buffer_block->change_buffer(buffer); + +#ifdef DEBUG + if(!debug_name.empty()) + buffer->set_debug_name(debug_name); +#endif } buffer->storage(required_size); @@ -668,6 +689,17 @@ void ProgramData::apply() const i->block->apply(i->bind_point); } +void ProgramData::set_debug_name(const string &name) +{ +#ifdef DEBUG + debug_name = name; + if(buffer) + buffer->set_debug_name(name); +#else + (void)name; +#endif +} + ProgramData::TaggedUniform::TaggedUniform(): value(0)