PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
renderer.h
1#pragma once
2
3#include "pixelbullet/graphics/render_device.h"
4#include "pixelbullet/graphics/render_stage.h"
5#include "pixelbullet/graphics/render_target.h"
6#include "pixelbullet/graphics/subrender_holder.h"
7
8#include <memory>
9#include <utility>
10#include <vector>
11
12namespace pixelbullet
13{
15
16class Renderer
17{
18 friend class Graphics;
19 friend class GraphicsState;
20 friend class RendererRuntimeAccess;
21
22public:
23 Renderer() = default;
24 virtual ~Renderer() = default;
25
26 virtual void Start(RenderDevice& render_device) = 0;
27 virtual void Update(RenderDevice& render_device) = 0;
28
29 template <typename T>
30 bool HasSubrender() const
31 {
32 return subrender_holder_.Has<T>();
33 }
34
35 template <typename T>
36 T* GetSubrender() const
37 {
38 return subrender_holder_.Get<T>();
39 }
40
41 template <typename T, typename... Args>
42 T* AddSubrender(const Subrender::Stage& pipeline_stage, Args&&... args)
43 {
44 return subrender_holder_.Add<T>(pipeline_stage, std::make_unique<T>(pipeline_stage, std::forward<Args>(args)...));
45 }
46
47 template <typename T>
48 void RemoveSubrender()
49 {
50 subrender_holder_.Remove<T>();
51 }
52
53 void ClearSubrenders()
54 {
55 subrender_holder_.Clear();
56 }
57
58 RenderStage* GetRenderStage(uint32_t index) const
59 {
60 if (index >= render_stages_.size())
61 {
62 return nullptr;
63 }
64
65 return render_stages_.at(index).get();
66 }
67
68 void AddRenderStage(std::unique_ptr<RenderStage>&& render_stage)
69 {
70 render_stages_.emplace_back(std::move(render_stage));
71 }
72
73 void AddRenderTarget(RenderTargetSpecification specification)
74 {
75 render_targets_.emplace_back(std::move(specification));
76 }
77
78private:
79 bool started_ = false;
80 std::vector<RenderTargetSpecification> render_targets_;
81 std::vector<std::unique_ptr<RenderStage>> render_stages_;
82 SubrenderHolder subrender_holder_;
83};
84} // namespace pixelbullet
Definition render_device.h:15
Definition render_stage.h:143
Definition renderer_runtime_internal.h:16
Definition subrender_holder.h:16
Definition render_target.h:20