X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Funiformblock.cpp;h=09060eb7622ce36d9ddf158339411d89e9445d86;hb=e720536d5feacf6136b5621c98b72d206e44f64c;hp=6b9de26931995e46446ef52e4dd57c81a3381ca0;hpb=900cf40469972b1f32a6dbac95c42f46c3726fa8;p=libs%2Fgl.git diff --git a/source/uniformblock.cpp b/source/uniformblock.cpp index 6b9de269..09060eb7 100644 --- a/source/uniformblock.cpp +++ b/source/uniformblock.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include "buffer.h" #include "color.h" #include "error.h" @@ -14,13 +16,17 @@ namespace GL { UniformBlock::UniformBlock(): buf_range(0) -{ } +{ + static Require _req(ARB_shader_objects); +} UniformBlock::UniformBlock(unsigned s): size(s), data(size), buf_range(0) -{ } +{ + static Require _req(ARB_uniform_buffer_object); +} UniformBlock::~UniformBlock() { @@ -38,11 +44,15 @@ void UniformBlock::offset_changed() buf_range = 0; } -void UniformBlock::upload_data() const +void UniformBlock::upload_data(char *target) const { if(!buf_range) buf_range = new BufferRange(*get_buffer(), get_offset(), size); - buf_range->data(&data[0]); + + if(target) + copy(data.begin(), data.end(), target); + else + buf_range->data(&data[0]); } void UniformBlock::attach(int index, const Uniform &uni)