UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ODSCManager.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"
6#include "Containers/Ticker.h"
7#include "RHIDefinitions.h"
8#include "Containers/Ticker.h"
9#include "ShaderCompiler.h"
10
11class FODSCThread;
16
22 : public FTSTickerObjectBase
23{
24public:
25
26 // FODSCManager
27
32
36 ENGINE_API virtual ~FODSCManager();
37
38 // FTSTickerObjectBase
39
47 ENGINE_API bool Tick(float DeltaSeconds) override;
48
60 const FString& ShaderTypesToLoad,
61 EShaderPlatform ShaderPlatform,
62 ERHIFeatureLevel::Type FeatureLevel,
63 EMaterialQualityLevel::Type QualityLevel,
64 ODSCRecompileCommand RecompileCommandType,
65 const FString& RequestedMaterialName = FString(),
66 const FShaderCompilerFlags& ExtraCompilerFlags = FShaderCompilerFlags()
67 );
68
84 EShaderPlatform ShaderPlatform,
85 ERHIFeatureLevel::Type FeatureLevel,
86 EMaterialQualityLevel::Type QualityLevel,
87 const FMaterial* Material,
88 const FString& VertexFactoryName,
89 const FString& PipelineName,
90 const TArray<FString>& ShaderTypeNames,
91 int32 PermutationId,
93 );
94
95 UE_DEPRECATED(5.5, "RequestShaderIds is needed for AddThreadedShaderPipelineRequest and need to match the ones from FMaterialShaderMap::GetShaderList")
97 EShaderPlatform ShaderPlatform,
98 ERHIFeatureLevel::Type FeatureLevel,
99 EMaterialQualityLevel::Type QualityLevel,
100 const FString& MaterialName,
101 const FString& VertexFactoryName,
102 const FString& PipelineName,
103 const TArray<FString>& ShaderTypeNames,
104 int32 PermutationId
105 ) {}
106
108 inline bool IsHandlingRequests() const { return Thread != nullptr; }
109
110 static void RegisterMaterialInstance(const UMaterialInstance* MI);
111 static void UnregisterMaterialInstance(const UMaterialInstance* MI);
112
114 static ENGINE_API bool IsODSCEnabled();
115
117 static inline bool IsODSCActive();
118 static inline bool ShouldForceRecompile(const FMaterialShaderMap* MaterialShaderMap, const FMaterial* Material);
119
120 static void SuspendODSCForceRecompile();
121 static void ResumeODSCForceRecompile();
122 void TryLoadGlobalShaders(EShaderPlatform ShaderPlatform);
123
124 static void ReportODSCError(const FString& InErrorMessage);
125 static bool UseDefaultMaterialOnRecompile();
126
128
129 static void UnregisterMaterialName(const FMaterial* Material);
130 static void RegisterMaterialShaderMaps(const FString& MaterialName, const TArray<TRefCountPtr<FMaterialShaderMap>>& LoadedShaderMaps);
131 static FMaterialShaderMap* FindMaterialShaderMap(const FString& MaterialName, const FMaterialShaderMapId& ShaderMapId);
132 ENGINE_API static void SetCurrentPrimitiveSceneInfo(FPrimitiveSceneInfo* PrimitiveSceneInfo);
134
135private:
136 friend class FODSCManagerAccess;
137
138 ENGINE_API void OnEnginePreExit();
139 ENGINE_API void StopThread();
140
141 bool HasAsyncLoadingInstances();
142 bool ShouldForceRecompileInternal(const FMaterialShaderMap* MaterialShaderMap, const FMaterial* Material);
143
144 void RetrieveErrorMessage(FString& OutErrorMessage);
145 void ClearErrorMessage();
146
148 FODSCThread* Thread = nullptr;
149
150 FDelegateHandle OnScreenMessagesHandle;
151 FCriticalSection MaterialInstancesCachedUniformExpressionsCS;
152 TMap<const void*, TWeakObjectPtr<const UMaterialInstance> > MaterialInstancesCachedUniformExpressions;
153
154 FCriticalSection ErrorMessageCS;
155 FString ErrorMessage;
156
157 FName MaterialNameToRecompile;
158};
159
172
185
188
193
194inline bool FODSCManager::ShouldForceRecompile(const FMaterialShaderMap* MaterialShaderMap, const FMaterial* Material)
195{
196 return FODSCManager::IsODSCActive() && GODSCManager->ShouldForceRecompileInternal(MaterialShaderMap, Material);
197}
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
ENGINE_API FODSCManager * GODSCManager
Definition ODSCManager.cpp:47
EShaderPlatform
Definition RHIShaderPlatform.h:11
ODSCRecompileCommand
Definition ShaderCompiler.h:1469
Definition IDelegateInstance.h:14
Definition MaterialShared.h:1194
Definition MaterialShared.h:1518
Definition MaterialShared.h:2058
Definition NameTypes.h:617
Definition ODSCManager.cpp:50
Definition ODSCManager.h:23
ENGINE_API void AddThreadedShaderPipelineRequest(EShaderPlatform ShaderPlatform, ERHIFeatureLevel::Type FeatureLevel, EMaterialQualityLevel::Type QualityLevel, const FMaterial *Material, const FString &VertexFactoryName, const FString &PipelineName, const TArray< FString > &ShaderTypeNames, int32 PermutationId, const TArray< FShaderId > &RequestShaderIds)
Definition ODSCManager.cpp:253
static FMaterialShaderMap * FindMaterialShaderMap(const FString &MaterialName, const FMaterialShaderMapId &ShaderMapId)
Definition ODSCManager.cpp:425
static void RegisterMaterialShaderMaps(const FString &MaterialName, const TArray< TRefCountPtr< FMaterialShaderMap > > &LoadedShaderMaps)
Definition ODSCManager.cpp:417
static bool IsODSCActive()
Definition ODSCManager.h:189
static ENGINE_API bool IsODSCEnabled()
Definition ODSCManager.cpp:273
bool CheckIfRequestAlreadySent(const TArray< FShaderId > &RequestShaderIds, const FMaterial *Material) const
Definition ODSCManager.cpp:400
static void RegisterMaterialInstance(const UMaterialInstance *MI)
Definition ODSCManager.cpp:285
static void ResumeODSCForceRecompile()
Definition ODSCManager.cpp:334
ENGINE_API void AddThreadedRequest(const TArray< FString > &MaterialsToCompile, const FString &ShaderTypesToLoad, EShaderPlatform ShaderPlatform, ERHIFeatureLevel::Type FeatureLevel, EMaterialQualityLevel::Type QualityLevel, ODSCRecompileCommand RecompileCommandType, const FString &RequestedMaterialName=FString(), const FShaderCompilerFlags &ExtraCompilerFlags=FShaderCompilerFlags())
Definition ODSCManager.cpp:215
static void UnregisterMaterialInstance(const UMaterialInstance *MI)
Definition ODSCManager.cpp:295
virtual ENGINE_API ~FODSCManager()
Definition ODSCManager.cpp:157
bool IsHandlingRequests() const
Definition ODSCManager.h:108
static ENGINE_API void SetCurrentPrimitiveSceneInfo(FPrimitiveSceneInfo *PrimitiveSceneInfo)
Definition ODSCManager.cpp:85
ENGINE_API FODSCManager()
Definition ODSCManager.cpp:99
static bool UseDefaultMaterialOnRecompile()
Definition ODSCManager.cpp:463
static ENGINE_API void ResetCurrentPrimitiveSceneInfo()
Definition ODSCManager.cpp:92
static void UnregisterMaterialName(const FMaterial *Material)
Definition ODSCManager.cpp:409
static void ReportODSCError(const FString &InErrorMessage)
Definition ODSCManager.cpp:453
static void SuspendODSCForceRecompile()
Definition ODSCManager.cpp:326
void TryLoadGlobalShaders(EShaderPlatform ShaderPlatform)
Definition ODSCManager.cpp:434
static bool ShouldForceRecompile(const FMaterialShaderMap *MaterialShaderMap, const FMaterial *Material)
Definition ODSCManager.h:194
Definition ODSCThread.h:105
Definition PrimitiveSceneInfo.h:266
Definition ShaderCore.h:402
Definition Ticker.h:137
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition MaterialInstance.h:627
Definition DebugViewModeHelpers.h:17
Type
Definition SceneTypes.h:132
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
Definition ODSCManager.h:161
~FODSCPrimitiveSceneInfoScope()
Definition ODSCManager.h:167
FODSCPrimitiveSceneInfoScope(FPrimitiveSceneInfo *PrimitiveSceneInfo)
Definition ODSCManager.h:162
Definition ODSCManager.h:174
~FODSCSuspendForceRecompileScope()
Definition ODSCManager.h:180
FODSCSuspendForceRecompileScope()
Definition ODSCManager.h:175