SpiecsEngine
 
Loading...
Searching...
No Matches
RendererManager.h
Go to the documentation of this file.
1/**
2* @file RendererManager.h
3* @brief The RendererManager Class Definitions.
4* @author Spices.
5*/
6
7#pragma once
8#include "Core/Core.h"
9#include "Render/FrameInfo.h"
10#include "Core/Library/ClassLibrary.h"
11#include "Core/Container/LinkedUnorderedMap.h"
12
13namespace Spices {
14
15 /**
16 * @brief Forward declare
17 */
18 class Renderer;
19
20 /**
21 * @brief RendererManager Class.
22 * This class Manages all renderer.
23 */
25 {
26 public:
27
28 /**
29 * @brief Constructor Function.
30 */
31 RendererManager() = default;
32
33 /**
34 * @brief Destructor Function.
35 */
36 virtual ~RendererManager() = default;
37
38 /**
39 * @brief Get Static RendererManager.
40 * @return Returns the Static RendererManager.
41 */
42 static RendererManager& Get();
43
44 /**
45 * @brief All renderer Start to Render.
46 * @param[in] ts TimeStep.
47 * @param[in] frameInfo The current frame data.
48 */
49 static void Run(TimeStep& ts, FrameInfo& frameInfo);
50
51 /**
52 * @brief This function is called on swapchain resized or out of data.
53 * Recreate all renderer render pass, resource and framebuffer.
54 * @todo Event from glfw.
55 */
56 static void OnWindowResizeOver();
57
58 /**
59 * @brief Event Called on Slate resize.
60 */
61 static void OnSlateResize();
62
63 /**
64 * @brief Event Called on world mark querier.
65 */
66 static void OnMeshAddedWorld();
67
68 /**
69 * @brief Iter all Renderer.
70 * @param[in] fn Iter function.
71 */
72 template<typename T>
73 static void IterRenderer(T&& fn);
74
75 /**
76 * @brief Push a renderer to this manager, and initialize it.
77 * @tparam T Specific Renderer Class.
78 * @param[in] args Args.
79 */
80 template<typename T, typename ... Args>
81 RendererManager& Push(Args&& ... args)
82 {
84
85 std::string rendererName = ClassLibrary::GetClassString(typeid(T));
86
87 /**
88 * @brief Push system to map
89 */
90 if (m_Identities.has_key(rendererName))
91 {
92 std::stringstream ss;
93 ss << rendererName << " has been pushed ";
94
95 SPICES_CORE_ERROR(ss.str());
96 }
97
98 m_Identities.push_back(rendererName, std::make_shared<T>(rendererName, std::forward<Args>(args)...));
99 const auto ptr = *m_Identities.find_value(rendererName);
100 ptr->OnSystemInitialize();
101
102 /**
103 * @brief System init
104 */
105 std::stringstream ss;
106 ss << rendererName << " pushed ";
107 SPICES_CORE_INFO(ss.str());
108
109 return *m_RendererManager;
110 }
111
112 /**
113 * @brief Pop a renderer from this manager, and destroy it.
114 * @param[in] rendererName Specific Renderer Name.
115 */
116 static RendererManager& Pop(const std::string& rendererName)
117 {
119
120 /**
121 * @brief Pop system to map
122 */
123 if (!m_Identities.has_key(rendererName))
124 {
125 std::stringstream ss;
126 ss << rendererName << " has been popped ";
127
128 SPICES_CORE_ERROR(ss.str())
129 }
130
131 /**
132 * @brief System shutdown
133 */
134 std::stringstream ss;
135 ss << rendererName << " popped ";
136
137 SPICES_CORE_INFO(ss.str());
138
139 m_Identities.erase(rendererName);
140
141 return *m_RendererManager;
142 }
143
144 static std::shared_ptr<Renderer> GetRenderer(const std::string& name);
145
146 private:
147
148 /**
149 * @brief Static RendererManager.
150 */
152
153 /**
154 * @brief A container contains all renderer.
155 */
156 static scl::linked_unordered_map<std::string, std::shared_ptr<Renderer>> m_Identities;
157 };
158
159 template<typename T>
160 inline void RendererManager::IterRenderer(T&& fn)
161 {
163
164 m_Identities.for_each(fn);
165 }
166}
#define SPICES_PROFILE_ZONE
static std::string GetClassString(ClassType t)
Get Class Name as string.
Class Static Function Library.
FrameInfo Class. This class defines the FrameInfo data.
Definition FrameInfo.h:32
RendererManager()=default
Constructor Function.
virtual ~RendererManager()=default
Destructor Function.
static std::shared_ptr< Renderer > GetRenderer(const std::string &name)
static void OnSlateResize()
Event Called on Slate resize.
static std::unique_ptr< RendererManager > m_RendererManager
Static RendererManager.
static void OnWindowResizeOver()
This function is called on swapchain resized or out of data. Recreate all renderer render pass,...
static void Run(TimeStep &ts, FrameInfo &frameInfo)
All renderer Start to Render.
static RendererManager & Get()
Get Static RendererManager.
static RendererManager & Pop(const std::string &rendererName)
Pop a renderer from this manager, and destroy it.
static void OnMeshAddedWorld()
Event Called on world mark querier.
RendererManager & Push(Args &&... args)
Push a renderer to this manager, and initialize it.
static scl::linked_unordered_map< std::string, std::shared_ptr< Renderer > > m_Identities
A container contains all renderer.
static void IterRenderer(T &&fn)
Iter all Renderer.
RendererManager Class. This class Manages all renderer.
Renderer Class. This class defines the basic behaves of renderer. When we add an new Renderer,...
Definition Renderer.h:57
This Class handles our engine time step during frames. Global Unique.
Definition TimeStep.h:22
The container combines hashmap and list together. Used in the case that we want iter a hashmap in ord...