UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ScreenPass.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6{
7 Extent = FIntPoint::DivideAndRoundUp(Extent, Divisor);
8 Extent.X = FMath::Max(1, Extent.X);
9 Extent.Y = FMath::Max(1, Extent.Y);
10 return Extent;
11}
12
14{
15 Extent.X *= Multiplier.X;
16 Extent.Y *= Multiplier.Y;
17 Extent.X = FMath::Max(1, Extent.X);
18 Extent.Y = FMath::Max(1, Extent.Y);
19 return Extent;
20}
21
23{
24 return GetScaledExtent(Extent, FVector2D(Multiplier));
25}
26
28{
29 Rect.Min /= Divisor;
30 Rect.Max = GetDownscaledExtent(Rect.Max, Divisor);
31 return Rect;
32}
33
34// The normal GetDownscaledRect can produce overlapping rects where multiple viewports are present, because the Min rounds down, while the
35// Max rounds up. This variation rounds up for the far edges of the viewport, but rounds down for everything else, avoiding this issue.
37{
38 Rect.Min /= Divisor;
39 Rect.Max.X = (Rect.Max.X == ViewExtent.X) ? FMath::DivideAndRoundUp(ViewExtent.X, Divisor.X) : Rect.Max.X / Divisor.X;
40 Rect.Max.Y = (Rect.Max.Y == ViewExtent.Y) ? FMath::DivideAndRoundUp(ViewExtent.Y, Divisor.Y) : Rect.Max.Y / Divisor.Y;
41 Rect.Max = Rect.Max.ComponentMax(Rect.Min + FIntPoint(1, 1));
42 return Rect;
43}
44
46{
47 Rect.Min.X *= Multiplier.X;
48 Rect.Min.Y *= Multiplier.Y;
50 return Rect;
51}
52
57
59{
60 Viewport.Rect = GetDownscaledRect(Viewport.Rect, Divisor);
61 Viewport.Extent = GetDownscaledExtent(Viewport.Extent, Divisor);
62 return Viewport;
63}
64
66{
67 Viewport.Rect = GetScaledRect(Viewport.Rect, Multiplier);
68 Viewport.Extent = GetScaledExtent(Viewport.Extent, Multiplier);
69 return Viewport;
70}
71
73{
74 return FIntRect(FIntPoint::ZeroValue, Extent);
75}
76
85
93
100
103 , ViewRect(ScreenTexture.ViewRect)
104{
106 {
107 check(ScreenTexture.TextureSRV->Desc.FirstArraySlice == 0);
108 check(ScreenTexture.TextureSRV->Desc.NumArraySlices == 1);
109 }
110
112}
113
115{
116 return Texture != nullptr && !ViewRect.IsEmpty();
117}
118
120{
121 return Texture == Other.Texture && ViewRect == Other.ViewRect;
122}
123
125{
126 return !(*this == Other);
127}
128
138
140{
141 return TextureSRV != nullptr && !ViewRect.IsEmpty();
142}
143
145{
146 return TextureSRV == Other.TextureSRV && ViewRect == Other.ViewRect;
147}
148
150{
151 return !(*this == Other);
152}
153
158
160{
161 return !(*this == Other);
162}
163
168
170{
171 check(InTexture.IsValid());
172 Extent = InTexture.Texture->Desc.Extent;
173 Rect = InTexture.ViewRect;
174}
175
177{
178 check(InTexture.IsValid());
179 Extent = InTexture.TextureSRV->Desc.Texture->Desc.Extent;
180 Rect = InTexture.ViewRect;
181}
182
184{
185 return Extent == Other.Extent && Rect == Other.Rect;
186}
187
189{
190 return Extent != Other.Extent || Rect != Other.Rect;
191}
192
194{
195 return Extent == FIntPoint::ZeroValue || Rect.IsEmpty();
196}
197
199{
200 return Rect.Min == FIntPoint::ZeroValue && Rect.Max == Extent;
201}
202
204{
205 return FVector2D((float)Rect.Width() / Extent.X, (float)Rect.Height() / Extent.Y);
206}
207
209{
212
213 float InvX = 1.0f / AToB.Scale.X;
214 float InvY = 1.0f / AToB.Scale.Y;
215
216 return FScreenTransform(
218 FVector2f(-InvX * AToB.Bias.X, -InvY * AToB.Bias.Y));
219}
220
221
223{
224 return PInA * AToB.Scale + AToB.Bias;
225}
226
228{
229 return FScreenTransform(AToB.Scale * Scale, AToB.Bias * Scale);
230}
231
233{
234 return FScreenTransform(AToB.Scale * Scale, AToB.Bias * Scale);
235}
236
238{
239 return AToB * FVector2f(Scale.X, Scale.Y);
240}
241
243{
244 return FScreenTransform(AToB.Scale * BToC.Scale, AToB.Bias * BToC.Scale + BToC.Bias);
245}
246
247
249{
250 return FScreenTransform(AToB.Scale, AToB.Bias + Bias);
251}
252
253inline FScreenTransform operator + (const FScreenTransform& AToB, const float& Bias)
254{
255 return AToB + FVector2f(Bias, Bias);
256}
257
259{
260 return AToB + FVector2f(Bias.X, Bias.Y);
261}
262
263
265{
266 return FScreenTransform(AToB.Scale, AToB.Bias - Bias);
267}
268
269inline FScreenTransform operator - (const FScreenTransform& AToB, const float& Bias)
270{
271 return AToB - FVector2f(Bias, Bias);
272}
273
275{
276 return AToB - FVector2f(Bias.X, Bias.Y);
277}
278
279
286
291
296
302
303
305 const FIntPoint& TextureExtent,
309{
311 {
312 if (int32(SrcBasis) + 1 != int32(DestBasis))
313 {
315
316 return (
319 }
321 {
323 }
325 {
326 return FScreenTransform(
327 FVector2f(TextureViewport.Width(), TextureViewport.Height()),
329 }
331 {
332 return FScreenTransform(FVector2f(1.0f / float(TextureExtent.X), 1.0f / float(TextureExtent.Y)), FVector2f(0.0f, 0.0f));
333 }
334 else
335 {
336 check(0);
337 }
338 }
339 else if (int32(SrcBasis) > int32(DestBasis))
340 {
341 if (int32(SrcBasis) != int32(DestBasis) + 1)
342 {
344
345 return (
348 }
350 {
352 }
354 {
355 float InvWidth = 1.0f / float(TextureViewport.Width());
356 float InvHeight = 1.0f / float(TextureViewport.Height());
357
358 return FScreenTransform(
361 }
363 {
364 return FScreenTransform(FVector2f(TextureExtent.X, TextureExtent.Y), FVector2f(0.0f, 0.0f));
365 }
366 else
367 {
368 check(0);
369 }
370 }
371
373}
374
376 FVector2f SourceOffset,
378 FVector2f DestinationOffset,
380{
383 Transform.Bias = DestinationOffset - Transform.Scale * SourceOffset;
384 return Transform;
385}
386
393
394template<>
396{
398 static constexpr int32 NumRows = 1;
399 static constexpr int32 NumColumns = 4;
400 static constexpr int32 NumElements = 0;
401 static constexpr int32 Alignment = 16;
402 static constexpr bool bIsStoredInConstantBuffer = true;
403
405
406 static const FShaderParametersMetadata* GetStructMetadata() { return nullptr; }
407};
408
417
#define check(expr)
Definition AssertionMacros.h:314
#define ensure( InExpression)
Definition AssertionMacros.h:464
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::Math::TIntRect< int32 > FIntRect
Definition MathFwd.h:133
UE::Math::TVector2< float > FVector2f
Definition MathFwd.h:74
UE::Math::TVector2< double > FVector2D
Definition MathFwd.h:48
EUniformBufferBaseType
Definition RHIDefinitions.h:634
@ UBMT_FLOAT32
Definition RHIDefinitions.h:644
FScreenPassTextureViewportParameters GetScreenPassTextureViewportParameters(const FScreenPassTextureViewport &InViewport)
Definition ScreenPass.cpp:185
FVector2f operator*(const FVector2f &PInA, const FScreenTransform &AToB)
Definition ScreenPass.inl:222
FIntRect GetDownscaledRect(FIntRect Rect, FIntPoint Divisor)
Definition ScreenPass.inl:27
FScreenTransform operator/(const FScreenTransform &AToB, const FVector2f &InvertedScale)
Definition ScreenPass.inl:280
FIntPoint GetDownscaledExtent(FIntPoint Extent, FIntPoint Divisor)
Definition ScreenPass.inl:5
FScreenPassTextureViewport GetDownscaledViewport(FScreenPassTextureViewport Viewport, FIntPoint Divisor)
Definition ScreenPass.inl:58
FIntPoint GetScaledExtent(FIntPoint Extent, FVector2D Multiplier)
Definition ScreenPass.inl:13
FScreenPassTextureInput GetScreenPassTextureInput(FScreenPassTexture TexturePair, FRHISamplerState *Sampler)
Definition ScreenPass.inl:409
FIntRect GetDownscaledViewRect(FIntRect Rect, FIntPoint ViewExtent, FIntPoint Divisor)
Definition ScreenPass.inl:36
FIntRect GetScaledRect(FIntRect Rect, FVector2D Multiplier)
Definition ScreenPass.inl:45
FScreenTransform operator-(const FScreenTransform &AToB, const FVector2f &Bias)
Definition ScreenPass.inl:264
FScreenTransform operator+(const FScreenTransform &AToB, const FVector2f &Bias)
Definition ScreenPass.inl:248
FIntRect GetRectFromExtent(FIntPoint Extent)
Definition ScreenPass.inl:72
FScreenPassTextureViewport GetScaledViewport(FScreenPassTextureViewport Viewport, FVector2D Multiplier)
Definition ScreenPass.inl:65
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
@ Multiplier
FRDGTextureRef Texture
Definition RenderGraphResources.h:833
Definition RenderGraphResources.h:839
const FRDGTextureSRVDesc Desc
Definition RenderGraphResources.h:844
Definition RenderGraphResources.h:571
void EncloseVisualizeExtent(const FIntPoint &Point)
Definition RenderGraphResources.h:681
const FRDGTextureDesc Desc
Definition RenderGraphResources.h:575
Definition RHIResources.h:671
Definition ScreenPass.h:136
bool operator!=(const FScreenPassTextureViewport &Other) const
Definition ScreenPass.inl:188
FScreenPassTextureViewport()=default
FIntPoint Extent
Definition ScreenPass.h:179
bool operator==(const FScreenPassTextureViewport &Other) const
Definition ScreenPass.inl:183
FIntRect Rect
Definition ScreenPass.h:182
FVector2D GetRectToExtentRatio() const
Definition ScreenPass.inl:203
bool IsEmpty() const
Definition ScreenPass.inl:193
bool IsFullscreen() const
Definition ScreenPass.inl:198
Definition ShaderParameterMetadata.h:136
Definition ShaderParameterMacros.h:36
static constexpr UE_FORCEINLINE_HINT T DivideAndRoundUp(T Dividend, T Divisor)
Definition UnrealMathUtility.h:694
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
bool IsTextureArray() const
Definition RHIResources.h:1805
uint16 NumArraySlices
Definition RHIResources.h:5605
Definition ShaderParameterMacros.h:525
Definition ScreenPass.h:83
bool operator!=(FScreenPassRenderTarget Other) const
Definition ScreenPass.inl:159
ERenderTargetLoadAction LoadAction
Definition ScreenPass.h:131
bool operator==(FScreenPassRenderTarget Other) const
Definition ScreenPass.inl:154
FRenderTargetBinding GetRenderTargetBinding() const
Definition ScreenPass.inl:164
Definition ScreenPass.h:65
FRDGTextureSRVRef TextureSRV
Definition ScreenPass.h:77
bool IsValid() const
Definition ScreenPass.inl:139
bool operator!=(FScreenPassTextureSlice Other) const
Definition ScreenPass.inl:149
FScreenPassTextureSlice()=default
bool operator==(FScreenPassTextureSlice Other) const
Definition ScreenPass.inl:144
FIntRect ViewRect
Definition ScreenPass.h:78
Definition ScreenPass.h:41
FRDGTextureRef Texture
Definition ScreenPass.h:59
bool operator==(FScreenPassTexture Other) const
Definition ScreenPass.inl:119
FIntRect ViewRect
Definition ScreenPass.h:60
bool operator!=(FScreenPassTexture Other) const
Definition ScreenPass.inl:124
FScreenPassTexture()
Definition ScreenPass.h:42
bool IsValid() const
Definition ScreenPass.inl:114
void UpdateVisualizeTextureExtent()
Definition ScreenPass.inl:86
Definition ScreenPass.h:281
static RENDERER_API const FScreenTransform ViewportUVToScreenPos
Definition ScreenPass.h:299
static RENDERER_API const FScreenTransform Identity
Definition ScreenPass.h:295
FScreenTransform()
Definition ScreenPass.h:285
ETextureBasis
Definition ScreenPass.h:313
static FScreenTransform Invert(const FScreenTransform &AToB)
Definition ScreenPass.inl:208
static FScreenTransform ChangeRectFromTo(FVector2f SourceOffset, FVector2f SourceExtent, FVector2f DestinationOffset, FVector2f DestinationExtent)
Definition ScreenPass.inl:375
static RENDERER_API const FScreenTransform ScreenPosToViewportUV
Definition ScreenPass.h:298
FVector2f Scale
Definition ScreenPass.h:282
static FScreenTransform ChangeTextureBasisFromTo(const FIntPoint &TextureExtent, const FIntRect &TextureViewport, ETextureBasis SrcBasis, ETextureBasis DestBasis)
Definition ScreenPass.inl:304
Definition LinuxPlatformSplash.cpp:43
Rect(const int32 t=0, const int32 l=0, const int32 r=0, const int32 b=0)
Definition LinuxPlatformSplash.cpp:44
static const FShaderParametersMetadata * GetStructMetadata()
Definition ScreenPass.inl:406
TAlignedTypedef< FScreenTransform, Alignment >::Type TAlignedType
Definition ScreenPass.inl:404
Definition ShaderParameterMacros.h:895
static constexpr int32 NumElements
Definition ShaderParameterMacros.h:906
static constexpr bool bIsStoredInConstantBuffer
Definition ShaderParameterMacros.h:916
static constexpr int32 NumColumns
Definition ShaderParameterMacros.h:901
static constexpr EUniformBufferBaseType BaseType
Definition ShaderParameterMacros.h:897
static constexpr int32 Alignment
Definition ShaderParameterMacros.h:909
static constexpr int32 NumRows
Definition ShaderParameterMacros.h:900
Definition IntPoint.h:25
IntType Y
Definition IntPoint.h:37
static TIntPoint DivideAndRoundUp(TIntPoint lhs, IntType Divisor)
Definition IntPoint.h:429
static const TIntPoint ZeroValue
Definition IntPoint.h:45
IntType X
Definition IntPoint.h:34
bool IsEmpty() const
Definition IntRect.h:479
IntPointType Max
Definition IntRect.h:37