X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=377b5ace09eb9632eadac8410bfa675bd5f9a13f;hb=8366f8951984aa436938b1bb18a57067ff2260c1;hp=65934d382ae29fad792c0b67031a406658b7b3fb;hpb=1b23728908f5ec9beb08b2b70737c3903745fddc;p=libs%2Fgl.git diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index 65934d38..377b5ace 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -564,6 +564,7 @@ void ProgramData::update_block_uniform_indices(SharedBlock &block, const Reflect if(block.used && !block.block) { + block.block = new UniformBlock(info); if(info.bind_point>=0) { if(!buffer) @@ -576,13 +577,9 @@ void ProgramData::update_block_uniform_indices(SharedBlock &block, const Reflect #endif } - BufferBackedUniformBlock *bb_block = new BufferBackedUniformBlock(info.data_size); - block.block = bb_block; - bb_block->use_buffer(buffer, last_buffer_block); - last_buffer_block = bb_block; + block.block->use_buffer(buffer, last_buffer_block); + last_buffer_block = block.block; } - else - block.block = new DefaultUniformBlock; } } @@ -594,13 +591,13 @@ void ProgramData::update_block(SharedBlock &block, const ReflectData::UniformBlo if(is_image(info.uniforms[i]->type)) ; // Temporarily ignore deprecated use of sampler uniforms in ProgramData else if(indices[i]!=0xFF) - block.block->attach(*info.uniforms[i], *uniforms[indices[i]].value); + block.block->store(*info.uniforms[i], *uniforms[indices[i]].value); } } vector::const_iterator ProgramData::prepare_program(const Program &prog) const { - BufferBackedUniformBlock *old_last_block = last_buffer_block; + UniformBlock *old_last_block = last_buffer_block; auto prog_begin = get_program(prog); Mask force_dirty = (dirty==ALL_ONES ? ALL_ONES : 0U); @@ -688,14 +685,9 @@ void ProgramData::apply(const Program &prog, PipelineState &state) const for(auto i=prog_begin+1; (i!=programs.end() && i->prog_hash==prog_hash); ++i) if(i->block) { - if(i->bind_point<0) - state.set_uniforms(static_cast(i->block)); - else - { - const BufferBackedUniformBlock *block = static_cast(i->block); - block->refresh(); - state.set_uniform_block(i->bind_point, block); - } + state.set_uniform_block(i->bind_point, i->block); + if(i->bind_point>=0) + i->block->refresh(); } }