UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SlateElementVertexBuffer.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 "Stats/Stats.h"
8#include "SlateGlobals.h"
9#include "RHI.h"
10#include "RHICommandList.h"
11#include "RHIResourceUtils.h"
12#include "RenderResource.h"
14
16
20template <typename VertexType>
22{
23public:
25 : BufferSize(0)
26 , MinBufferSize(0)
27 , BufferUsageSize(0)
28 {}
29
31
33 {
34 MinBufferSize = sizeof(VertexType) * FMath::Max( MinNumVertices, 100 );
35
36 if ( IsInRenderingThread() )
37 {
39 }
40 else
41 {
43 }
44 }
45
46 void Destroy()
47 {
48 if ( IsInRenderingThread() )
49 {
51 }
52 else
53 {
55 }
56 }
57
59 virtual void InitRHI(FRHICommandListBase& RHICmdList)
60 {
62 {
63 check( MinBufferSize > 0 )
64
65 SetBufferSize(MinBufferSize);
66
67 const FRHIBufferCreateDesc CreateDesc =
68 FRHIBufferCreateDesc::CreateVertex(TEXT("SlateElementVertices"), MinBufferSize)
71
72 VertexBufferRHI = RHICmdList.CreateBuffer(CreateDesc);
73
74 // Ensure the vertex buffer could be created
76 }
77 }
78
80 virtual void ReleaseRHI()
81 {
83 SetBufferSize(0);
84 }
85
87 virtual FString GetFriendlyName() const { return TEXT("SlateElementVertices"); }
88
90 int32 GetBufferSize() const { return BufferSize; }
91
93 int32 GetBufferUsageSize() const { return BufferUsageSize; }
94
96 void ResetBufferUsage() { BufferUsageSize = 0; }
97
100 {
102
103 if (RequiredVertexCount > 0 )
104 {
105#if !SLATE_USE_32BIT_INDICES
106 // make sure our index buffer can handle this
107 checkf(RequiredVertexCount < 0xFFFF, TEXT("Slate vertex buffer is too large (%d) to work with uint16 indices"), RequiredVertexCount);
108#endif
110
111 // resize if needed
113 {
114 ResizeBuffer(RHICmdList, RequiredBufferSize);
115 }
116
117 BufferUsageSize = RequiredBufferSize;
118 }
119 }
120
121 int32 GetMinBufferSize() const { return MinBufferSize; }
122
123private:
125 void ResizeBuffer(FRHICommandListBase& RHICmdList, int32 NewSizeBytes)
126 {
128
129 int32 FinalSize = FMath::Max( NewSizeBytes, MinBufferSize );
130
131 if (FinalSize != 0 && FinalSize != BufferSize)
132 {
134
135 const FRHIBufferCreateDesc CreateDesc =
136 FRHIBufferCreateDesc::CreateVertex(TEXT("SlateElementVertices"), FinalSize)
139
140 VertexBufferRHI = RHICmdList.CreateBuffer(CreateDesc);
141
143
144 SetBufferSize(FinalSize);
145 }
146 }
147
148 void SetBufferSize(int32 NewBufferSize)
149 {
151 BufferSize = NewBufferSize;
153 }
154
155private:
157 int32 BufferSize;
158
160 int32 MinBufferSize;
161
163 int32 BufferUsageSize;
164
167 void operator=(const TSlateElementVertexBuffer& );
168};
169
170
172{
173public:
176
178
180 virtual void InitRHI(FRHICommandListBase& RHICmdList)
181 {
183 {
184 const uint32 Verts[] = { 0, 1, 2, 3 };
185
186 VertexBufferRHI = UE::RHIResourceUtils::CreateVertexBufferFromArray(RHICmdList, TEXT("SlateStencilClipVertexBuffer"), EBufferUsageFlags::Static, MakeConstArrayView(Verts));
187
188 // Ensure the vertex buffer could be created
190 }
191 }
192
194 virtual void ReleaseRHI()
195 {
197 }
198
200 virtual FString GetFriendlyName() const { return TEXT("SlateElementVertices"); }
201};
202
constexpr auto MakeConstArrayView(OtherRangeType &&Other)
Definition ArrayView.h:904
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define QUICK_SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:652
#define INC_MEMORY_STAT_BY(StatId, Amount)
Definition Stats.h:700
#define SCOPE_CYCLE_COUNTER(Stat)
Definition Stats.h:650
#define DEC_MEMORY_STAT_BY(StatId, Amount)
Definition Stats.h:705
#define DECLARE_MEMORY_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:687
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool IsValidRef(const FVertexBufferAndSRV &Buffer)
Definition GPUSkinVertexFactory.h:92
void BeginReleaseResource(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe)
Definition RenderResource.cpp:369
void BeginInitResource(FRenderResource *Resource, FRenderCommandPipe *RenderCommandPipe)
Definition RenderResource.cpp:293
TGlobalResource< FSlateStencilClipVertexBuffer > GSlateStencilClipVertexBuffer
Definition SlateElementVertexBuffer.cpp:7
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHICommandList.h:455
FBufferRHIRef CreateBuffer(const FRHIBufferCreateDesc &CreateDesc)
Definition RHICommandList.h:800
static FRHICommandListImmediate & Get()
Definition RHICommandList.h:5522
virtual RENDERCORE_API void ReleaseResource()
Definition RenderResource.cpp:206
virtual RENDERCORE_API void InitResource(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:178
Definition SlateElementVertexBuffer.h:172
virtual void InitRHI(FRHICommandListBase &RHICmdList)
Definition SlateElementVertexBuffer.h:180
virtual void ReleaseRHI()
Definition SlateElementVertexBuffer.h:194
~FSlateStencilClipVertexBuffer()
Definition SlateElementVertexBuffer.h:177
FSlateStencilClipVertexBuffer()
Definition SlateElementVertexBuffer.h:174
virtual FString GetFriendlyName() const
Definition SlateElementVertexBuffer.h:200
Definition RenderResource.h:474
FBufferRHIRef VertexBufferRHI
Definition RenderResource.h:489
Definition RenderResource.h:543
UE_FORCEINLINE_HINT void SafeRelease()
Definition RefCounting.h:599
Definition SlateElementVertexBuffer.h:22
int32 GetBufferSize() const
Definition SlateElementVertexBuffer.h:90
void Destroy()
Definition SlateElementVertexBuffer.h:46
virtual void InitRHI(FRHICommandListBase &RHICmdList)
Definition SlateElementVertexBuffer.h:59
~TSlateElementVertexBuffer()
Definition SlateElementVertexBuffer.h:30
int32 GetBufferUsageSize() const
Definition SlateElementVertexBuffer.h:93
void ResetBufferUsage()
Definition SlateElementVertexBuffer.h:96
virtual void ReleaseRHI()
Definition SlateElementVertexBuffer.h:80
TSlateElementVertexBuffer()
Definition SlateElementVertexBuffer.h:24
virtual FString GetFriendlyName() const
Definition SlateElementVertexBuffer.h:87
void PreFillBuffer(FRHICommandListBase &RHICmdList, int32 RequiredVertexCount, bool bShrinkToMinSize)
Definition SlateElementVertexBuffer.h:99
void Init(int32 MinNumVertices)
Definition SlateElementVertexBuffer.h:32
int32 GetMinBufferSize() const
Definition SlateElementVertexBuffer.h:121
Definition RHIResources.h:1417
static FRHIBufferCreateDesc CreateVertex(const TCHAR *InDebugName)
Definition RHIResources.h:1438
FRHIBufferCreateDesc & DetermineInitialState()
Definition RHIResources.h:1529
FRHIBufferCreateDesc & AddUsage(EBufferUsageFlags InUsage)
Definition RHIResources.h:1524