]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/programdata.cpp
Store default-block uniform data in a memory block
[libs/gl.git] / source / render / programdata.cpp
index 65934d382ae29fad792c0b67031a406658b7b3fb..377b5ace09eb9632eadac8410bfa675bd5f9a13f 100644 (file)
@@ -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<ProgramData::ProgramBlock>::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<const DefaultUniformBlock *>(i->block));
-                       else
-                       {
-                               const BufferBackedUniformBlock *block = static_cast<const BufferBackedUniformBlock *>(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();
                }
 }