vengine  0.1.0
3D graphics engine made with Vulkan
Loading...
Searching...
No Matches
Renderer.hpp
Go to the documentation of this file.
1///
2/// @file Renderer.hpp
3/// @brief This file contains the Renderer class
4/// @namespace ven
5///
6
7#pragma once
8
9#include <memory>
10#include <cassert>
11
12#include <vulkan/vulkan.h>
13
14#include "VEngine/Window.hpp"
15#include "VEngine/Device.hpp"
16#include "VEngine/SwapChain.hpp"
17
18namespace ven {
19
20 class Renderer {
21
22 public:
23
24 Renderer(Window &window, Device &device) : m_window{window}, m_device{device} { recreateSwapChain(); createCommandBuffers(); }
26
27 Renderer(const Renderer &) = delete;
28 Renderer& operator=(const Renderer &) = delete;
29
30 [[nodiscard]] VkRenderPass getSwapChainRenderPass() const { return m_swapChain->getRenderPass(); }
31 [[nodiscard]] float getAspectRatio() const { return m_swapChain->extentAspectRatio(); }
32 [[nodiscard]] bool isFrameInProgress() const { return m_isFrameStarted; }
33 [[nodiscard]] VkCommandBuffer getCurrentCommandBuffer() const { assert(isFrameInProgress() && "cannot get command m_buffer when frame not in progress"); return m_commandBuffers[static_cast<unsigned long>(m_currentFrameIndex)]; }
34
35 [[nodiscard]] int getFrameIndex() const { assert(isFrameInProgress() && "cannot get frame index when frame not in progress"); return m_currentFrameIndex; }
36
37 VkCommandBuffer beginFrame();
38 void endFrame();
39 void beginSwapChainRenderPass(VkCommandBuffer commandBuffer) const;
40 static void endSwapChainRenderPass(VkCommandBuffer commandBuffer);
41
42 private:
43
45 void freeCommandBuffers();
46 void recreateSwapChain();
47
50 std::unique_ptr<SwapChain> m_swapChain;
51 std::vector<VkCommandBuffer> m_commandBuffers;
52
55 bool m_isFrameStarted{false};
56
57 }; // class Renderer
58
59} // namespace ven
This file contains the Device class.
This file contains the Shader class.
This file contains the Window class.
VkCommandBuffer beginFrame()
Definition renderer.cpp:43
Renderer & operator=(const Renderer &)=delete
bool m_isFrameStarted
Definition Renderer.hpp:55
std::unique_ptr< SwapChain > m_swapChain
Definition Renderer.hpp:50
VkRenderPass getSwapChainRenderPass() const
Definition Renderer.hpp:30
float getAspectRatio() const
Definition Renderer.hpp:31
Window & m_window
Definition Renderer.hpp:48
Device & m_device
Definition Renderer.hpp:49
int getFrameIndex() const
Definition Renderer.hpp:35
void createCommandBuffers()
Definition renderer.cpp:3
void beginSwapChainRenderPass(VkCommandBuffer commandBuffer) const
Definition renderer.cpp:90
void freeCommandBuffers()
Definition renderer.cpp:17
Renderer(const Renderer &)=delete
void recreateSwapChain()
Definition renderer.cpp:23
std::vector< VkCommandBuffer > m_commandBuffers
Definition Renderer.hpp:51
VkCommandBuffer getCurrentCommandBuffer() const
Definition Renderer.hpp:33
static void endSwapChainRenderPass(VkCommandBuffer commandBuffer)
Definition renderer.cpp:123
int m_currentFrameIndex
Definition Renderer.hpp:54
void endFrame()
Definition renderer.cpp:69
uint32_t m_currentImageIndex
Definition Renderer.hpp:53
bool isFrameInProgress() const
Definition Renderer.hpp:32
Renderer(Window &window, Device &device)
Definition Renderer.hpp:24