Polyphase Game Engine
Loading...
Searching...
No Matches
Renderer.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4#include "glm/glm.hpp"
5#include <array>
6
7#include "EngineTypes.h"
8#include "Assets/Texture.h"
9#include "Assets/StaticMesh.h"
10#include "Assets/MaterialLite.h"
11#include "Vertex.h"
12#include "World.h"
13#include "Constants.h"
14#include "Log.h"
15#include "Profiler.h"
16
17class Widget;
18class Console;
19class StatsOverlay;
20class CameraFrustum;
21
22struct EngineState;
23
25{
26 Light3D* mComponent = nullptr;
27 float mDistance2 = 0.0f;
28
29 LightDistance2(Light3D* comp, float dist2) : mComponent(comp), mDistance2(dist2) {}
30};
31
32// Per-method POLYPHASE_API on Get() only. A class-level export forces MSVC to
33// emit Renderer's implicit ctor/dtor bodies in every TU that includes this
34// header, which in turn instantiates ~SharedPtr<Console> / ~SharedPtr<StatsOverlay>
35// against the forward declarations above → C4150 ("deletion of pointer to
36// incomplete type"). Addons only need the singleton accessor anyway.
38{
39public:
40
41 static void Create();
42 static void Destroy();
43 POLYPHASE_API static Renderer* Get();
44
45 void Render(World* world, int32_t screenIndex);
46#if EDITOR
47 void RenderSecondScreen(World* world, class Image* colorTarget, class Image* depthTarget,
48 uint32_t width, uint32_t height, class Camera3D* cameraOverride = nullptr,
49 int32_t targetScreen = -1,
50 bool drawAccumulatedDebugDraws = true);
51#endif
52 ~Renderer();
53 void Initialize();
54
55 void GatherProperties(std::vector<Property>& props);
56
57 void EnableStatsOverlay(bool enable);
58 bool IsStatsOverlayEnabled() const;
59 void EnableConsole(bool enable);
60 bool IsConsoleEnabled();
61
62 void DirtyAllWidgets();
63
66
67 void SetEngineState(EngineState* engineState);
68 uint32_t GetFrameNumber() const;
69 uint32_t GetFrameIndex() const;
70 uint32_t GetScreenIndex() const;
71 bool IsRenderingFirstScreen() const;
72 bool IsRenderingLastScreen() const;
74
75 glm::vec2 GetScreenResolution(int32_t screen = -1);
76 glm::vec2 GetActiveScreenResolution();
77
78 float GetGlobalUiScale() const;
79 void SetGlobalUiScale(float scale);
80
81 Node3D* ProcessHitCheck(World* world, int32_t x, int32_t y, uint32_t* outInstance = nullptr);
82
83 void SetDebugMode(DebugMode mode);
84 DebugMode GetDebugMode() const;
85 void EnableProxyRendering(bool enable);
86 bool IsProxyRenderingEnabled() const;
89
90 void EnableFrustumCulling(bool enable);
91 bool IsFrustumCullingEnabled() const;
92
93 void Enable3dRendering(bool enable);
94 bool Is3dRenderingEnabled() const;
95 void Enable2dRendering(bool enable);
96 bool Is2dRenderingEnabled() const;
97
98 void EnablePathTracing(bool enable);
99 bool IsPathTracingEnabled() const;
100
103
104 void LoadDefaultTextures();
106 void LoadDefaultMeshes();
107 void LoadDefaultFonts();
108
109 void AddDebugDraw(const DebugDraw& draw);
110 void RemoveDebugDrawsForNode(Node* node);
111 const std::vector<DebugDraw>& GetDebugDraws() const;
112
113 const std::vector<LightData>& GetLightData() const;
114
115 void SetClearColor(const glm::vec4& color);
116 glm::vec4 GetClearColor() const;
117
118 void BeginLightBake();
119 void EndLightBake();
120 bool IsLightBakeInProgress() const;
121 float GetLightBakeProgress() const;
122
123 bool IsLightFadeEnabled() const;
124 void EnableLightFade(bool enable);
125 void SetLightFadeLimit(uint32_t limit);
126 uint32_t GetLightFadeLimit() const;
127 void SetLightFadeSpeed(float speed);
128 float GetLightFadeSpeed() const;
129
130 void SetColorScale(float colorScale);
131 float GetColorScale() const;
132 float GetColorScaleInverse() const;
133
134 void SetSelectedColor(const glm::vec4& color);
135 glm::vec4 GetSelectedColor() const;
136 void SetSelectedCheckerSize(float size);
137 float GetSelectedCheckerSize() const;
138
140 void EnablePostProcessPass(PostProcessPassId passId, bool enable);
141
142 void SetResolutionScale(float scale);
143 float GetResolutionScale() const;
144
145 uint32_t GetViewportX(int32_t screenIdx = -1);
146 uint32_t GetViewportY(int32_t screenIdx = -1);
147 uint32_t GetViewportWidth(int32_t screenIdx = -1);
148 uint32_t GetViewportHeight(int32_t screenIdx = -1);
149 glm::uvec4 GetViewport(int32_t screenIdx = -1);
150 glm::uvec4 GetSceneViewport(int32_t screenIdx = -1);
151
152 // Property Getters
153 uint32_t GetRaysPerPixel() const;
154 uint32_t GetMaxBounces() const;
156 uint32_t GetBakeRaysPerVertex() const;
157 uint32_t GetBakeMaxBounces() const;
158 float GetBakeShadowBias() const;
159 uint32_t GetBakeIndirectIterations() const;
160 uint32_t GetBakeDiffuseDirectPasses() const;
161 uint32_t GetBakeDiffuseIndirectPasses() const;
162 glm::vec4 GetSkyZenithColor() const;
163 glm::vec4 GetSkyHorizonColor() const;
164 glm::vec4 GetGroundColor() const;
165
166 // Default Textures
173
174 // Environment / IBL
176
177 // Default Materials
179
180 // Default Meshes
188
189 // Default Fonts
194
195private:
196
197 static Renderer* sInstance;
198 Renderer();
199
200 void BeginFrame();
201 void EndFrame();
202
203 void GatherDrawData(World* world);
204 void GatherLightData(World* world);
205 void RenderDraws(const std::vector<DrawData>& drawData);
206 void RenderDraws(const std::vector<DrawData>& drawData, PipelineConfig pipelineConfig);
207 void RenderDebugDraws(const std::vector<DebugDraw>& draws, PipelineConfig pipelineConfig = PipelineConfig::Count);
208 void FrustumCull(Camera3D* camera);
209 int32_t FrustumCullDraws(const CameraFrustum& frustum, std::vector<DrawData>& drawData);
210 int32_t FrustumCullDraws(const CameraFrustum& frustum, std::vector<DebugDraw>& drawData);
211 int32_t FrustumCullLights(const CameraFrustum& frustum, std::vector<LightData>& lightData);
212
213 void RenderShadowCasters(World* world);
214 void RenderSelectedGeometry(World* world);
215
216 void UpdateDebugDraws();
217
218 SharedPtr<StatsOverlay> mStatsWidget;
219 SharedPtr<Console> mConsoleWidget;
220
221 EngineState* mEngineState = nullptr;
222
223 bool mInitialized = false;
224
225 std::vector<DrawData> mShadowDraws;
226 std::vector<DrawData> mOpaqueDraws;
227 std::vector<DrawData> mSimpleShadowDraws;
228 std::vector<DrawData> mPostShadowOpaqueDraws; // (post-simple-shadow opaques. not talking about shadow mapping)
229 std::vector<DrawData> mTranslucentDraws;
230 std::vector<DrawData> mWireframeDraws;
231 std::vector<DrawData> mWidgetDraws;
232
233 std::vector<LightData> mLightData;
234
235 std::vector<DebugDraw> mDebugDraws;
236 std::vector<DebugDraw> mCollisionDraws;
237
238 World* mCurrentWorld = nullptr;
239 uint32_t mFrameIndex = 0;
240 uint32_t mScreenIndex = 0;
241 int32_t mTargetScreenFilter = -1; // -1 = no filter, 0 = top screen, 1 = bottom screen
242 uint32_t mFrameNumber = 0;
243 float mGlobalUiScale = 1.0f;
244 DebugMode mDebugMode = DEBUG_NONE;
245 BoundsDebugMode mBoundsDebugMode = BoundsDebugMode::Off;
246 bool mFrustumCulling = true;
247 bool mEnableProxyRendering = false;
248 bool mEnable3dRendering = true;
249 bool mEnable2dRendering = true;
250 bool mEnablePathTracing = false;
251 bool mEnableLightFade = false;
252 uint32_t mLightFadeLimit = 4;
253 float mLightFadeSpeed = 1.0f;
254 glm::vec4 mClearColor = {};
255 float mColorScale = 1.0f;
256 glm::vec4 mSelectedColor = { 0.2f, 0.1f, 1.0f, 0.6f };
257 float mSelectedCheckerSize = 8.0f;
258
259 // Path tracing
260 uint32_t mRaysPerPixel = 4;
261 uint32_t mMaxBounces = 4;
262 bool mPathTraceAccumulate = true;
263 glm::vec4 mSkyZenithColor = { 0.0f, 0.0f, 0.0f, 1.0f };
264 glm::vec4 mSkyHorizonColor = { 0.0f, 0.0f, 0.0f, 1.0f };
265 glm::vec4 mGroundColor = { 0.0f, 0.0f, 0.0f, 1.0f };
266
267 // Light Bake
268 uint32_t mBakeRaysPerVertex = 4;
269 uint32_t mBakeMaxBounces = 4;
270 float mBakeShadowBias = 0.001f;
271 uint32_t mBakeIndirectIterations = 20;
272 uint32_t mBakeDiffuseDirectPasses = 2;
273 uint32_t mBakeDiffuseIndirectPasses = 2;
274
275 // Post Process
276 bool mPostProcessEnables[(uint32_t)PostProcessPassId::Count] = { };
277
278};
PostProcessPassId
Definition EngineTypes.h:174
DebugMode
Definition Enums.h:33
@ DEBUG_NONE
Definition Enums.h:34
BoundsDebugMode
Definition Enums.h:41
PipelineConfig
Definition GraphicsTypes.h:66
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition AssetRef.h:18
Definition Camera3d.h:12
Definition CameraFrustum.h:8
Definition Console.h:14
Definition Light3d.h:6
Definition MaterialLite.h:38
Definition Node3d.h:14
Definition Node.h:67
Definition Renderer.h:38
FontRef mRoboto16
Definition Renderer.h:191
FontRef mRobotoMono16
Definition Renderer.h:192
MaterialRef mDefaultMaterial
Definition Renderer.h:178
void EnablePathTracing(bool enable)
Definition Renderer.cpp:240
bool IsRenderingLastScreen() const
Definition Renderer.cpp:285
void LoadDefaultMeshes()
Definition Renderer.cpp:448
static void Destroy()
Definition Renderer.cpp:73
void BeginLightBake()
Definition Renderer.cpp:1869
void SetSelectedColor(const glm::vec4 &color)
Definition Renderer.cpp:1849
bool IsRenderingFirstScreen() const
Definition Renderer.cpp:280
void SetLightFadeSpeed(float speed)
Definition Renderer.cpp:1909
void Initialize()
Definition Renderer.cpp:102
void EnableStatsOverlay(bool enable)
Definition Renderer.cpp:356
void LoadDefaultTextures()
Definition Renderer.cpp:433
void SetDebugMode(DebugMode mode)
Definition Renderer.cpp:177
uint32_t GetRaysPerPixel() const
Definition Renderer.cpp:1994
glm::uvec4 GetSceneViewport(int32_t screenIdx=-1)
Definition Renderer.cpp:2146
glm::vec4 GetSkyZenithColor() const
Definition Renderer.cpp:2039
static POLYPHASE_API Renderer * Get()
Definition Renderer.cpp:82
uint32_t GetBakeIndirectIterations() const
Definition Renderer.cpp:2024
uint32_t GetViewportWidth(int32_t screenIdx=-1)
Definition Renderer.cpp:2095
glm::vec4 GetGroundColor() const
Definition Renderer.cpp:2049
uint32_t GetScreenIndex() const
Definition Renderer.cpp:275
bool IsConsoleEnabled()
Definition Renderer.cpp:394
FontRef mRobotoMono8
Definition Renderer.h:193
void EnableConsole(bool enable)
Definition Renderer.cpp:386
bool Is2dRenderingEnabled() const
Definition Renderer.cpp:235
bool IsProxyRenderingEnabled() const
Definition Renderer.cpp:195
glm::vec4 GetSelectedColor() const
Definition Renderer.cpp:1854
void Render(World *world, int32_t screenIndex)
Definition Renderer.cpp:1262
void EnableLightFade(bool enable)
Definition Renderer.cpp:1894
void RemoveDebugDrawsForNode(Node *node)
Definition Renderer.cpp:481
glm::vec4 GetClearColor() const
Definition Renderer.cpp:1844
bool IsPathTraceAccumulationEnabled() const
Definition Renderer.cpp:2004
bool IsStatsOverlayEnabled() const
Definition Renderer.cpp:377
uint32_t GetViewportX(int32_t screenIdx=-1)
Definition Renderer.cpp:2055
glm::vec4 GetSkyHorizonColor() const
Definition Renderer.cpp:2044
TextureRef mDefaultORMTexture
Definition Renderer.h:172
Texture * GetBlackTexture()
Definition Renderer.cpp:250
void Enable2dRendering(bool enable)
Definition Renderer.cpp:230
void SetLightFadeLimit(uint32_t limit)
Definition Renderer.cpp:1899
static void Create()
Definition Renderer.cpp:66
float GetLightFadeSpeed() const
Definition Renderer.cpp:1914
bool IsLightFadeEnabled() const
Definition Renderer.cpp:1889
void AddDebugDraw(const DebugDraw &draw)
Definition Renderer.cpp:474
Node3D * ProcessHitCheck(World *world, int32_t x, int32_t y, uint32_t *outInstance=nullptr)
Definition Renderer.cpp:172
bool IsPostProcessPassEnabled(PostProcessPassId passId) const
Definition Renderer.cpp:1954
void LoadDefaultFonts()
Definition Renderer.cpp:464
uint32_t GetBakeDiffuseDirectPasses() const
Definition Renderer.cpp:2029
float GetResolutionScale() const
Definition Renderer.cpp:1989
float GetBakeShadowBias() const
Definition Renderer.cpp:2019
float GetLightBakeProgress() const
Definition Renderer.cpp:1884
StaticMeshRef mCylinderMesh
Definition Renderer.h:183
uint32_t GetViewportY(int32_t screenIdx=-1)
Definition Renderer.cpp:2075
void Enable3dRendering(bool enable)
Definition Renderer.cpp:220
void SetSelectedCheckerSize(float size)
Definition Renderer.cpp:1859
const std::vector< DebugDraw > & GetDebugDraws() const
Definition Renderer.cpp:494
void SetEngineState(EngineState *engineState)
Definition Renderer.cpp:260
uint32_t GetBakeMaxBounces() const
Definition Renderer.cpp:2014
const std::vector< LightData > & GetLightData() const
Definition Renderer.cpp:1834
void EnableProxyRendering(bool enable)
Definition Renderer.cpp:190
void SetBoundsDebugMode(BoundsDebugMode mode)
Definition Renderer.cpp:200
void GatherProperties(std::vector< Property > &props)
Definition Renderer.cpp:136
StaticMeshRef mSphere112Mesh
Definition Renderer.h:186
void SetColorScale(float colorScale)
Definition Renderer.cpp:1919
TextureRef mDefaultColorTexture
Definition Renderer.h:169
bool IsPathTracingEnabled() const
Definition Renderer.cpp:245
Console * GetConsoleWidget()
Definition Renderer.cpp:414
StatsOverlay * GetStatsWidget()
Definition Renderer.cpp:419
float GetColorScale() const
Definition Renderer.cpp:1938
glm::vec2 GetActiveScreenResolution()
Definition Renderer.cpp:323
void SetClearColor(const glm::vec4 &color)
Definition Renderer.cpp:1839
DebugMode GetDebugMode() const
Definition Renderer.cpp:185
TextureRef mDefaultColorAlphaTexture
Definition Renderer.h:170
StaticMeshRef mSphereMesh
Definition Renderer.h:185
uint32_t GetBakeDiffuseIndirectPasses() const
Definition Renderer.cpp:2034
void SetGlobalUiScale(float scale)
Definition Renderer.cpp:333
uint32_t GetLightFadeLimit() const
Definition Renderer.cpp:1904
uint32_t GetFrameIndex() const
Definition Renderer.cpp:270
void DirtyAllWidgets()
Definition Renderer.cpp:399
StaticMeshRef mCubeMesh
Definition Renderer.h:182
BoundsDebugMode GetBoundsDebugMode() const
Definition Renderer.cpp:205
glm::vec2 GetScreenResolution(int32_t screen=-1)
Definition Renderer.cpp:299
uint32_t GetFrameNumber() const
Definition Renderer.cpp:265
TextureRef mDefaultNormalTexture
Definition Renderer.h:171
void SetResolutionScale(float scale)
Definition Renderer.cpp:1983
bool Is3dRenderingEnabled() const
Definition Renderer.cpp:225
void LoadDefaultMaterials()
Definition Renderer.cpp:443
void EnablePostProcessPass(PostProcessPassId passId, bool enable)
Definition Renderer.cpp:1972
void EndLightBake()
Definition Renderer.cpp:1874
StaticMeshRef mConeMesh
Definition Renderer.h:181
StaticMeshRef mPlaneMesh
Definition Renderer.h:184
TextureRef mBlackTexture
Definition Renderer.h:168
MaterialLite * GetDefaultMaterial()
Definition Renderer.cpp:255
TextureRef mWhiteTexture
Definition Renderer.h:167
float GetSelectedCheckerSize() const
Definition Renderer.cpp:1864
TextureRef mEnvironmentMap
Definition Renderer.h:175
World * GetCurrentWorld()
Definition Renderer.cpp:294
uint32_t GetMaxBounces() const
Definition Renderer.cpp:1999
uint32_t GetViewportHeight(int32_t screenIdx=-1)
Definition Renderer.cpp:2118
void EnableFrustumCulling(bool enable)
Definition Renderer.cpp:210
bool IsFrustumCullingEnabled() const
Definition Renderer.cpp:215
bool IsLightBakeInProgress() const
Definition Renderer.cpp:1879
float GetGlobalUiScale() const
Definition Renderer.cpp:328
float GetColorScaleInverse() const
Definition Renderer.cpp:1944
FontRef mRoboto32
Definition Renderer.h:190
StaticMeshRef mTorusMesh
Definition Renderer.h:187
glm::uvec4 GetViewport(int32_t screenIdx=-1)
Definition Renderer.cpp:2141
~Renderer()
Definition Renderer.cpp:87
uint32_t GetBakeRaysPerVertex() const
Definition Renderer.cpp:2009
Definition SmartPointer.h:33
Definition StatsOverlay.h:26
Definition Texture.h:10
Definition Widget.h:53
Definition World.h:24
Definition EngineTypes.h:224
Definition EngineTypes.h:343
Definition Renderer.h:25
float mDistance2
Definition Renderer.h:27
LightDistance2(Light3D *comp, float dist2)
Definition Renderer.h:29
Light3D * mComponent
Definition Renderer.h:26