Cogs.Core
Renderer.h
1#pragma once
2
3#include "IRenderer.h"
4
5#include "RenderResources.h"
6#include "RenderSettings.h"
7#include "RenderStates.h"
8#include "EffectCache.h"
9#include "EnginePermutations.h"
10#include "EffectBindings.h"
11#include "EngineBuffers.h"
12#include "Rendering/IEffects.h"
13#include "../Context.h"
14#include "../ViewContext.h"
15#include "Tasks/RenderTask.h"
16
17namespace Cogs
18{
19 struct WindowData;
20
21 namespace Core
22 {
27 class Renderer : public IRenderer
28 {
29 public:
30 Renderer(Context * context);
31 ~Renderer();
32
33 // IRenderer implementation
34
35 void initialize(IGraphicsDevice * device) override;
36 void cleanup() override;
37
38 void setMode(RenderMode mode) override { this->mode = mode; }
39 RenderMode getMode() const override { return mode; }
40
41 void setBackgroundColor(const glm::vec4 & backgroundColor) override;
42 glm::vec4 getBackgroundColor() const override { return backgroundColor; }
43
44 glm::vec2 getSize() const override { return context->getDefaultView()->getSize(); }
45 IGraphicsDevice * getDevice() override { return device; }
46 const RenderSettings & getSettings() const override { return settings; }
47
48 void beginFrame() override;
49 void endFrame(uint32_t syncInterval = 0, uint32_t presentFlags = PresentFlags::None) override;
50
51 void render() override;
52
53 glm::mat4 getProjectionMatrix(const glm::mat4 projectionMatrix) override;
54 glm::mat4 getViewFromViewportMatrix(glm::mat4 inverseProjectionMatrix) override;
55 float getClearDepth() override;
56 float getNearDepth() override;
57
58 IRenderResources * getResources() override;
59
61 void registerExtension(IRendererExtension * extension) override;
62 void unregisterExtension(IRendererExtension* extension) override;
63 std::span<IRendererExtension*> getExtensions() override { return extensions; }
64
65 void renderScreenshot(const ScreenshotSettings & settings, std::vector<uint8_t> & bytes, uint32_t * stride = nullptr) override;
66
67 EngineBuffers & getEngineBuffers() override { return engineBuffers; }
68 RenderStates & getRenderStates() override { return renderStates; }
69 EffectFlags::EEffectFlags getEffectFlags() const override { return effectFlags; }
70 EffectCache & getEffectCache() override { return effectCache; }
71 EffectBindings & getEffectBindings() override { return effectBindings; }
72 ActiveLights & getActiveLights() override { return activeLights; }
73 unsigned getMaxLights() const override { return maxLights; }
74
75 void updatePermutation(EnginePermutation * permutation) override;
76 EnginePermutations & getEnginePermutations() override { return enginePermutations; }
77
78 COGSCORE_DLL_API class ImguiRenderer* getGuiRenderer() override;
79 COGSCORE_DLL_API class InspectorGuiRenderer* getInspectorGuiRenderer() override;
80 COGSCORE_DLL_API class InspectorGuiRenderer* getEngineInspectorGuiRenderer() override;
81
82 // Renderer specific
83
84 class RenderResources & getRenderResources() { return resources; }
85 class RenderPipelineManager* getPipelineManager() { return pipelineManager.get(); }
86 RenderTaskContext & getRenderContext() { return renderContext; }
87
88 friend Cogs::Core::RenderTaskContext getRenderTaskContext(Renderer* renderer);
89
90 protected:
91 void updateSettings();
92 void updateEffectFlags();
94 void emitEvent(uint32_t eventId, const DrawContext* renderingContext);
95
96 private:
97 Context* context = nullptr;
98 IGraphicsDevice* device = nullptr;
99 RenderSettings settings;
101 EngineBuffers engineBuffers = {};
102 RenderStates renderStates;
103 struct RenderTarget* defaultTarget = nullptr;
104 EffectCache effectCache;
106
107 RenderResources resources;
108 EnginePermutations enginePermutations;
109 EffectBindings effectBindings;
110 std::unique_ptr<struct Renderers> renderers;
111 std::unique_ptr<class RenderPipelineManager> pipelineManager;
112
113 ActiveLights activeLights;
114 // Might be less than kMaxLights, updated in initalize
115 unsigned maxLights = static_cast<unsigned>(kMaxLights);
116 glm::vec4 backgroundColor;
117 std::vector<IRendererExtension*> extensions;
118
119 RenderTaskContext renderContext;
120 };
121 }
122}
A Context instance contains all the services, systems and runtime components needed to use Cogs.
Definition: Context.h:83
Interface to the render resources.
Definition: IRenderer.h:64
Defines an extension to the renderer, capable of doing custom rendering.
Definition: IRenderer.h:123
Renderer interface used by the engine to control registered renderer instances.
Definition: IRenderer.h:154
Contains render resources used by the renderer.
Core renderer system.
Definition: Renderer.h:28
void updatePermutation(EnginePermutation *permutation) override
Updates the EnginePermutation.
Definition: Renderer.cpp:757
ActiveLights & getActiveLights() override
Get the reference to the ActiveLights structure.
Definition: Renderer.h:72
void endFrame(uint32_t syncInterval=0, uint32_t presentFlags=PresentFlags::None) override
Signals the end of the current frame.
Definition: Renderer.cpp:614
float getNearDepth() override
Get adjusted near plane depth.
Definition: Renderer.cpp:594
EngineBuffers & getEngineBuffers() override
Get the reference to the EngineBuffers structure.
Definition: Renderer.h:67
void setMode(RenderMode mode) override
Set the rendering mode the renderer should use.
Definition: Renderer.h:38
RenderStates & getRenderStates() override
Get the reference to the RenderStates structure.
Definition: Renderer.h:68
EffectBindings & getEffectBindings() override
Get the reference to the EffectBindings structure.
Definition: Renderer.h:71
IRenderResources * getResources() override
Get the render resources interface.
Definition: Renderer.cpp:621
IGraphicsDevice * getDevice() override
Get the graphics device used by the renderer.
Definition: Renderer.h:45
void registerExtension(IRendererExtension *extension) override
Registers the given extension with the renderer. Doesn not take ownership of pointer.
Definition: Renderer.cpp:626
void setBackgroundColor(const glm::vec4 &backgroundColor) override
Set the background color applied to the output surface before rendering.
Definition: Renderer.cpp:330
RenderMode getMode() const override
Get the Rendering mode used by the renderer.
Definition: Renderer.h:39
const RenderSettings & getSettings() const override
Get the settings of the renderer.
Definition: Renderer.h:46
EffectFlags::EEffectFlags getEffectFlags() const override
Get the EffectFlags.
Definition: Renderer.h:69
void renderScreenshot(const ScreenshotSettings &settings, std::vector< uint8_t > &bytes, uint32_t *stride=nullptr) override
Render screenshot.
Definition: Renderer.cpp:645
glm::mat4 getViewFromViewportMatrix(glm::mat4 inverseProjectionMatrix) override
Get an adjusted inverse projection matrix mainly used in post processing.
Definition: Renderer.cpp:527
void emitEvent(uint32_t eventId, const DrawContext *renderingContext)
Emits the given render event to all registered extensions.
Definition: Renderer.cpp:750
glm::vec4 getBackgroundColor() const override
Get the reference to the background color.
Definition: Renderer.h:42
EnginePermutations & getEnginePermutations() override
Get the reference to the EnginePermutations structure.
Definition: Renderer.h:76
EffectCache & getEffectCache() override
Get the reference to the EffectCache structure.
Definition: Renderer.h:70
glm::vec2 getSize() const override
Get the output surface size of the renderer.
Definition: Renderer.h:44
void unregisterExtension(IRendererExtension *extension) override
Unregister an extension with the renderer.
Definition: Renderer.cpp:635
void cleanup() override
Cleanup the renderer, releasing all resources held.
Definition: Renderer.cpp:210
float getClearDepth() override
Get adjusted clear depth used to render.
Definition: Renderer.cpp:582
std::span< IRendererExtension * > getExtensions() override
Get the list of all extensions.
Definition: Renderer.h:63
glm::mat4 getProjectionMatrix(const glm::mat4 projectionMatrix) override
Get an adjusted projection matrix used to render.
Definition: Renderer.cpp:453
unsigned getMaxLights() const override
Get the maximum number of lights.
Definition: Renderer.h:73
void render() override
Kick off the actual rendering, allowing the renderer to produce its output.
Definition: Renderer.cpp:231
void beginFrame() override
Signals the beginning of a new frame.
Definition: Renderer.cpp:607
Represents a graphics device used to manage graphics resources and issue drawing commands.
RenderMode
Defines global rendering modes that can be supported by the renderer.
Definition: IRenderer.h:37
@ Normal
Regular shaded rendering.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Active lights settings.
Definition: IRenderer.h:47
Render settings variables.
Screenshot render settings.
Definition: IRenderer.h:28
EEffectFlags
Effect source flags.
Definition: IEffects.h:20
@ None
No flags.
Definition: Common.h:177