UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ComponentReregisterContext.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "RenderingThread.h"
9#include "Engine/World.h"
10
12
18{
19protected:
21
22 //Unregisters the Component and returns the world it was registered to.
24
25 //Reregisters the given component on the given scene
27};
28
41{
42private:
47public:
49 : World(nullptr)
50 {
52
53 World = UnRegister(InComponent);
54 // If we didn't get a scene back NULL the component so we dont try to
55 // process it on destruction
56 Component = World.IsValid() ? InComponent : nullptr;
57 }
58
60 {
61 if( Component.IsValid() && World.IsValid() )
62 {
63 ReRegister(Component.Get(), World.Get());
64 }
65 }
66};
67
68
69/* Pairing of UActorComponent and its UWorld. Used only by FMultiComponentReregisterContext
70 * for tracking purposes
71 */
81
82
95{
96private:
99
100public:
102 {
103 // Unregister each component and cache resulting scene
105 {
107 if(World)
108 {
110 }
111 }
112 }
113
115 {
116 //Re-register each valid component pair that we unregistered in our constructor
117 for(auto Iter = ComponentsPair.CreateIterator(); Iter; ++Iter)
118 {
120 if(pair.Component)
121 {
122 ReRegister(pair.Component, pair.World);
123 }
124 }
125 }
126};
127
130{
131public:
136
143
146
149
150private:
153
154 TSet<FSceneInterface*> ScenesToUpdateAllPrimitiveSceneInfos;
155
156 void UpdateAllPrimitiveSceneInfos();
157};
158
160template<class ComponentType>
162{
163public:
166 {
167 // wait until resources are released
169
170 // Reregister all components of the templated type.
172 {
173 ComponentContexts.Add(new FComponentReregisterContext(*ComponentIt, &ScenesToUpdateAllPrimitiveSceneInfos));
174 }
175
176 UpdateAllPrimitiveSceneInfos();
177 }
178
180 {
181 UpdateAllPrimitiveSceneInfos();
182 }
183
184private:
187
188 TSet<FSceneInterface*> ScenesToUpdateAllPrimitiveSceneInfos;
189
190 void UpdateAllPrimitiveSceneInfos()
191 {
192 UpdateAllPrimitiveSceneInfosForScenes(MoveTemp(ScenesToUpdateAllPrimitiveSceneInfos));
193
194 check(ScenesToUpdateAllPrimitiveSceneInfos.Num() == 0);
195 }
196};
197
ENGINE_API void UpdateAllPrimitiveSceneInfosForScenes(TSet< FSceneInterface * > ScenesToUpdateAllPrimitiveSceneInfos)
Definition ActorComponent.cpp:337
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
void FlushRenderingCommands()
Definition RenderingThread.cpp:1272
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ComponentReregisterContext.h:18
ENGINE_API void ReRegister(UActorComponent *InComponent, UWorld *InWorld)
Definition ComponentReregisterContext.cpp:27
TSet< FSceneInterface * > * ScenesToUpdateAllPrimitiveSceneInfos
Definition ComponentReregisterContext.h:20
ENGINE_API UWorld * UnRegister(UActorComponent *InComponent)
Definition ComponentReregisterContext.cpp:6
Definition ComponentReregisterContext.h:41
FComponentReregisterContext(UActorComponent *InComponent, TSet< FSceneInterface * > *InScenesToUpdateAllPrimitiveSceneInfos=nullptr)
Definition ComponentReregisterContext.h:48
~FComponentReregisterContext()
Definition ComponentReregisterContext.h:59
Definition ComponentReregisterContext.h:130
ENGINE_API FGlobalComponentReregisterContext()
Definition ActorComponent.cpp:355
ENGINE_API ~FGlobalComponentReregisterContext()
Definition ActorComponent.cpp:402
static int32 ActiveGlobalReregisterContextCount
Definition ComponentReregisterContext.h:148
Definition ComponentReregisterContext.h:95
~FMultiComponentReregisterContext()
Definition ComponentReregisterContext.h:114
FMultiComponentReregisterContext(const TArray< UActorComponent * > &InComponents)
Definition ComponentReregisterContext.h:101
Definition Array.h:670
UE_NODEBUG TIterator CreateIterator()
Definition Array.h:3355
UE_NODEBUG UE_FORCEINLINE_HINT void Push(ElementType &&Item)
Definition Array.h:1224
Definition ComponentReregisterContext.h:162
TComponentReregisterContext()
Definition ComponentReregisterContext.h:165
~TComponentReregisterContext()
Definition ComponentReregisterContext.h:179
Definition IndirectArray.h:20
UE_FORCEINLINE_HINT int32 Add(T *Item)
Definition IndirectArray.h:374
Definition UObjectIterator.h:257
Definition ActorComponent.h:152
Definition World.h:918
Definition ComponentReregisterContext.h:73
UWorld * World
Definition ComponentReregisterContext.h:77
FMultiComponentReregisterPair(UActorComponent *_Component, UWorld *_World)
Definition ComponentReregisterContext.h:79
UActorComponent * Component
Definition ComponentReregisterContext.h:75
Definition WeakObjectPtrTemplates.h:25