#include <stdexcept>
-#include "buffer.h"
#include "bufferable.h"
#include "error.h"
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)