UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CustomRenderPass.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 CustomRenderPass.h: Custom render pass implementation.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
10#include "RenderGraphFwd.h"
11#include "Engine/EngineTypes.h"
12
13// ----------------------------------------------------------------------------------
16{
17public:
18 virtual ~ICustomRenderPass() {}
19
22};
23
26#define IMPLEMENT_CUSTOM_RENDER_PASS(TypeName) const FName& GetTypeName() const override { return GetTypeNameStatic(); } \
27 static const FName& GetTypeNameStatic() { static FName Name(TEXT(#TypeName)); return Name; }
28
29
30// ----------------------------------------------------------------------------------
39
42#define IMPLEMENT_CUSTOM_RENDER_PASS_USER_DATA(TypeName) const FName& GetTypeName() const override { return GetTypeNameStatic(); } \
43 static const FName& GetTypeNameStatic() { static FName Name(TEXT(#TypeName)); return Name; }
44
45
46// ----------------------------------------------------------------------------------
50{
51public:
52 friend class FSceneRenderer;
54
56 enum class ERenderMode : uint8
57 {
59 DepthPass,
61 DepthAndBasePass
62 };
63
65 enum class ERenderOutput : uint8
66 {
69 DeviceDepth,
71 SceneColorAndDepth,
72 SceneColorAndAlpha, // The alpha is inverted opacity (throughput).
73 SceneColorNoAlpha,
75 Normal,
76 MAX
77 };
78
80 {
82 NoCapture,
84 Capture,
86 BeginCapture,
88 EndCapture,
89 };
90
93
95
97 ENGINE_API void BeginPass(FRDGBuilder& GraphBuilder);
99 ENGINE_API void PreRender(FRDGBuilder& GraphBuilder);
101 ENGINE_API void PostRender(FRDGBuilder& GraphBuilder);
103 ENGINE_API void EndPass(FRDGBuilder& GraphBuilder);
104
107 ENGINE_API ESceneCaptureSource GetSceneCaptureSource() const;
108
110 ENGINE_API void PerformRenderCapture(ERenderCaptureType InRenderCaptureType, const FString& InFileName = FString());
111
112 const FString& GetDebugName() const { return DebugName; }
113 ERenderMode GetRenderMode() const { return RenderMode; }
114 ERenderOutput GetRenderOutput() const { return RenderOutput; }
115 FRDGTextureRef GetRenderTargetTexture() const { return RenderTargetTexture; }
116 const FIntPoint& GetRenderTargetSize() const { return RenderTargetSize; }
117
120 {
121 return bSceneColorWithTranslucent &&
125 bSceneColorIsUserSceneTexture);
126 }
127
129 ENGINE_API ICustomRenderPassUserData* GetUserData(const FName& InTypeName) const;
130
131 template <typename UserDataType>
133 {
134 if (ICustomRenderPassUserData* UserData = GetUserData(UserDataType::GetTypeNameStatic()))
135 {
136 return reinterpret_cast<UserDataType*>(UserData);
137 }
138 return nullptr;
139 }
140
141protected:
142 virtual void OnBeginPass(FRDGBuilder& GraphBuilder) {}
143 virtual void OnPreRender(FRDGBuilder& GraphBuilder) {}
144 virtual void OnPostRender(FRDGBuilder& GraphBuilder) {}
145 virtual void OnEndPass(FRDGBuilder& GraphBuilder) {}
146
152
153protected:
154 FString DebugName;
155 ERenderMode RenderMode = ERenderMode::DepthPass;
156 ERenderOutput RenderOutput = ERenderOutput::SceneDepth;
157 bool bSceneColorWithTranslucent = false;
158
159 // If the SceneColor generated by this Custom Render Pass is referenced as a UserSceneTexture, translucency should render if enabled,
160 // even if RenderOutput is not SceneColor. Otherwise, translucency is disabled with the assumption it's wasteful to render translucency
161 // to a SceneColor buffer that's not used. See IsTranslucentIncluded() function above.
162 bool bSceneColorIsUserSceneTexture = false;
163
164 FRDGTextureRef RenderTargetTexture = nullptr;
165 FIntPoint RenderTargetSize = FIntPoint(ForceInit);
166
169
174
175private:
176 ERenderCaptureType RenderCaptureType = ERenderCaptureType::NoCapture;
177 FString RenderCaptureFileName;
178};
@ Normal
Definition AndroidInputInterface.h:116
FString GetTypeName()
Definition Casts.h:66
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
@ ForceInit
Definition CoreMiscDefines.h:155
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
ESceneCaptureSource
Definition EngineTypes.h:532
FInt32Point FIntPoint
Definition MathFwd.h:124
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition CustomRenderPass.h:50
ERenderOutput GetRenderOutput() const
Definition CustomRenderPass.h:114
TEnableIf< TPointerIsConvertibleFromTo< UserDataType, ICustomRenderPassUserData >::Value, UserDataType >::Type * GetUserDataTyped() const
Definition CustomRenderPass.h:132
ERenderOutput
Definition CustomRenderPass.h:66
TArray< class FViewInfo * > Views
Definition CustomRenderPass.h:168
TMap< FName, TUniquePtr< ICustomRenderPassUserData > > UserDatas
Definition CustomRenderPass.h:173
ERenderMode GetRenderMode() const
Definition CustomRenderPass.h:113
ERenderCaptureType
Definition CustomRenderPass.h:80
virtual void OnBeginPass(FRDGBuilder &GraphBuilder)
Definition CustomRenderPass.h:142
FRDGTextureRef GetRenderTargetTexture() const
Definition CustomRenderPass.h:115
virtual void OnPostRender(FRDGBuilder &GraphBuilder)
Definition CustomRenderPass.h:144
FCustomRenderPassBase()=delete
FString DebugName
Definition CustomRenderPass.h:154
ERenderMode
Definition CustomRenderPass.h:57
virtual void OnPreRender(FRDGBuilder &GraphBuilder)
Definition CustomRenderPass.h:143
virtual ~FCustomRenderPassBase()
Definition CustomRenderPass.h:94
const FIntPoint & GetRenderTargetSize() const
Definition CustomRenderPass.h:116
bool IsTranslucentIncluded() const
Definition CustomRenderPass.h:119
void OverrideRenderOutput(ERenderOutput InRenderOutput)
Definition CustomRenderPass.h:148
const FString & GetDebugName() const
Definition CustomRenderPass.h:112
virtual void OnEndPass(FRDGBuilder &GraphBuilder)
Definition CustomRenderPass.h:145
Definition DeferredShadingRenderer.h:317
Definition NameTypes.h:617
Definition RenderGraphBuilder.h:49
Definition RenderGraphResources.h:571
Definition SceneRendering.h:2080
Definition CustomRenderPass.h:33
virtual ~ICustomRenderPassUserData()
Definition CustomRenderPass.h:35
Definition CustomRenderPass.h:16
virtual const FName &GetTypeName() const PURE_VIRTUAL(ICustomRenderPass return Name
Definition CustomRenderPass.h:21
virtual ~ICustomRenderPass()
Definition CustomRenderPass.h:18
Definition Array.h:670
Definition EnableIf.h:20
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition IntPoint.h:25