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 "EngineBindGroups.h"
13#include "Rendering/IEffects.h"
14#include "../Context.h"
15#include "../ViewContext.h"
16#include "Tasks/RenderTask.h"
17
18namespace Cogs
19{
20 struct WindowData;
21
22 namespace Core
23 {
28 class Renderer : public IRenderer
29 {
30 public:
31 Renderer(Context * context);
32 ~Renderer();
33
34 // IRenderer implementation
35
36 void initialize(IGraphicsDevice * device) override;
37 void cleanup() override;
38
39 void setMode(RenderMode mode) override { this->mode = mode; }
40 RenderMode getMode() const override { return mode; }
41
42 void setBackgroundColor(const glm::vec4 & backgroundColor) override;
43 glm::vec4 getBackgroundColor() const override { return backgroundColor; }
44
45 glm::vec2 getSize() const override { return context->getDefaultView()->getSize(); }
46 IGraphicsDevice * getDevice() override { return device; }
47 const RenderSettings & getSettings() const override { return settings; }
48
49 void beginFrame() override;
50 void endFrame(uint32_t syncInterval = 0, Cogs::PresentFlags presentFlags = PresentFlags::None) override;
51
52 void render() override;
53
54 glm::mat4 getProjectionMatrix(const glm::mat4 projectionMatrix) override;
55 glm::mat4 getViewFromViewportMatrix(glm::mat4 inverseProjectionMatrix) override;
56 float getClearDepth() override;
57 float getNearDepth() override;
58
59 IRenderResources * getResources() override;
60
62 void registerExtension(IRendererExtension * extension) override;
63 void unregisterExtension(IRendererExtension* extension) override;
64 std::span<IRendererExtension*> getExtensions() override { return extensions; }
65
66 void renderScreenshot(const ScreenshotSettings & settings, std::vector<uint8_t> & bytes, uint32_t * stride = nullptr) override;
67
68 EngineBuffers & getEngineBuffers() override { return engineBuffers; }
69 EngineBindGroups & getEngineBindGroups() { return engineBindGroups; }
70 RenderStates & getRenderStates() override { return renderStates; }
71 EffectFlags::EEffectFlags getEffectFlags() const override { return effectFlags; }
72 EffectCache & getEffectCache() override { return effectCache; }
73 EffectBindings & getEffectBindings() override { return effectBindings; }
74 ActiveLights & getActiveLights() override { return activeLights; }
75 unsigned getMaxLights() const override { return maxLights; }
76
77 void updatePermutation(EnginePermutation * permutation) override;
78 EnginePermutations & getEnginePermutations() override { return enginePermutations; }
79
80 COGSCORE_DLL_API class ImguiRenderer* getGuiRenderer() override;
81 COGSCORE_DLL_API class InspectorGuiRenderer* getEngineInspectorGuiRenderer() override;
82
83 // Renderer specific
84
85 class RenderResources & getRenderResources() { return resources; }
86 class RenderPipelineManager* getPipelineManager() { return pipelineManager.get(); }
87 RenderTaskContext & getRenderContext() { return renderContext; }
88
89 friend Cogs::Core::RenderTaskContext getRenderTaskContext(Renderer* renderer);
90
91 protected:
92 void updateSettings();
93 void updateEffectFlags();
95 void emitEvent(uint32_t eventId, const DrawContext* renderingContext);
96
97 private:
98 Context* context = nullptr;
99 IGraphicsDevice* device = nullptr;
100 RenderSettings settings;
102 EngineBuffers engineBuffers = {};
103 EngineBindGroups engineBindGroups = {};
104 RenderStates renderStates;
105 struct RenderTarget* defaultTarget = nullptr;
106 EffectCache effectCache;
108
109 RenderResources resources;
110 EnginePermutations enginePermutations;
111 EffectBindings effectBindings;
112 std::unique_ptr<struct Renderers> renderers;
113 std::unique_ptr<class RenderPipelineManager> pipelineManager;
114
115 ActiveLights activeLights;
116 // Might be less than kMaxLights, updated in initalize
117 unsigned maxLights = static_cast<unsigned>(kMaxLights);
118 glm::vec4 backgroundColor;
119 std::vector<IRendererExtension*> extensions;
120
121 RenderTaskContext renderContext;
122 };
123 }
124}
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:29
void updatePermutation(EnginePermutation *permutation) override
Updates the EnginePermutation.
Definition: Renderer.cpp:751
ActiveLights & getActiveLights() override
Get the reference to the ActiveLights structure.
Definition: Renderer.h:74
float getNearDepth() override
Get adjusted near plane depth.
Definition: Renderer.cpp:588
EngineBuffers & getEngineBuffers() override
Get the reference to the EngineBuffers structure.
Definition: Renderer.h:68
void setMode(RenderMode mode) override
Set the rendering mode the renderer should use.
Definition: Renderer.h:39
RenderStates & getRenderStates() override
Get the reference to the RenderStates structure.
Definition: Renderer.h:70
EffectBindings & getEffectBindings() override
Get the reference to the EffectBindings structure.
Definition: Renderer.h:73
IRenderResources * getResources() override
Get the render resources interface.
Definition: Renderer.cpp:615
IGraphicsDevice * getDevice() override
Get the graphics device used by the renderer.
Definition: Renderer.h:46
void registerExtension(IRendererExtension *extension) override
Registers the given extension with the renderer. Doesn not take ownership of pointer.
Definition: Renderer.cpp:620
void setBackgroundColor(const glm::vec4 &backgroundColor) override
Set the background color applied to the output surface before rendering.
Definition: Renderer.cpp:329
RenderMode getMode() const override
Get the Rendering mode used by the renderer.
Definition: Renderer.h:40
const RenderSettings & getSettings() const override
Get the settings of the renderer.
Definition: Renderer.h:47
EffectFlags::EEffectFlags getEffectFlags() const override
Get the EffectFlags.
Definition: Renderer.h:71
void renderScreenshot(const ScreenshotSettings &settings, std::vector< uint8_t > &bytes, uint32_t *stride=nullptr) override
Render screenshot.
Definition: Renderer.cpp:639
glm::mat4 getViewFromViewportMatrix(glm::mat4 inverseProjectionMatrix) override
Get an adjusted inverse projection matrix mainly used in post processing.
Definition: Renderer.cpp:526
void emitEvent(uint32_t eventId, const DrawContext *renderingContext)
Emits the given render event to all registered extensions.
Definition: Renderer.cpp:744
void endFrame(uint32_t syncInterval=0, Cogs::PresentFlags presentFlags=PresentFlags::None) override
Signals the end of the current frame.
Definition: Renderer.cpp:608
glm::vec4 getBackgroundColor() const override
Get the reference to the background color.
Definition: Renderer.h:43
EnginePermutations & getEnginePermutations() override
Get the reference to the EnginePermutations structure.
Definition: Renderer.h:78
EffectCache & getEffectCache() override
Get the reference to the EffectCache structure.
Definition: Renderer.h:72
glm::vec2 getSize() const override
Get the output surface size of the renderer.
Definition: Renderer.h:45
void unregisterExtension(IRendererExtension *extension) override
Unregister an extension with the renderer.
Definition: Renderer.cpp:629
void cleanup() override
Cleanup the renderer, releasing all resources held.
Definition: Renderer.cpp:209
float getClearDepth() override
Get adjusted clear depth used to render.
Definition: Renderer.cpp:581
std::span< IRendererExtension * > getExtensions() override
Get the list of all extensions.
Definition: Renderer.h:64
glm::mat4 getProjectionMatrix(const glm::mat4 projectionMatrix) override
Get an adjusted projection matrix used to render.
Definition: Renderer.cpp:452
unsigned getMaxLights() const override
Get the maximum number of lights.
Definition: Renderer.h:75
void render() override
Kick off the actual rendering, allowing the renderer to produce its output.
Definition: Renderer.cpp:229
void beginFrame() override
Signals the beginning of a new frame.
Definition: Renderer.cpp:601
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
PresentFlags
Flags controlling presentation.
Definition: Common.h:166
Active lights settings.
Definition: IRenderer.h:47
Render settings variables.
Screenshot render settings.
Definition: IRenderer.h:28
EEffectFlags
Effect source flags.
Definition: IEffects.h:27