130 return *GlobalRegistry;
159 template<
typename TDerivedExtension>
162 const int32 Index = TDerivedExtension::GetExtensionID();
170 template<
typename TDerivedExtension>
176 template<
typename TDerivedExtension>
180 check(Extension !=
nullptr);
184 template<
typename TDerivedExtension>
190 template<
typename TFunc>
193 for(
auto Ext : Extensions)
217 template<
typename TUpdater>
220 const int32 Index = TUpdater::FExtension::GetExtensionID();
223 template<
typename TUpdater>
225 template<
typename TUpdater>
232 template<
typename TUpdater>
258 for (
auto Updater : Updaters) {
Updater->PostGPUSceneUpdate(GraphBuilder, SceneUniforms); }
279 template<
typename TRenderer>
282 const int32 Index = TRenderer::FExtension::GetExtensionID();
285 template<
typename TRenderer>
287 template<
typename TRenderer>
294 template<
typename TRenderer>
302 ValidateAdvanceCallbackStage(ECallbackStage::PreInitViews);
308 ValidateAdvanceCallbackStage(ECallbackStage::UpdateViewData);
311 Renderer->UpdateViewData(GraphBuilder, ViewDataManager);
317 ValidateAdvanceCallbackStage(ECallbackStage::UpdateSceneUniformBuffer);
318 for (
auto Renderer : Renderers) {
Renderer->UpdateSceneUniformBuffer(GraphBuilder, SceneUniforms); }
323 ValidateAdvanceCallbackStage(ECallbackStage::PreRender);
329 ValidateAdvanceCallbackStage(ECallbackStage::PostRender);
336 bool bValidateCallbacks =
false;
338 enum class ECallbackStage :
int32
343 UpdateSceneUniformBuffer,
348 ECallbackStage CurrentCallbackStage = ECallbackStage::Begin;
362template<
typename TDerivedExtension>
375 if (!TDerivedExtension::ShouldCreateExtension(
Scene))
384#define DECLARE_SCENE_EXTENSION(ModuleExport, ClassName) \
386 ModuleExport static int32 GetExtensionID() { return ExtensionRegistration.GetExtensionID(); } \
388 ModuleExport static TSceneExtensionRegistration<ClassName> ExtensionRegistration
390#define DECLARE_SCENE_EXTENSION_UPDATER(ClassName, SceneExtensionClassName) \
392 using FExtension = SceneExtensionClassName
394#define DECLARE_SCENE_EXTENSION_RENDERER(ClassName, SceneExtensionClassName) \
396 using FExtension = SceneExtensionClassName
399#define IMPLEMENT_SCENE_EXTENSION(ClassName) \
400 TSceneExtensionRegistration<ClassName> ClassName::ExtensionRegistration
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
Definition RenderGraphBuilder.h:49
Definition SceneExtensions.h:125
int32 GetMaxRegistrationID() const
Definition SceneExtensions.h:133
static FSceneExtensionRegistry & Get()
Definition SceneExtensions.h:127
RENDERER_API void Register(ISceneExtensionFactory &Factory)
Definition SceneExtensions.cpp:19
TSparseArray< ISceneExtension * > CreateExtensions(FScene &Scene)
Definition SceneExtensions.cpp:25
Definition SceneExtensions.h:268
void End()
Definition SceneExtensions.cpp:132
TRenderer * GetRendererPtr()
Definition SceneExtensions.h:280
~FSceneExtensionsRenderers()
Definition SceneExtensions.h:273
void UpdateViewData(FRDGBuilder &GraphBuilder, const FRendererViewDataManager &ViewDataManager)
Definition SceneExtensions.h:306
bool IsRendering() const
Definition SceneExtensions.h:277
void PreRender(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:321
TRenderer & GetRenderer()
Definition SceneExtensions.h:288
const TRenderer & GetRenderer() const
Definition SceneExtensions.h:295
const TRenderer * GetRendererPtr() const
Definition SceneExtensions.h:286
void PreInitViews(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:300
FSceneExtensionsRenderers()
Definition SceneExtensions.h:272
void PostRender(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:327
void UpdateSceneUniformBuffer(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:315
Definition SceneExtensions.h:205
TUpdater & GetUpdater()
Definition SceneExtensions.h:226
TUpdater * GetUpdaterPtr()
Definition SceneExtensions.h:218
void PostSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ChangeSet)
Definition SceneExtensions.h:251
FSceneExtensionsUpdaters(FScene &InScene)
Definition SceneExtensions.h:210
bool IsUpdating() const
Definition SceneExtensions.h:215
FSceneExtensionsUpdaters()
Definition SceneExtensions.h:209
const TUpdater & GetUpdater() const
Definition SceneExtensions.h:233
void PostGPUSceneUpdate(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:256
void End()
Definition SceneExtensions.cpp:104
void PreSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ChangeSet, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:246
void PostLightsUpdate(FRDGBuilder &GraphBuilder, const FLightSceneChangeSet &LightSceneChangeSet)
Definition SceneExtensions.h:241
~FSceneExtensionsUpdaters()
Definition SceneExtensions.h:211
const TUpdater * GetUpdaterPtr() const
Definition SceneExtensions.h:224
void PreLightsUpdate(FRDGBuilder &GraphBuilder, const FLightSceneChangeSet &LightSceneChangeSet)
Definition SceneExtensions.h:236
Definition SceneExtensions.h:147
TDerivedExtension * GetExtensionPtr()
Definition SceneExtensions.h:160
~FSceneExtensions()
Definition SceneExtensions.h:152
void ForEachExtension(const TFunc &F)
Definition SceneExtensions.h:191
TSparseArray< ISceneExtensionUpdater *, SceneRenderingSparseArrayAllocator > FUpdaterList
Definition SceneExtensions.h:149
TDerivedExtension & GetExtension()
Definition SceneExtensions.h:177
TSparseArray< ISceneExtensionRenderer *, SceneRenderingSparseArrayAllocator > FRendererList
Definition SceneExtensions.h:150
void CreateRenderers(FSceneRendererBase &InSceneRenderer, const FEngineShowFlags &EngineShowFlags, FRendererList &OutRenderers)
Definition SceneExtensions.cpp:77
const TDerivedExtension * GetExtensionPtr() const
Definition SceneExtensions.h:171
void Reset()
Definition SceneExtensions.cpp:54
const TDerivedExtension & GetExtension() const
Definition SceneExtensions.h:185
void CreateUpdaters(FUpdaterList &OutUpdaters)
Definition SceneExtensions.cpp:63
Definition ScenePrimitiveUpdates.h:129
Definition ScenePrimitiveUpdates.h:116
Definition SceneRendering.h:2023
Definition ScenePrivate.h:2875
Definition SceneExtensions.h:110
virtual ~ISceneExtensionFactory()
Definition SceneExtensions.h:114
const int32 GetExtensionID() const
Definition SceneExtensions.h:117
virtual ISceneExtension * CreateInstance(FScene &Scene)=0
Definition SceneExtensions.h:69
virtual void UpdateSceneUniformBuffer(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:89
ISceneExtensionRenderer(FSceneRendererBase &InSceneRenderer)
Definition SceneExtensions.h:71
virtual void UpdateViewData(FRDGBuilder &GraphBuilder, const FRendererViewDataManager &ViewDataManager)
Definition SceneExtensions.h:86
FSceneRendererBase & GetSceneRenderer()
Definition SceneExtensions.h:102
virtual void PreInitViews(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:80
virtual void PostRender(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:99
virtual void Begin(FSceneRendererBase *InRenderer)
Definition SceneExtensions.h:74
virtual void PreRender(FRDGBuilder &GraphBuilder)
Definition SceneExtensions.h:94
virtual ~ISceneExtensionRenderer()
Definition SceneExtensions.h:72
virtual void End()
Definition SceneExtensions.h:75
Definition SceneExtensions.h:45
virtual void PostSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ChangeSet)
Definition SceneExtensions.h:63
virtual void PostLightsUpdate(FRDGBuilder &GraphBuilder, const FLightSceneChangeSet &LightSceneChangeSet)
Definition SceneExtensions.h:55
virtual void End()
Definition SceneExtensions.h:50
virtual void PreSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ChangeSet, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:61
virtual void PostGPUSceneUpdate(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniforms)
Definition SceneExtensions.h:64
virtual ~ISceneExtensionUpdater()
Definition SceneExtensions.h:47
virtual void PreLightsUpdate(FRDGBuilder &GraphBuilder, const FLightSceneChangeSet &LightSceneChangeSet)
Definition SceneExtensions.h:56
virtual void Begin(FScene &InScene)
Definition SceneExtensions.h:49
Definition SceneExtensions.h:24
static bool ShouldCreateExtension(FScene &Scene)
Definition SceneExtensions.h:27
virtual ~ISceneExtension()
Definition SceneExtensions.h:30
virtual ISceneExtensionUpdater * CreateUpdater()
Definition SceneExtensions.h:36
virtual void InitExtension(FScene &InScene)
Definition SceneExtensions.h:35
ISceneExtension(FScene &InScene)
Definition SceneExtensions.h:29
FScene & Scene
Definition SceneExtensions.h:40
virtual ISceneExtensionRenderer * CreateRenderer(FSceneRendererBase &InSceneRenderer, const FEngineShowFlags &EngineShowFlags)
Definition SceneExtensions.h:37
Definition Renderer.Build.cs:6
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition SceneExtensions.h:364
virtual ISceneExtension * CreateInstance(FScene &Scene) override
Definition SceneExtensions.h:373
virtual ~TSceneExtensionRegistration()
Definition SceneExtensions.h:371
TSceneExtensionRegistration()
Definition SceneExtensions.h:366
bool IsValidIndex(int32 Index) const
Definition SparseArray.h:481
Definition SparseArray.h:524
U16 Index
Definition radfft.cpp:71
Definition ShowFlags.h:56
Definition ScenePrivate.h:2850