X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=d934b48782c23ce181a5022b5fcfeb6009ad83b4;hb=4124807fcacedc8317bd109f056d48e077d0c12f;hp=7323df905db7093fcbb5db5572b9b7f7faedb5ca;hpb=ba1427f10d574ff8c4dafc4b8673452b19308ca2;p=libs%2Fgl.git diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index 7323df90..d934b487 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -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; @@ -154,7 +154,11 @@ bool ProgramData::validate_tag(Tag tag) const #endif { if(tied_program) - tied_program->get_uniform_info(tag); + { + const Program::UniformInfo &info = tied_program->get_uniform_info(tag); + if(is_image(info.type)) + throw invalid_operation("ProgramData::uniform"); + } return true; } #ifdef DEBUG @@ -233,11 +237,6 @@ void ProgramData::uniform(Tag tag, float v0, float v1, float v2) uniform3(tag, va); } -void ProgramData::uniform(Tag tag, const Vector3 &v) -{ - uniform(tag, v.x, v.y, v.z); -} - void ProgramData::uniform3(Tag tag, const int *v) { uniform(tag, v); @@ -260,11 +259,6 @@ void ProgramData::uniform(Tag tag, float v0, float v1, float v2, float v3) uniform4(tag, va); } -void ProgramData::uniform(Tag tag, const Vector4 &v) -{ - uniform(tag, v.x, v.y, v.z, v.w); -} - void ProgramData::uniform(Tag tag, const Color &c) { uniform(tag, c.r, c.g, c.b, c.a); @@ -280,81 +274,41 @@ void ProgramData::uniform4(Tag tag, const float *v) uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix2(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix2(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix3x2(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix3x2(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix4x2(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix4x2(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix2x3(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix2x3(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix3(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix3(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix4x3(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix4x3(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix2x4(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix2x4(Tag tag, const float *v) { uniform(tag, v); } -void ProgramData::uniform(Tag tag, const LinAl::Matrix &m) -{ - uniform_matrix3x4(tag, &m(0, 0)); -} - void ProgramData::uniform_matrix3x4(Tag tag, const float *v) { uniform(tag, v); @@ -370,6 +324,16 @@ void ProgramData::uniform_matrix4(Tag tag, const float *v) uniform(tag, v); } +void ProgramData::uniform_array(Tag tag, unsigned n, const int *v) +{ + uniform_array(tag, n, v); +} + +void ProgramData::uniform_array(Tag tag, unsigned n, const float *v) +{ + uniform_array(tag, n, v); +} + void ProgramData::uniform1_array(Tag tag, unsigned n, const int *v) { uniform_array(tag, n, v); @@ -594,12 +558,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; } } @@ -607,8 +572,12 @@ void ProgramData::update_block(SharedBlock &block, const Program::UniformBlockIn { const UInt8 *indices = block.get_uniform_indices(); for(unsigned i=0; itype)) + ; // Temporarily ignore deprecated use of sampler uniforms in ProgramData + else if(indices[i]!=0xFF) block.block->attach(*info.uniforms[i], *uniforms[indices[i]].value); + } } void ProgramData::apply() const @@ -617,7 +586,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::iterator prog_begin = get_program(*prog); Program::LayoutHash prog_hash = prog->get_uniform_layout_hash(); @@ -677,16 +646,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);