Plasma Engine  2.0
Loading...
Searching...
No Matches
RenderData.h
1#pragma once
2
3#include <Foundation/Communication/Message.h>
4#include <Foundation/Math/BoundingBoxSphere.h>
5#include <Foundation/Math/Transform.h>
6#include <Foundation/Memory/FrameAllocator.h>
7#include <Foundation/Strings/HashedString.h>
8#include <RendererCore/Pipeline/Declarations.h>
9
11
13class PL_RENDERERCORE_DLL plRenderData : public plReflectedClass
14{
15 PL_ADD_DYNAMIC_REFLECTION(plRenderData, plReflectedClass);
16
17public:
18 struct Category
19 {
20 Category();
21 explicit Category(plUInt16 uiValue);
22
23 bool operator==(const Category& other) const;
24 bool operator!=(const Category& other) const;
25 bool IsValid() const { return m_uiValue != 0xFFFF; }
26
27 plUInt16 m_uiValue = 0xFFFF;
28 };
29
30 struct Caching
31 {
32 enum Enum
33 {
34 Never,
35 IfStatic
36 };
37 };
38
40 using SortingKeyFunc = plUInt64 (*)(const plRenderData*, const plCamera&);
41
42 static Category RegisterCategory(const char* szCategoryName, SortingKeyFunc sortingKeyFunc);
43 static Category FindCategory(plTempHashedString sCategoryName);
44
45 static void GetAllCategoryNames(plDynamicArray<plHashedString>& out_categoryNames);
46
47 static const plRenderer* GetCategoryRenderer(Category category, const plRTTI* pRenderDataType);
48
49 static plHashedString GetCategoryName(Category category);
50
51 plUInt64 GetCategorySortingKey(Category category, const plCamera& camera) const;
52
53 plTransform m_LastGlobalTransform = plTransform::MakeIdentity();
54 plTransform m_GlobalTransform = plTransform::MakeIdentity();
55 plBoundingBoxSphere m_GlobalBounds;
56
57 plUInt32 m_uiBatchId = 0;
58 plUInt32 m_uiSortingKey = 0;
59 float m_fSortingDepthOffset = 0.0f;
60
61 plGameObjectHandle m_hOwner;
62
63#if PL_ENABLED(PL_COMPILE_FOR_DEVELOPMENT)
64 const plGameObject* m_pOwner = nullptr;
65#endif
66
67private:
68 PL_MAKE_SUBSYSTEM_STARTUP_FRIEND(RendererCore, RenderData);
69
70 static void PluginEventHandler(const plPluginEvent& e);
71 static void UpdateRendererTypes();
72
73 static void CreateRendererInstances();
74 static void ClearRendererInstances();
75
76 struct CategoryData
77 {
78 plHashedString m_sName;
79 SortingKeyFunc m_sortingKeyFunc;
80
81 plHashTable<const plRTTI*, plUInt32> m_TypeToRendererIndex;
82 };
83
84 static plHybridArray<CategoryData, 32> s_CategoryData;
85
86 static plHybridArray<const plRTTI*, 16> s_RendererTypes;
87 static plDynamicArray<plUniquePtr<plRenderer>> s_RendererInstances;
88 static bool s_bRendererInstancesDirty;
89};
90
92template <typename T>
93static T* plCreateRenderDataForThisFrame(const plGameObject* pOwner);
94
95struct PL_RENDERERCORE_DLL plDefaultRenderDataCategories
96{
97 static plRenderData::Category Light;
98 static plRenderData::Category Decal;
99 static plRenderData::Category ReflectionProbe;
100 static plRenderData::Category Sky;
101 static plRenderData::Category LitOpaque;
102 static plRenderData::Category LitMasked;
103 static plRenderData::Category LitTransparent;
104 static plRenderData::Category LitForeground;
105 static plRenderData::Category LitScreenFX;
106 static plRenderData::Category SimpleOpaque;
107 static plRenderData::Category SimpleTransparent;
108 static plRenderData::Category SimpleForeground;
109 static plRenderData::Category Selection;
110 static plRenderData::Category GUI;
111};
112
113#define plInvalidRenderDataCategory plRenderData::Category()
114
115struct PL_RENDERERCORE_DLL plMsgExtractRenderData : public plMessage
116{
117 PL_DECLARE_MESSAGE_TYPE(plMsgExtractRenderData, plMessage);
118
119 const plView* m_pView = nullptr;
120 plRenderData::Category m_OverrideCategory = plInvalidRenderDataCategory;
121
125 void AddRenderData(const plRenderData* pRenderData, plRenderData::Category category, plRenderData::Caching::Enum cachingBehavior);
126
127private:
128 friend class plExtractor;
129
130 struct Data
131 {
132 const plRenderData* m_pRenderData = nullptr;
133 plUInt16 m_uiCategory = 0;
134 };
135
136 plHybridArray<Data, 16> m_ExtractedRenderData;
137 plUInt32 m_uiNumCacheIfStatic = 0;
138};
139
140struct PL_RENDERERCORE_DLL plMsgExtractOccluderData : public plMessage
141{
142 PL_DECLARE_MESSAGE_TYPE(plMsgExtractOccluderData, plMessage);
143
144 void AddOccluder(const plRasterizerObject* pObject, const plTransform& transform)
145 {
146 auto& d = m_ExtractedOccluderData.ExpandAndGetRef();
147 d.m_pObject = pObject;
148 d.m_Transform = transform;
149 }
150
151private:
152 friend class plRenderPipeline;
153
154 struct Data
155 {
156 const plRasterizerObject* m_pObject = nullptr;
157 plTransform m_Transform;
158 };
159
160 plHybridArray<Data, 16> m_ExtractedOccluderData;
161};
162
163#include <RendererCore/Pipeline/Implementation/RenderData_inl.h>
A camera class that stores the orientation and some basic camera settings.
Definition Camera.h:41
Definition DynamicArray.h:81
Definition Extractor.h:9
This class represents an object inside the world.
Definition GameObject.h:32
Definition HashTable.h:333
This class is optimized to take nearly no memory (sizeof(void*)) and to allow very fast checks whethe...
Definition HashedString.h:25
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Base class for all message types. Each message type has it's own id which is used to dispatch message...
Definition Message.h:22
This class holds information about reflected types. Each instance represents one type that is known t...
Definition RTTI.h:30
Definition RasterizerObject.h:13
All classes that should be dynamically reflectable, need to be derived from this base class.
Definition DynamicRTTI.h:86
Base class for all render data. Render data must contain all information that is needed to render the...
Definition RenderData.h:14
plUInt64(*)(const plRenderData *, const plCamera &) SortingKeyFunc
This function generates a 64bit sorting key for the given render data. Data with lower sorting key is...
Definition RenderData.h:40
Definition RenderPipeline.h:20
This is the base class for types that handle rendering of different object types.
Definition Renderer.h:9
A class to use together with plHashedString for quick comparisons with temporary strings that need no...
Definition HashedString.h:151
static plTransformTemplate< float > MakeIdentity()
Definition Transform_inl.h:25
Encapsulates a view on the given world through the given camera and rendered with the specified Rende...
Definition View.h:21
Definition RenderData.h:96
A handle to a game object.
Definition Declarations.h:76
Definition RenderData.h:141
Definition RenderData.h:116
The data that is broadcast whenever a plugin is (un-) loaded.
Definition Plugin.h:11
Definition RenderData.h:31
Definition RenderData.h:19