PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
renderer.h
1#pragma once
2
3#include "pixelbullet/graphics/render_stage.h"
4#include "pixelbullet/graphics/render_target.h"
5#include "pixelbullet/graphics/subrender_holder.h"
6
7namespace pixelbullet
8{
13{
14 friend class Graphics;
15
16public:
20 Renderer() = default;
21 virtual ~Renderer() = default;
22
26 virtual void Start() = 0;
27
31 virtual void Update() = 0;
32
38 template <typename T>
39 bool HasSubrender() const
40 {
41 return subrender_holder_.Has<T>();
42 }
43
49 template <typename T>
50 T* GetSubrender() const
51 {
52 return subrender_holder_.Get<T>();
53 }
54
62 template <typename T, typename... Args>
63 T* AddSubrender(const Pipeline::Stage& pipelineStage, Args&&... args)
64 {
65 return subrender_holder_.Add<T>(pipelineStage, std::make_unique<T>(pipelineStage, std::forward<Args>(args)...));
66 }
67
72 template <typename T>
74 {
75 subrender_holder_.Remove<T>();
76 }
77
82 {
83 subrender_holder_.Clear();
84 }
85
86 RenderStage* GetRenderStage(uint32_t index) const
87 {
88 if (index >= render_stages_.size())
89 {
90 return nullptr;
91 }
92
93 return render_stages_.at(index).get();
94 }
95
96 void AddRenderStage(std::unique_ptr<RenderStage>&& renderStage)
97 {
98 render_stages_.emplace_back(std::move(renderStage));
99 }
100
101 void AddRenderTarget(RenderTargetSpecification specification)
102 {
103 render_targets_.emplace_back(std::move(specification));
104 }
105
106private:
107 bool started_ = false;
108 std::vector<RenderTargetSpecification> render_targets_;
109 std::vector<std::unique_ptr<RenderStage>> render_stages_;
110 SubrenderHolder subrender_holder_;
111};
112} // namespace pixelbullet
Module that manages the Vulkan instance_, Surface, Window and the renderpass structure.
Definition graphics.h:35
std::pair< uint32_t, uint32_t > Stage
Definition pipeline.h:20
Definition render_stage.h:209
Class used to manage Subrender objects to create a list of render pass.
Definition renderer.h:13
void ClearSubrenders()
Definition renderer.h:81
bool HasSubrender() const
Definition renderer.h:39
virtual void Update()=0
T * AddSubrender(const Pipeline::Stage &pipelineStage, Args &&... args)
Definition renderer.h:63
void RemoveSubrender()
Definition renderer.h:73
virtual void Start()=0
T * GetSubrender() const
Definition renderer.h:50