From 8045b8ba04aae39a4cf9733e72413f648b6ebe2b Mon Sep 17 00:00:00 2001 From: tylermurphy534 Date: Sun, 18 Sep 2022 21:20:51 -0400 Subject: stanford dragon rendering --- engine/xe_renderer.hpp | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 engine/xe_renderer.hpp (limited to 'engine/xe_renderer.hpp') diff --git a/engine/xe_renderer.hpp b/engine/xe_renderer.hpp new file mode 100644 index 0000000..321a4e3 --- /dev/null +++ b/engine/xe_renderer.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include "xe_swap_chain.hpp" +#include "xe_window.hpp" +#include "xe_device.hpp" +#include "xe_model.hpp" + +#include +#include +#include + +namespace xe { +class XeRenderer { + public: + + XeRenderer(XeWindow &window, XeDevice &device); + ~XeRenderer(); + + XeRenderer(const XeRenderer &) = delete; + XeRenderer operator=(const XeRenderer &) = delete; + + VkRenderPass getSwapChainRenderPass() const { return xeSwapChain->getRenderPass(); } + float getAspectRatio() const { return xeSwapChain->extentAspectRatio(); } + bool isFrameInProgress() const { return isFrameStarted; } + + VkCommandBuffer getCurrentCommandBuffer() const { + assert(isFrameStarted && "Cannot get command buffer when frame not in progress"); + return commandBuffers[currentFrameIndex]; + } + + int getFrameIndex() const { + assert(isFrameStarted && "Cannot get frame index when frame not in progress"); + return currentFrameIndex; + } + + VkCommandBuffer beginFrame(); + void endFrame(); + void beginSwapChainRenderPass(VkCommandBuffer commandBuffer); + void endSwapChainRenderPass(VkCommandBuffer commandBuffer); + + private: + void createCommandBuffers(); + void freeCommandBuffers(); + void recreateSwapChain(); + + XeWindow& xeWindow; + XeDevice& xeDevice; + std::unique_ptr xeSwapChain; + std::vector commandBuffers; + + uint32_t currentImageIndex; + int currentFrameIndex{0}; + bool isFrameStarted{false}; +}; +} \ No newline at end of file -- cgit v1.2.3-freya