]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/programdata.cpp
Split UniformBlock into two classes
[libs/gl.git] / source / render / programdata.cpp
index 7323df905db7093fcbb5db5572b9b7f7faedb5ca..ec273c2277532c9f8a985341663ce9c4ea5836c6 100644 (file)
@@ -20,7 +20,7 @@ namespace GL {
 
 ProgramData::ProgramData(const Program *p):
        tied_program(p),
-       last_block(0),
+       last_buffer_block(0),
        buffer(0),
        dirty(0)
 { }
@@ -29,7 +29,7 @@ ProgramData::ProgramData(const Program *p):
 ProgramData::ProgramData(const ProgramData &other):
        tied_program(other.tied_program),
        uniforms(other.uniforms),
-       last_block(0),
+       last_buffer_block(0),
        buffer(0),
        dirty(0)
 {
@@ -39,7 +39,7 @@ ProgramData::ProgramData(const ProgramData &other):
 
 ProgramData::ProgramData(const ProgramData &other, const Program *p):
        tied_program(p),
-       last_block(0),
+       last_buffer_block(0),
        buffer(0),
        dirty(0)
 {
@@ -66,7 +66,7 @@ ProgramData &ProgramData::operator=(const ProgramData &other)
                delete i->block;
        programs.clear();
 
-       last_block = 0;
+       last_buffer_block = 0;
        buffer = 0;
        dirty = 0;
 
@@ -594,12 +594,13 @@ void ProgramData::update_block_uniform_indices(SharedBlock &block, const Program
                        if(!buffer)
                                buffer = new Buffer(UNIFORM_BUFFER);
 
-                       block.block = new UniformBlock(info.data_size);
-                       block.block->use_buffer(buffer, last_block);
-                       last_block = block.block;
+                       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;
                }
                else
-                       block.block = new UniformBlock;
+                       block.block = new DefaultUniformBlock;
        }
 }
 
@@ -617,7 +618,7 @@ void ProgramData::apply() const
        if(!prog)
                throw invalid_operation("ProgramData::apply");
 
-       UniformBlock *old_last_block = last_block;
+       BufferBackedUniformBlock *old_last_block = last_buffer_block;
        vector<ProgramBlock>::iterator prog_begin = get_program(*prog);
        Program::LayoutHash prog_hash = prog->get_uniform_layout_hash();
 
@@ -677,16 +678,16 @@ void ProgramData::apply() const
                if(buffered_blocks_updated && !ARB_direct_state_access)
                        buffer->bind();
 
-               if(last_block!=old_last_block)
+               if(last_buffer_block!=old_last_block)
                {
-                       unsigned required_size = last_block->get_required_buffer_size();
-                       if(last_block->get_required_buffer_size()>buffer->get_size())
+                       unsigned required_size = last_buffer_block->get_required_buffer_size();
+                       if(last_buffer_block->get_required_buffer_size()>buffer->get_size())
                        {
                                if(buffer->get_size()>0)
                                {
                                        delete buffer;
                                        buffer = new Buffer(UNIFORM_BUFFER);
-                                       last_block->change_buffer(buffer);
+                                       last_buffer_block->change_buffer(buffer);
                                }
 
                                buffer->storage(required_size);