Oxygen Engine
Modern C++ 3D Engine using OpenGL
Loading...
Searching...
No Matches
manager.h
1#ifndef OE_RENDER_MANAGER_H
2#define OE_RENDER_MANAGER_H
3
4#include <vector>
5#include <map>
6#include "common.h"
7#include "texture_manager.h"
8#include "../scene/manager.h"
9#include "../scene/node/renderable.h"
10#include "../render/node.h"
11
12namespace oe::render
13{
14 class Shader;
15 class Skybox;
16 class Mesh;
17
21 class Manager
22 {
23 public:
24 explicit Manager(scene::Manager& scene_manager);
25
26 Manager(scene::Manager& scene_manager, TextureManager& texture_manager);
27
28 ~Manager();
29
34 void draw(const RenderingPass pass, const bool draw_skybox = true);
35
39 void drawSkybox() const;
40
41 void bindSceneNode(scene::Node& node, const RenderingPass pass, const bool recursion = false);
42
43 void removeRenderNode(scene::RenderableNode* node);
44
45 std::shared_ptr<oe::render::ShaderBase> getOverrideShader() const noexcept
46 {
47 return _override_shader;
48 }
49
50 void setOverrideShader(std::shared_ptr<oe::render::ShaderBase> shader) noexcept
51 {
52 _override_shader = shader;
53 }
54
55 std::shared_ptr<oe::render::Skybox> getSkybox() const noexcept
56 {
57 return _skybox;
58 }
59
60 void setSkybox(std::shared_ptr<oe::render::Skybox> skybox) noexcept
61 {
62 _skybox = skybox;
63 }
64
65
72 void setCubicSkybox(std::shared_ptr<oe::render::Cubemap> cubemap) noexcept;
73
78 {
79 return _scene_manager;
80 }
81
86 {
87 return _texture_manager;
88 }
89
90 private:
91 scene::Manager& _scene_manager;
92
93 TextureManager _texture_manager;
94
95 //Draw specified scene node
96 void _drawNode(scene::RenderableNode& node, const RenderingPass pass);
97
98 //
99 std::map<scene::RenderableNode*, std::unique_ptr<render::Node>> _scene_node_to_render;
100
101 std::map<RenderingPass, std::vector<scene::RenderableNode*>> _nodes_by_pass;
102
103 // Avoid genrate a new mesh on GPU is multiple nodes uses the same
104 std::map<scene::RenderableNode*, render::Mesh*> _mesh_to_render;
105
106 std::shared_ptr<oe::render::ShaderBase> _override_shader = nullptr;
107 std::shared_ptr<oe::render::Skybox> _skybox = nullptr;
108
110
111 // // Todo replace by a factory ?
112 std::unique_ptr<render::Node> _generateRenderNodeFromNode(scene::RenderableNode* node);
113 };
114}
115
116#endif
Render manager.
Definition manager.h:22
void drawSkybox() const
Draw only the skybox.
scene::Manager & getSceneManager() const noexcept
Get the scene manager bound to this render manager.
Definition manager.h:77
TextureManager & getTextureManager()
Get the texture manager bound to this render manager.
Definition manager.h:85
void draw(const RenderingPass pass, const bool draw_skybox=true)
Draw only specific nodes of specified type.
void setCubicSkybox(std::shared_ptr< oe::render::Cubemap > cubemap) noexcept
Set cubemap as scene Skybox.
handles the load and deletion of textures/cubemaps
Definition texture_manager.h:51
Scene manager.
Definition manager.h:21
Definition node.h:31
Definition renderable.h:16
Render related abstractions (Shader, Framebuffer, Cubemaps, Textures)
Definition opengl.h:10
RenderingPass
Pipeline rendering passes.
Definition common.h:26