]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/bufferable.cpp
Redesign asynchronous buffer uploads
[libs/gl.git] / source / core / bufferable.cpp
index 69588dddef301d72f0eda7128209a5fba632cc63..d8f3c9c43f9622602851e03f38dd72221031d0b3 100644 (file)
@@ -1,5 +1,4 @@
 #include <stdexcept>
-#include "buffer.h"
 #include "bufferable.h"
 #include "error.h"
 
@@ -170,19 +169,13 @@ Bufferable::AsyncUpdater *Bufferable::create_async_updater() const
 
 
 Bufferable::AsyncUpdater::AsyncUpdater(const Bufferable &b):
-       bufferable(b)
-{
-       bufferable.buffer->require_size(bufferable.get_required_buffer_size());
-       mapped_address = reinterpret_cast<char *>(bufferable.buffer->map());
-}
-
-Bufferable::AsyncUpdater::~AsyncUpdater()
-{
-       bufferable.buffer->unmap();
-}
+       bufferable(b),
+       transfer(b.buffer->sub_data_async(0, bufferable.get_required_buffer_size()))
+{ }
 
 void Bufferable::AsyncUpdater::upload_data()
 {
+       char *mapped_address = static_cast<char *>(transfer.get_address());
        bufferable.upload_data(0, mapped_address+bufferable.offset);
        // Update all bufferables in the same buffer at once
        for(const Bufferable *b=bufferable.prev_in_buffer; b; b=b->prev_in_buffer)