#pragma once #include "cve_window.hpp" #include "cve_device.hpp" #include "cve_swap_chain.hpp" #include #include #include namespace cve { class CveRenderer { public: CveRenderer(CveWindow &window, CveDevice &device); ~CveRenderer(); CveRenderer(const CveRenderer &) = delete; CveRenderer &operator=(const CveRenderer &) = delete; VkRenderPass getSwapChainRenderPass() const { return cveSwapChain->getRenderPass(); } bool isFrameInProgress() const { return isFrameStarted; } VkCommandBuffer getCurrentCommandBuffer() const { assert(isFrameStarted && "Cannot get command buffer when frame is not in progress"); return commandBuffers[currentImageIndex]; } VkCommandBuffer beginFrame(); void endFrame(); void beginSwapChainRenderPass(VkCommandBuffer commandBuffer); void endSwapChainRenderPass(VkCommandBuffer commandBuffer); private: void createCommandBuffers(); void freeCommandBuffers(); void recreateSwapChain(); CveWindow& cveWindow; CveDevice& cveDevice; std::unique_ptr cveSwapChain; std::vector commandBuffers; uint32_t currentImageIndex; bool isFrameStarted = false; }; }