UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
OpenGLState.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 OpenGLState.h: OpenGL state definitions.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreTypes.h"
11#include "HAL/UnrealMemory.h"
12#include "Containers/Array.h"
13#include "Math/Color.h"
14#include "Math/IntRect.h"
15
16#include "RHIDefinitions.h"
18#include "RHI.h"
19#include "OpenGLResources.h"
20
21#define ZERO_FILLED_DUMMY_UNIFORM_BUFFER_SIZE 65536
22
23class FRenderTarget;
24
65
74
83
91
131
139
141{
157
159
161
163 {
164 bUseAlphaToCoverage = false;
165 for (int32 i = 0; i < MaxSimultaneousRenderTargets; ++i)
166 {
167 FRenderTarget& Target = RenderTargets[i];
168 Target.bAlphaBlendEnable = false;
169 Target.ColorBlendOperation = GL_NONE;
170 Target.ColorSourceBlendFactor = GL_NONE;
171 Target.ColorDestBlendFactor = GL_NONE;
172 Target.bSeparateAlphaBlendEnable = false;
173 Target.AlphaBlendOperation = GL_NONE;
174 Target.AlphaSourceBlendFactor = GL_NONE;
175 Target.AlphaDestBlendFactor = GL_NONE;
176 Target.ColorWriteMaskR = false;
177 Target.ColorWriteMaskG = false;
178 Target.ColorWriteMaskB = false;
179 Target.ColorWriteMaskA = false;
180 }
181 }
182};
183
185{
186 FBlendStateInitializerRHI RHIInitializer;
187public:
189 virtual bool GetInitializer(FBlendStateInitializerRHI& Init) override final
190 {
191 Init = RHIInitializer;
192 return true;
193 }
194
196};
197
219
239#define FOpenGLCachedAttr_Invalid (void*)(UPTRINT)0xFFFFFFFF
240#define FOpenGLCachedAttr_SingleVertex (void*)(UPTRINT)0xFFFFFFFE
241
261
276
277#define NUM_OPENGL_VERTEX_STREAMS 16
278
280{
284
287
292
293 // NumCombinedTextures must be greater than or equal to FOpenGL::GetMaxCombinedTextureImageUnits()
294 // NumCombinedUAVUnits must be greater than or equal to FOpenGL::GetMaxCombinedUAVUnits()
306
307 virtual void CleanupResources()
308 {
310 Textures.Empty();
311 UAVs.Empty();
312 }
313};
314
316{
346
350
354 {
355 static_assert(NUM_OPENGL_VERTEX_STREAMS <= sizeof(VertexAttrs_EnabledBits) * 8, "Not enough bits in VertexAttrs_EnabledBits to store NUM_OPENGL_VERTEX_STREAMS");
356 return !!(VertexAttrs_EnabledBits & (1 << Index));
357 }
359 {
360 if (bEnable)
361 {
363 }
364 else
365 {
367 }
368 }
369
371
403
412
413 virtual void CleanupResources() override
414 {
417 }
418};
419
421{
436
437 // Pending framebuffer setup
438 int32 NumRenderingSamples;// Only used with GL_EXT_multisampled_render_to_texture
448
449 // Information about pending BeginDraw[Indexed]PrimitiveUP calls.
456
458
459 // we null this when the we dirty PackedGlobalUniformDirty. Thus we can skip all of CommitNonComputeShaderConstants if it matches the current program
462
465
468
472
478
479 // Used for if(!FOpenGL::SupportsFastBufferData())
485
487 : StencilRef(0)
488 , Framebuffer(0)
490 , DepthMinZ(0.0f)
491 , DepthMaxZ(1.0f)
498 , DepthStencil(0)
503 , NumVertices(0)
504 , PrimitiveType(0)
505 , NumPrimitives(0)
506 , MinVertexIndex(0)
507 , IndexDataStride(0)
514 , UpVertexBuffer(0)
515 , UpIndexBuffer(0)
516 {
519 FMemory::Memset( RenderTargets, 0, sizeof(RenderTargets) ); // setting all to 0 at start
520 FMemory::Memset( RenderTargetMipmapLevels, 0, sizeof(RenderTargetMipmapLevels) ); // setting all to 0 at start
521 FMemory::Memset( RenderTargetArrayIndex, 0, sizeof(RenderTargetArrayIndex) ); // setting all to 0 at start
524 }
525
527 {
529 }
530
532
541};
542
543template<>
548template<>
553template<>
558template<>
#define NULL
Definition oodle2base.h:134
typedef GLboolean(GL_APIENTRYP PFNeglPresentationTimeANDROID)(EGLDisplay dpy
#define GL_FILL
Definition AndroidOpenGLPlatform.h:46
#define FORCEINLINE
Definition AndroidPlatform.h:140
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
void Init()
Definition LockFreeList.h:4
#define GL_READ_WRITE
Definition OpenGLPlatform.h:126
@ OGL_MAX_UNIFORM_BUFFER_BINDINGS
Definition OpenGLShaderResources.h:23
#define NUM_OPENGL_VERTEX_STREAMS
Definition OpenGLState.h:277
@ SF_NumStandardFrequencies
Definition RHIDefinitions.h:222
@ MaxSimultaneousRenderTargets
Definition RHIDefinitions.h:287
ERasterizerDepthClipMode
Definition RHIDefinitions.h:380
ERenderTargetStoreAction
Definition RHIDefinitions.h:1272
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RHI.h:403
Definition OpenGLState.h:185
FOpenGLBlendStateData Data
Definition OpenGLState.h:195
virtual bool GetInitializer(FBlendStateInitializerRHI &Init) override final
Definition OpenGLState.h:189
FOpenGLBlendState(const FBlendStateInitializerRHI &Initializer)
Definition OpenGLState.h:188
Definition OpenGLState.h:133
FOpenGLDepthStencilStateData Data
Definition OpenGLState.h:137
virtual bool GetInitializer(FDepthStencilStateInitializerRHI &Init) override final
Definition OpenGLState.cpp:384
Definition OpenGLShaders.cpp:1262
Definition OpenGLState.h:85
virtual bool GetInitializer(FRasterizerStateInitializerRHI &Init) override final
Definition OpenGLState.cpp:351
FOpenGLRasterizerStateData Data
Definition OpenGLState.h:89
Definition OpenGLState.h:67
~FOpenGLSamplerState()
Definition OpenGLState.cpp:224
GLuint Resource
Definition OpenGLState.h:69
FOpenGLSamplerStateData Data
Definition OpenGLState.h:70
Definition OpenGLShaderResources.h:283
Definition OpenGLResources.h:1324
Definition OpenGLResources.h:918
Definition OpenGLResources.h:736
Definition RHIResources.h:696
Definition RHIResources.h:686
Definition RHIResources.h:679
Definition RHIResources.h:671
Definition RHIResources.h:1232
Definition UnrealClient.h:30
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNumZeroed(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2340
SizeType AddDefaulted()
Definition Array.h:2795
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
SizeType AddZeroed()
Definition Array.h:2755
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition RefCounting.h:454
Definition StaticArray.h:26
@ NUM_SHADER_STAGES
Definition CrossCompilerCommon.h:24
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
static FORCEINLINE GLint GetMaxCombinedUAVUnits()
Definition AndroidOpenGL.h:81
Definition Color.h:48
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119
Definition OpenGLState.h:143
GLenum ColorDestBlendFactor
Definition OpenGLState.h:147
uint32 ColorWriteMaskG
Definition OpenGLState.h:153
bool bSeparateAlphaBlendEnable
Definition OpenGLState.h:148
GLenum AlphaSourceBlendFactor
Definition OpenGLState.h:150
bool bAlphaBlendEnable
Definition OpenGLState.h:144
uint32 ColorWriteMaskR
Definition OpenGLState.h:152
GLenum ColorSourceBlendFactor
Definition OpenGLState.h:146
uint32 ColorWriteMaskB
Definition OpenGLState.h:154
GLenum ColorBlendOperation
Definition OpenGLState.h:145
GLenum AlphaDestBlendFactor
Definition OpenGLState.h:151
uint32 ColorWriteMaskA
Definition OpenGLState.h:155
GLenum AlphaBlendOperation
Definition OpenGLState.h:149
Definition OpenGLState.h:141
TStaticArray< FRenderTarget, MaxSimultaneousRenderTargets > RenderTargets
Definition OpenGLState.h:158
FOpenGLBlendStateData()
Definition OpenGLState.h:162
bool bUseAlphaToCoverage
Definition OpenGLState.h:160
Definition OpenGLState.h:243
GLuint StreamOffset
Definition OpenGLState.h:246
FOpenGLCachedAttr()
Definition OpenGLState.h:251
GLboolean bNormalized
Definition OpenGLState.h:248
GLuint Size
Definition OpenGLState.h:244
GLuint StreamIndex
Definition OpenGLState.h:247
GLboolean bShouldConvertToFloat
Definition OpenGLState.h:249
GLenum Type
Definition OpenGLState.h:245
Definition OpenGLState.h:280
virtual ~FOpenGLCommonState()
Definition OpenGLState.h:288
FOpenGLCommonState()
Definition OpenGLState.h:285
TArray< FTextureStage > Textures
Definition OpenGLState.h:281
virtual void InitializeResources(int32 NumCombinedTextures, int32 NumCombinedUAVUnits)
Definition OpenGLState.h:295
virtual void CleanupResources()
Definition OpenGLState.h:307
TArray< FUAVStage > UAVs
Definition OpenGLState.h:283
TArray< FOpenGLSamplerState * > SamplerStates
Definition OpenGLState.h:282
Definition OpenGLState.h:316
bool bNonCoherentFramebufferFetchEnabled
Definition OpenGLState.h:345
GLenum ActiveTexture
Definition OpenGLState.h:329
uint16 ClearStencil
Definition OpenGLState.h:341
int32 FirstNonzeroRenderTarget
Definition OpenGLState.h:343
uint32 ActiveStreamMask
Definition OpenGLState.h:351
GLuint ElementArrayBufferBound
Definition OpenGLState.h:336
virtual void CleanupResources() override
Definition OpenGLState.h:413
FLinearColor ClearColor
Definition OpenGLState.h:340
FOpenGLCachedAttr VertexAttrs[NUM_OPENGL_VERTEX_STREAMS]
Definition OpenGLState.h:348
uint32 RenderTargetWidth
Definition OpenGLState.h:322
GLuint Program
Definition OpenGLState.h:325
GLuint UniformBufferOffsets[CrossCompiler::NUM_SHADER_STAGES *OGL_MAX_UNIFORM_BUFFER_BINDINGS]
Definition OpenGLState.h:327
FORCEINLINE bool GetVertexAttrEnabled(int32 Index) const
Definition OpenGLState.h:353
uint32 VertexAttrs_EnabledBits
Definition OpenGLState.h:352
GLuint StorageBufferBound
Definition OpenGLState.h:337
virtual void InitializeResources(int32 NumCombinedTextures, int32 NumCombinedUAVUnits) override
Definition OpenGLState.h:404
float DepthMaxZ
Definition OpenGLState.h:334
FOpenGLDepthStencilStateData DepthStencilState
Definition OpenGLState.h:318
FOpenGLBlendStateData BlendState
Definition OpenGLState.h:320
uint32 ActiveUAVMask
Definition OpenGLState.h:370
GLuint ArrayBufferBound
Definition OpenGLState.h:335
uint32 RenderTargetHeight
Definition OpenGLState.h:323
FOpenGLVertexDeclaration * VertexDecl
Definition OpenGLState.h:347
FOpenGLRasterizerStateData RasterizerState
Definition OpenGLState.h:317
GLuint UniformBufferBound
Definition OpenGLState.h:339
FOpenGLContextState()
Definition OpenGLState.h:372
float DepthMinZ
Definition OpenGLState.h:333
bool bScissorEnabled
Definition OpenGLState.h:330
uint32 StencilRef
Definition OpenGLState.h:319
GLuint UniformBuffers[CrossCompiler::NUM_SHADER_STAGES *OGL_MAX_UNIFORM_BUFFER_BINDINGS]
Definition OpenGLState.h:326
GLuint Framebuffer
Definition OpenGLState.h:321
FIntRect Viewport
Definition OpenGLState.h:332
bool bAlphaToCoverageEnabled
Definition OpenGLState.h:344
TArray< FOpenGLSamplerState * > CachedSamplerStates
Definition OpenGLState.h:328
GLuint OcclusionQuery
Definition OpenGLState.h:324
float ClearDepth
Definition OpenGLState.h:342
FORCEINLINE void SetVertexAttrEnabled(int32 Index, bool bEnable)
Definition OpenGLState.h:358
FIntRect Scissor
Definition OpenGLState.h:331
FOpenGLStream VertexStreams[NUM_OPENGL_VERTEX_STREAMS]
Definition OpenGLState.h:349
GLuint PixelUnpackBufferBound
Definition OpenGLState.h:338
Definition OpenGLState.h:93
GLenum StencilFail
Definition OpenGLState.h:102
GLenum ZFunc
Definition OpenGLState.h:96
GLenum CCWStencilFail
Definition OpenGLState.h:106
FOpenGLDepthStencilStateData()
Definition OpenGLState.h:112
bool bTwoSidedStencilMode
Definition OpenGLState.h:100
bool bZEnable
Definition OpenGLState.h:94
GLenum StencilFunc
Definition OpenGLState.h:101
uint32 StencilReadMask
Definition OpenGLState.h:109
uint32 StencilWriteMask
Definition OpenGLState.h:110
GLenum StencilZFail
Definition OpenGLState.h:103
bool bStencilEnable
Definition OpenGLState.h:99
bool bZWriteEnable
Definition OpenGLState.h:95
GLenum StencilPass
Definition OpenGLState.h:104
GLenum CCWStencilZFail
Definition OpenGLState.h:107
GLenum CCWStencilFunc
Definition OpenGLState.h:105
GLenum CCWStencilPass
Definition OpenGLState.h:108
Definition OpenGLState.h:421
int32 NumRenderingSamples
Definition OpenGLState.h:438
FOpenGLStream DynamicVertexStream
Definition OpenGLState.h:450
uint32 UpStride
Definition OpenGLState.h:482
FOpenGLBlendStateData BlendState
Definition OpenGLState.h:425
virtual void InitializeResources(int32 NumCombinedTextures, int32 NumComputeUAVUnits) override
AB: moved from the header, since it was causing linker error when the header is included externally.
Definition OpenGLState.cpp:437
FOpenGLStream Streams[NUM_OPENGL_VERTEX_STREAMS]
Definition OpenGLState.h:457
float DepthMaxZ
Definition OpenGLState.h:431
FIntRect Scissor
Definition OpenGLState.h:428
bool bAnyDirtyGraphicsUniformBuffers
Definition OpenGLState.h:476
uint32 BoundUniformBuffersDynamicOffset[SF_NumStandardFrequencies][MAX_UNIFORM_BUFFERS_PER_SHADER_STAGE]
Definition OpenGLState.h:471
uint32 RenderTargetMipmapLevels[MaxSimultaneousRenderTargets]
Definition OpenGLState.h:441
bool bAnyDirtyRealUniformBuffers[SF_NumStandardFrequencies]
Definition OpenGLState.h:474
uint32 RenderTargetHeight
Definition OpenGLState.h:434
uint32 UpIndexBufferBytes
Definition OpenGLState.h:481
uint32 NumVertices
Definition OpenGLState.h:451
uint32 PrimitiveType
Definition OpenGLState.h:452
uint32 MinVertexIndex
Definition OpenGLState.h:454
uint32 NumPrimitives
Definition OpenGLState.h:453
virtual void CleanupResources() override
Definition OpenGLState.h:533
~FOpenGLRHIState()
Definition OpenGLState.h:526
FRHIUniformBuffer * BoundUniformBuffers[SF_NumStandardFrequencies][MAX_UNIFORM_BUFFERS_PER_SHADER_STAGE]
Definition OpenGLState.h:470
FOpenGLLinkedProgram * LinkedProgramAndDirtyFlag
Definition OpenGLState.h:460
uint32 StencilRef
Definition OpenGLState.h:424
bool bScissorEnabled
Definition OpenGLState.h:427
FOpenGLRasterizerStateData RasterizerState
Definition OpenGLState.h:422
uint16 DirtyUniformBuffers[SF_NumStandardFrequencies]
Definition OpenGLState.h:477
uint32 DepthTargetWidth
Definition OpenGLState.h:445
FOpenGLShaderParameterCache * ShaderParameters
Definition OpenGLState.h:461
ERenderTargetStoreAction StencilStoreAction
Definition OpenGLState.h:444
FOpenGLDepthStencilStateData DepthStencilState
Definition OpenGLState.h:423
uint32 RenderTargetArrayIndex[MaxSimultaneousRenderTargets]
Definition OpenGLState.h:442
uint32 RenderTargetWidth
Definition OpenGLState.h:433
TRefCountPtr< FOpenGLBoundShaderState > BoundShaderState
Definition OpenGLState.h:463
@ MAX_UNIFORM_BUFFERS_PER_SHADER_STAGE
Definition OpenGLState.h:467
bool bAlphaToCoverageEnabled
Definition OpenGLState.h:435
FIntRect Viewport
Definition OpenGLState.h:429
float DepthMinZ
Definition OpenGLState.h:430
void * UpIndexBuffer
Definition OpenGLState.h:484
uint32 UpVertexBufferBytes
Definition OpenGLState.h:480
FOpenGLTexture * RenderTargets[MaxSimultaneousRenderTargets]
Definition OpenGLState.h:440
TRefCountPtr< FOpenGLComputeShader > CurrentComputeShader
Definition OpenGLState.h:464
FOpenGLRHIState()
Definition OpenGLState.h:486
GLuint ZeroFilledDummyUniformBuffer
Definition OpenGLState.h:432
uint32 DepthTargetHeight
Definition OpenGLState.h:446
bool bFramebufferSetupInvalid
Definition OpenGLState.h:447
FOpenGLTexture * DepthStencil
Definition OpenGLState.h:443
uint32 IndexDataStride
Definition OpenGLState.h:455
void * UpVertexBuffer
Definition OpenGLState.h:483
int32 FirstNonzeroRenderTarget
Definition OpenGLState.h:439
GLuint Framebuffer
Definition OpenGLState.h:426
Definition OpenGLState.h:76
GLenum CullMode
Definition OpenGLState.h:78
float DepthBias
Definition OpenGLState.h:79
ERasterizerDepthClipMode DepthClipMode
Definition OpenGLState.h:81
float SlopeScaleDepthBias
Definition OpenGLState.h:80
GLenum FillMode
Definition OpenGLState.h:77
Definition OpenGLState.h:26
EGLSamplerData
Definition OpenGLState.h:29
@ EGLSamplerData_CompareFunc
Definition OpenGLState.h:38
@ EGLSamplerData_WrapS
Definition OpenGLState.h:30
@ EGLSamplerData_WrapR
Definition OpenGLState.h:32
@ EGLSamplerData_MaxAniso
Definition OpenGLState.h:36
@ EGLSamplerData_LODBias
Definition OpenGLState.h:33
@ EGLSamplerData_CompareMode
Definition OpenGLState.h:37
@ EGLSamplerData_WrapT
Definition OpenGLState.h:31
@ EGLSamplerData_MagFilter
Definition OpenGLState.h:34
@ EGLSamplerData_MinFilter
Definition OpenGLState.h:35
@ EGLSamplerData_Num
Definition OpenGLState.h:39
GLint CompareFunc
Definition OpenGLState.h:50
GLint WrapT
Definition OpenGLState.h:43
GLint MaxAnisotropy
Definition OpenGLState.h:48
GLint CompareMode
Definition OpenGLState.h:49
GLint WrapS
Definition OpenGLState.h:42
GLint MagFilter
Definition OpenGLState.h:46
GLint MinFilter
Definition OpenGLState.h:47
GLint WrapR
Definition OpenGLState.h:44
GLint LODBias
Definition OpenGLState.h:45
FOpenGLSamplerStateData()
Definition OpenGLState.h:52
Definition OpenGLState.h:263
GLuint VertexBufferResource
Definition OpenGLState.h:264
uint32 Offset
Definition OpenGLState.h:266
uint32 Stride
Definition OpenGLState.h:265
FOpenGLStream()
Definition OpenGLState.h:269
uint32 Divisor
Definition OpenGLState.h:267
Definition RHI.h:278
Definition OpenGLState.h:199
GLuint Resource
Definition OpenGLState.h:203
int32 NumMips
Definition OpenGLState.h:206
int32 LimitMip
Definition OpenGLState.h:204
class FOpenGLTexture * Texture
Definition OpenGLState.h:200
class FOpenGLShaderResourceView * SRV
Definition OpenGLState.h:201
GLenum Target
Definition OpenGLState.h:202
FTextureStage()
Definition OpenGLState.h:208
bool bHasMips
Definition OpenGLState.h:205
Definition OpenGLState.h:221
GLenum Format
Definition OpenGLState.h:222
GLuint Resource
Definition OpenGLState.h:223
FUAVStage()
Definition OpenGLState.h:229
bool bLayered
Definition OpenGLState.h:226
GLint Layer
Definition OpenGLState.h:225
GLenum Access
Definition OpenGLState.h:224
GLint Level
Definition OpenGLState.h:227
FOpenGLBlendState TConcreteType
Definition OpenGLState.h:561
FOpenGLDepthStencilState TConcreteType
Definition OpenGLState.h:556
FOpenGLRasterizerState TConcreteType
Definition OpenGLState.h:551
FOpenGLSamplerState TConcreteType
Definition OpenGLState.h:546
Definition OpenGLResources.h:1473
IntType Y
Definition IntPoint.h:37
IntType X
Definition IntPoint.h:34
IntPointType Max
Definition IntRect.h:37
IntPointType Min
Definition IntRect.h:34