~StagingBuffer();
};
- using TransferCallback = void(VkCommandBuffer, VkBuffer, std::size_t);
-
struct PendingTransfer
{
unsigned buffer_index = 0;
std::size_t offset = 0;
std::size_t size = 0;
- std::function<TransferCallback> callback;
+ std::function<void()> synchronize;
+ std::function<void(VkCommandBuffer, VkBuffer, std::size_t)> transfer;
};
Device &device;
public:
TransferQueue(Device &);
- template<typename T>
- void *prepare_transfer(std::size_t, T &&);
+ template<typename S, typename T>
+ void *prepare_transfer(std::size_t, S &&, T &&);
private:
PendingTransfer &prepare_transfer(std::size_t);
void dispatch_transfers(VkCommandBuffer);
};
-template<typename T>
-void *TransferQueue::prepare_transfer(std::size_t size, T &&callback)
+template<typename S, typename T>
+void *TransferQueue::prepare_transfer(std::size_t size, S &&synchronize, T &&transfer)
{
PendingTransfer &pt = prepare_transfer(size);
- pt.callback = std::forward<T>(callback);
+ pt.synchronize = std::forward<S>(synchronize);
+ pt.transfer = std::forward<T>(transfer);
return static_cast<char *>(buffers[pt.buffer_index].mapped_address)+pt.offset;
}