]> git.tdb.fi Git - libs/gl.git/blobdiff - source/uniformblock.cpp
Add an asynchronous update interface to Bufferable
[libs/gl.git] / source / uniformblock.cpp
index 6b9de26931995e46446ef52e4dd57c81a3381ca0..09060eb7622ce36d9ddf158339411d89e9445d86 100644 (file)
@@ -1,4 +1,6 @@
 #include <stdexcept>
+#include <msp/gl/extensions/arb_shader_objects.h>
+#include <msp/gl/extensions/arb_uniform_buffer_object.h>
 #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)