+ buffer->sub_data(frame*buffer->get_size()+offset, data_size, get_data_pointer());
+ dirty &= ~mask;
+ if(!(dirty&((1<<multi_buf)-1)))
+ dirty = 0;
+}
+
+Bufferable::AsyncUpdater *Bufferable::create_async_updater() const
+{
+ if(!buffer || buffer->get_multiplicity()>1)
+ throw invalid_operation("Bufferable::create_async_updater");
+ return new AsyncUpdater(*this);