VoxelEngine
 
Loading...
Searching...
No Matches
RenderPassRegistry.h
1#pragma once
2
3#include "RenderPass.h"
4#include "events/EngineEventSite.h"
5
6#include <algorithm>
7
8namespace engine {
10 public:
11 static RenderPassRegistry& Get();
12
13
14 void windowResizeEvent(ResizeEvent* pEvent) override;
15
16
20 void registerPass(std::unique_ptr<RenderPass> pass, uint8_t position = 0);
21
22 template <typename PassT>
23 void deletePass() {
24 m_renderPasses.erase(
25 std::remove_if(
26 m_renderPasses.begin(),
27 m_renderPasses.end(),
28 [](const auto& pass) { return dynamic_cast<PassT*>(pass.get()) != nullptr; }
29 ),
30 m_renderPasses.end()
31 );
32 }
33
34 std::vector<std::unique_ptr<RenderPass>>& passes() { return m_renderPasses; }
35
36 template <typename PassT>
37 PassT* getPass() const {
38 for (auto& pass : m_renderPasses) {
39 if (PassT* concretePass = dynamic_cast<PassT*>(pass.get())) {
40 return concretePass;
41 }
42 }
43 return nullptr;
44 }
45
46 protected:
47 RenderPassRegistry() { m_renderPasses.reserve(std::numeric_limits<RenderPass::ID>::max()); }
48
49 std::vector<std::unique_ptr<RenderPass>> m_renderPasses;
50 };
51} // namespace engine
Definition EngineEventSite.h:8
Definition RenderPassRegistry.h:9
void registerPass(std::unique_ptr< RenderPass > pass, uint8_t position=0)
Registers a custom render pass at the specified position.
Definition RenderPassRegistry.cpp:19
Definition EngineEvents.h:6