#pragma once #include "vkn/wrapper/commandpool.h" #include "thread_worker.h" namespace vkn { class Device; class Queue; class CommandWorker { protected: Device& mDevice; Queue& mQueue; Name mName; CommandThreadWorker mWork; CommandPool mCommandPool; CommandBuffer mImmediateExeCmd; public: CommandWorker(Name name, Device& device, Queue& queue, VkCommandPoolCreateFlags queueFlags); CommandPool& GetCommandPool() { return mCommandPool; } Queue& GetQueue() { return mQueue; } void Invoke(const voidFn& fn); void InvokeBuffer(const commandFn& fn, const voidFn& callback); void Buffer(CommandBuffer& cmd, const commandFn& fn, const voidFn& callback); void Flush(); void ImmediatelyExecute(const commandFn& fn, const voidFn callback) { Buffer(mImmediateExeCmd, fn , callback); } bool Present(VkPresentInfoKHR& presentInfo); }; };