PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
Renderer.hpp
1#pragma once
2
3#include "PixelBullet/Graphics/RenderStage.hpp"
4#include "PixelBullet/Graphics/SubrenderHolder.hpp"
5
6namespace PixelBullet
7{
12 {
13 friend class Graphics;
14
15 public:
19 Renderer() = default;
20 virtual ~Renderer() = default;
21
25 virtual void Start() = 0;
26
30 virtual void Update() = 0;
31
37 template <typename T>
38 bool HasSubrender() const
39 {
40 return m_SubrenderHolder.Has<T>();
41 }
42
48 template <typename T>
49 T* GetSubrender() const
50 {
51 return m_SubrenderHolder.Get<T>();
52 }
53
61 template <typename T, typename... Args>
62 T* AddSubrender(const Pipeline::Stage& pipelineStage, Args&&... args)
63 {
64 return m_SubrenderHolder.Add<T>(pipelineStage,
65 std::make_unique<T>(pipelineStage, std::forward<Args>(args)...));
66 }
67
72 template <typename T>
74 {
75 m_SubrenderHolder.Remove<T>();
76 }
77
82 {
83 m_SubrenderHolder.Clear();
84 }
85
86 RenderStage* GetRenderStage(uint32_t index) const
87 {
88 if (m_RenderStages.empty() || m_RenderStages.size() < index)
89 {
90 return nullptr;
91 }
92
93 return m_RenderStages.at(index).get();
94 }
95
96 void AddRenderStage(std::unique_ptr<RenderStage>&& renderStage)
97 {
98 m_RenderStages.emplace_back(std::move(renderStage));
99 }
100
101 private:
102 bool m_Started = false;
103 std::vector<std::unique_ptr<RenderStage>> m_RenderStages;
104 SubrenderHolder m_SubrenderHolder;
105 };
106} // namespace PixelBullet
Module that manages the Vulkan m_Instance, Surface, Window and the renderpass structure.
Definition Graphics.hpp:32
std::pair< uint32_t, uint32_t > Stage
Definition Pipeline.hpp:17
Definition RenderStage.hpp:205
Class used to manage Subrender objects to create a list of render pass.
Definition Renderer.hpp:12
T * AddSubrender(const Pipeline::Stage &pipelineStage, Args &&... args)
Definition Renderer.hpp:62
T * GetSubrender() const
Definition Renderer.hpp:49
bool HasSubrender() const
Definition Renderer.hpp:38
virtual void Update()=0
void ClearSubrenders()
Definition Renderer.hpp:81
virtual void Start()=0
void RemoveSubrender()
Definition Renderer.hpp:73