UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UniformBuffer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 UniformBuffer.h: Uniform buffer declarations.
5=============================================================================*/
6
7#pragma once
8
10#include "RenderingThread.h"
11#include "RenderResource.h"
13
15template<typename TBufferStruct> class TShaderUniformBufferParameter;
16
19template<typename TBufferStruct>
24
25
27template<typename TBufferStruct>
29{
30 static_assert(!TIsUECoreVariant<TBufferStruct, double>::Value, "UniformBufferRHIRef cannot be double core variants! Switch to float variant.");
31
32public:
33
36 , Contents(nullptr)
37 {
38 }
39
41 {
42 if (Contents)
43 {
44 FMemory::Free(Contents);
45 }
46 }
47
50 {
52 UpdateRHI(RHICmdList);
53 }
54
55 UE_DEPRECATED(5.4, "SetContents requires a command list.")
60
63 {
64 if (!Contents)
65 {
66 Contents = (uint8*)FMemory::Malloc(sizeof(TBufferStruct), SHADER_PARAMETER_STRUCT_ALIGNMENT);
67 }
68 FMemory::Memzero(Contents, sizeof(TBufferStruct));
69 UpdateRHI(RHICmdList);
70 }
71
72 UE_DEPRECATED(5.4, "SetContentsToZero requires a command list.")
77
78 const uint8* GetContents() const
79 {
80 return Contents;
81 }
82
83 // FRenderResource interface.
84 virtual void InitRHI(FRHICommandListBase& RHICmdList) override
85 {
86 UniformBufferRHI.SafeRelease();
87 if (Contents)
88 {
89 UniformBufferRHI = CreateUniformBufferImmediate<TBufferStruct>(*((const TBufferStruct*)Contents), BufferUsage);
90 }
91 }
92 virtual void ReleaseRHI() override
93 {
94 UniformBufferRHI.SafeRelease();
95 }
96
97 // Accessors.
99 {
101 checkf(UniformBufferRHI.GetReference(), TEXT("Attempted to access UniformBufferRHI on a TUniformBuffer that was never filled in with anything"));
102 check(UniformBufferRHI.GetReference()); // you are trying to use a UB that was never filled with anything
103 return UniformBufferRHI;
104 }
105
107 {
108 check(UniformBufferRHI.GetReference()); // you are trying to use a UB that was never filled with anything
109 return UniformBufferRHI;
110 }
111
113
114protected:
115
118 {
119 if (!Contents)
120 {
121 Contents = (uint8*)FMemory::Malloc(sizeof(TBufferStruct), SHADER_PARAMETER_STRUCT_ALIGNMENT);
122 }
123 FMemory::Memcpy(Contents,&NewContents,sizeof(TBufferStruct));
124 }
125
126private:
127
128 TUniformBufferRef<TBufferStruct> UniformBufferRHI;
129 uint8* Contents;
130};
131
132
134template<typename TBufferStruct>
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EUniformBufferUsage
Definition RHIDefinitions.h:536
@ UniformBuffer_MultiFrame
Definition RHIDefinitions.h:542
#define SHADER_PARAMETER_STRUCT_ALIGNMENT
Definition RHIDefinitions.h:25
EUniformBufferValidation
Definition RHIDefinitions.h:546
#define ENQUEUE_RENDER_COMMAND(Type)
Definition RenderingThread.h:1167
CORE_API bool IsInParallelRenderingThread()
Definition ThreadingBase.cpp:301
CORE_API bool IsInRenderingThread()
Definition ThreadingBase.cpp:273
void BeginSetUniformBufferContents(TUniformBuffer< TBufferStruct > &UniformBuffer, const TBufferStruct &Struct)
Definition UniformBuffer.h:135
TUniformBufferRef< TBufferStruct > CreateUniformBufferImmediate(const TBufferStruct &Value, EUniformBufferUsage Usage, EUniformBufferValidation Validation=EUniformBufferValidation::ValidateResources)
Definition UniformBuffer.h:20
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition RHICommandList.h:455
Definition RHICommandList.h:4626
Definition RHIResources.h:1232
Definition RenderResource.h:37
static RENDERCORE_API FRHICommandListBase & GetImmediateCommandList()
Definition RenderResource.cpp:173
RENDERCORE_API void UpdateRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:225
Definition ShaderParameters.h:109
Definition ShaderParameters.h:148
Definition ShaderParameterMacros.h:136
static TUniformBufferRef< TBufferStruct > CreateUniformBufferImmediate(const TBufferStruct &Value, EUniformBufferUsage Usage, EUniformBufferValidation Validation=EUniformBufferValidation::ValidateResources)
Definition ShaderParameterMacros.h:154
Definition UniformBuffer.h:29
void SetContentsNoUpdate(const TBufferStruct &NewContents)
Definition UniformBuffer.h:117
TUniformBuffer()
Definition UniformBuffer.h:34
void SetContents(FRHICommandListBase &RHICmdList, const TBufferStruct &NewContents)
Definition UniformBuffer.h:49
FRHIUniformBuffer * GetUniformBufferRHI() const
Definition UniformBuffer.h:98
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition UniformBuffer.h:84
void SetContentsToZero()
Definition UniformBuffer.h:73
const uint8 * GetContents() const
Definition UniformBuffer.h:78
EUniformBufferUsage BufferUsage
Definition UniformBuffer.h:112
const TUniformBufferRef< TBufferStruct > & GetUniformBufferRef() const
Definition UniformBuffer.h:106
virtual void ReleaseRHI() override
Definition UniformBuffer.h:92
~TUniformBuffer()
Definition UniformBuffer.h:40
void SetContentsToZero(FRHICommandListBase &RHICmdList)
Definition UniformBuffer.h:62
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition IsUECoreType.h:19