UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WindowsOpenGL.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "OpenGLThirdParty.h"
7
8// Set to 1 to enable creating an ES 3.1 context and use ES 3.1 shaders on Windows
9#define EMULATE_ES31 0
10
11#if !EMULATE_ES31
12#include "OpenGL4.h"
13
14// RenderDoc defines
15#define GL_DEBUG_TOOL_EXT 0x6789
16#define GL_DEBUG_TOOL_NAME_EXT 0x678A
17#define GL_DEBUG_TOOL_PURPOSE_EXT 0x678B
18
19struct FWindowsOpenGL : public FOpenGL4
20{
26
28 {
30 {
31 glObjectLabel(Type, Object, -1, Name);
32 }
33 }
34
42
44 {
46 {
48 }
49 }
50
51 static FORCEINLINE bool TexStorage2D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLenum Format, GLenum Type, ETextureCreateFlags Flags)
52 {
53 if (glTexStorage2D != NULL)
54 {
55 glTexStorage2D(Target, Levels, InternalFormat, Width, Height);
56 return true;
57 }
58 else
59 {
60 return false;
61 }
62 }
63
64 static FORCEINLINE bool TexStorage2DMultisample(GLenum Target, GLsizei Samples, GLint InternalFormat, GLsizei Width, GLsizei Height, GLboolean FixedSampleLocations)
65 {
67 {
68 glTexStorage2DMultisample(Target, Samples, InternalFormat, Width, Height, FixedSampleLocations);
69 return true;
70 }
71 else
72 {
73 return false;
74 }
75 }
76
77 static FORCEINLINE void TexStorage3D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLsizei Depth, GLenum Format, GLenum Type)
78 {
80 {
81 glTexStorage3D(Target, Levels, InternalFormat, Width, Height, Depth);
82 }
83 else
84 {
85 const bool bArrayTexture = Target == GL_TEXTURE_2D_ARRAY || Target == GL_TEXTURE_CUBE_MAP_ARRAY;
86
87 for (uint32 MipIndex = 0; MipIndex < uint32(Levels); MipIndex++)
88 {
90 Target,
91 MipIndex,
92 InternalFormat,
93 FMath::Max<uint32>(1, (Width >> MipIndex)),
94 FMath::Max<uint32>(1, (Height >> MipIndex)),
95 (bArrayTexture) ? Depth : FMath::Max<uint32>(1, (Depth >> MipIndex)),
96 0,
97 Format,
98 Type,
99 NULL
100 );
101 }
102 }
103 }
104
106 {
107 glCopyImageSubData(SrcName, SrcTarget, SrcLevel, SrcX, SrcY, SrcZ, DstName, DstTarget, DstLevel, DstX, DstY, DstZ, Width, Height, Depth);
108 }
109
111 {
112 return glBufferStorage != NULL;
113 }
114
116 {
117 return glDepthBoundsEXT != NULL;
118 }
119
120 static FORCEINLINE void BufferStorage(GLenum Target, GLsizeiptr Size, const void* Data, GLbitfield Flags)
121 {
122 glBufferStorage(Target, Size, Data, Flags);
123 }
124
129
134
139
144
149
151 {
152 glUniformHandleui64ARB(Location, Value);
153 }
154
156 {
157 return glProgramBinary != nullptr;
158 }
159
160 static FORCEINLINE void GetProgramBinary(GLuint Program, GLsizei BufSize, GLsizei* Length, GLenum* BinaryFormat, void* Binary)
161 {
162 glGetProgramBinary(Program, BufSize, Length, BinaryFormat, Binary);
163 }
164
165 static FORCEINLINE void ProgramBinary(GLuint Program, GLenum BinaryFormat, const void* Binary, GLsizei Length)
166 {
167 glProgramBinary(Program, BinaryFormat, Binary, Length);
168 }
169};
170
171#else
172
173//fix-up naming differences between OpenGL and OpenGL ES
174#define glMapBufferOES glMapBuffer
175#define glUnmapBufferOES glUnmapBuffer
176#define GL_CLAMP_TO_BORDER_EXT GL_CLAMP_TO_BORDER
177#define GL_WRITE_ONLY_OES GL_WRITE_ONLY
178#define GL_ANY_SAMPLES_PASSED_EXT GL_ANY_SAMPLES_PASSED
179#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS
180#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS
181#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS
182#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS
183#define GL_DEBUG_SOURCE_API_KHR GL_DEBUG_SOURCE_API
184#define GL_DEBUG_SOURCE_OTHER_KHR GL_DEBUG_SOURCE_OTHER
185#define GL_DEBUG_SOURCE_API_KHR GL_DEBUG_SOURCE_API
186#define GL_DEBUG_TYPE_ERROR_KHR GL_DEBUG_TYPE_ERROR
187#define GL_DEBUG_TYPE_OTHER_KHR GL_DEBUG_TYPE_OTHER
188#define GL_DEBUG_TYPE_ERROR_KHR GL_DEBUG_TYPE_ERROR
189#define GL_DEBUG_TYPE_MARKER_KHR GL_DEBUG_TYPE_MARKER
190#define GL_DEBUG_TYPE_POP_GROUP_KHR GL_DEBUG_TYPE_POP_GROUP
191#define GL_DEBUG_TYPE_MARKER_KHR GL_DEBUG_TYPE_MARKER
192#define GL_DEBUG_SEVERITY_HIGH_KHR GL_DEBUG_SEVERITY_HIGH
193#define GL_DEBUG_SEVERITY_LOW_KHR GL_DEBUG_SEVERITY_LOW
194#define GL_DEBUG_SEVERITY_HIGH_KHR GL_DEBUG_SEVERITY_HIGH
195#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR GL_DEBUG_SEVERITY_NOTIFICATION
196#define GL_DEBUG_TYPE_ERROR_KHR GL_DEBUG_TYPE_ERROR
197#define GL_DEBUG_SEVERITY_HIGH_KHR GL_DEBUG_SEVERITY_HIGH
198
199#include "OpenGLES31.h"
200
201struct FWindowsOpenGL : public FOpenGLESDeferred
202{
203 static FORCEINLINE EShaderPlatform GetShaderPlatform()
204 {
205 return SP_OPENGL_PCES3_1;
206 }
207
208 static FORCEINLINE void InitDebugContext()
209 {
211 }
212
213 static FORCEINLINE void LabelObject(GLenum Type, GLuint Object, const ANSICHAR* Name)
214 {
215 if (glObjectLabelKHR && bDebugContext)
216 {
217 glObjectLabelKHR(Type, Object, -1, Name);
218 }
219 }
220
221 static FORCEINLINE void PushGroupMarker(const ANSICHAR* Name)
222 {
223 if (glPushDebugGroupKHR && bDebugContext)
224 {
226 }
227 }
228
229 static FORCEINLINE void PopGroupMarker()
230 {
231 if (glPopDebugGroupKHR && bDebugContext)
232 {
234 }
235 }
236
237 static FORCEINLINE bool TexStorage2D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLenum Format, GLenum Type, ETextureCreateFlags Flags)
238 {
239 if (glTexStorage2D != NULL)
240 {
241 glTexStorage2D(Target, Levels, InternalFormat, Width, Height);
242 return true;
243 }
244 else
245 {
246 return false;
247 }
248 }
249
250 static FORCEINLINE void TexStorage3D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLsizei Depth, GLenum Format, GLenum Type)
251 {
252 if (glTexStorage3D)
253 {
254 glTexStorage3D(Target, Levels, InternalFormat, Width, Height, Depth);
255 }
256 else
257 {
258 const bool bArrayTexture = Target == GL_TEXTURE_2D_ARRAY || Target == GL_TEXTURE_CUBE_MAP_ARRAY;
259
260 for (uint32 MipIndex = 0; MipIndex < uint32(Levels); MipIndex++)
261 {
263 Target,
264 MipIndex,
265 InternalFormat,
266 FMath::Max<uint32>(1, (Width >> MipIndex)),
267 FMath::Max<uint32>(1, (Height >> MipIndex)),
268 (bArrayTexture) ? Depth : FMath::Max<uint32>(1, (Depth >> MipIndex)),
269 0,
270 Format,
271 Type,
272 NULL
273 );
274 }
275 }
276 }
277
279 {
280 glCopyImageSubData(SrcName, SrcTarget, SrcLevel, SrcX, SrcY, SrcZ, DstName, DstTarget, DstLevel, DstX, DstY, DstZ, Width, Height, Depth);
281 }
282};
283#endif
284
#define NULL
Definition oodle2base.h:134
typedef GLboolean(GL_APIENTRYP PFNeglPresentationTimeANDROID)(EGLDisplay dpy
khronos_uint64_t GLuint64
Definition AndroidOpenGLPlatform.h:14
#define FORCEINLINE
Definition AndroidPlatform.h:140
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define GL_TEXTURE_CUBE_MAP_ARRAY
Definition OpenGLPlatform.h:132
ETextureCreateFlags
Definition RHIDefinitions.h:1091
EShaderPlatform
Definition RHIShaderPlatform.h:11
@ SP_OPENGL_PCES3_1
Definition RHIShaderPlatform.h:18
uint32 Size
Definition VulkanMemory.cpp:4034
bool GRunningUnderRenderDoc
Definition WindowsOpenGLPlatform.cpp:11
uint32_t uint32
Definition binka_ue_file_header.h:6
Type
Definition PawnAction_Move.h:11
PFNGLCOPYIMAGESUBDATAEXTPROC glCopyImageSubData
Definition AndroidOpenGLFunctions.cpp:56
PFNGLPUSHDEBUGGROUPKHRPROC glPushDebugGroupKHR
Definition AndroidOpenGLFunctions.cpp:42
PFNGLOBJECTLABELKHRPROC glObjectLabelKHR
Definition AndroidOpenGLFunctions.cpp:44
PFNGLPOPDEBUGGROUPKHRPROC glPopDebugGroupKHR
Definition AndroidOpenGLFunctions.cpp:43
Definition AndroidOpenGL.h:15
Definition UnrealMathUtility.h:270
Definition WindowsOpenGL.h:20
static FORCEINLINE GLuint64 GetTextureHandle(GLuint Texture)
Definition WindowsOpenGL.h:135
static FORCEINLINE void MakeTextureHandleResident(GLuint64 TextureHandle)
Definition WindowsOpenGL.h:140
static FORCEINLINE void PushGroupMarker(const ANSICHAR *Name)
Definition WindowsOpenGL.h:35
static FORCEINLINE void CopyImageSubData(GLuint SrcName, GLenum SrcTarget, GLint SrcLevel, GLint SrcX, GLint SrcY, GLint SrcZ, GLuint DstName, GLenum DstTarget, GLint DstLevel, GLint DstX, GLint DstY, GLint DstZ, GLsizei Width, GLsizei Height, GLsizei Depth)
Definition WindowsOpenGL.h:105
static FORCEINLINE void ProgramBinary(GLuint Program, GLenum BinaryFormat, const void *Binary, GLsizei Length)
Definition WindowsOpenGL.h:165
static FORCEINLINE bool SupportsBufferStorage()
Definition WindowsOpenGL.h:110
static FORCEINLINE bool SupportsDepthBoundsTest()
Definition WindowsOpenGL.h:115
static FORCEINLINE GLuint64 GetTextureSamplerHandle(GLuint Texture, GLuint Sampler)
Definition WindowsOpenGL.h:130
static FORCEINLINE void BufferStorage(GLenum Target, GLsizeiptr Size, const void *Data, GLbitfield Flags)
Definition WindowsOpenGL.h:120
static FORCEINLINE bool TexStorage2D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLenum Format, GLenum Type, ETextureCreateFlags Flags)
Definition WindowsOpenGL.h:51
static FORCEINLINE void GetProgramBinary(GLuint Program, GLsizei BufSize, GLsizei *Length, GLenum *BinaryFormat, void *Binary)
Definition WindowsOpenGL.h:160
static FORCEINLINE void InitDebugContext()
Definition WindowsOpenGL.h:21
static FORCEINLINE bool SupportsProgramBinary()
Definition WindowsOpenGL.h:155
static FORCEINLINE void TexStorage3D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLsizei Depth, GLenum Format, GLenum Type)
Definition WindowsOpenGL.h:77
static FORCEINLINE void MakeTextureHandleNonResident(GLuint64 TextureHandle)
Definition WindowsOpenGL.h:145
static FORCEINLINE void PopGroupMarker()
Definition WindowsOpenGL.h:43
static FORCEINLINE void LabelObject(GLenum Type, GLuint Object, const ANSICHAR *Name)
Definition WindowsOpenGL.h:27
static FORCEINLINE void UniformHandleui64(GLint Location, GLuint64 Value)
Definition WindowsOpenGL.h:150
static FORCEINLINE bool TexStorage2DMultisample(GLenum Target, GLsizei Samples, GLint InternalFormat, GLsizei Width, GLsizei Height, GLboolean FixedSampleLocations)
Definition WindowsOpenGL.h:64
static FORCEINLINE void DepthBounds(GLfloat Min, GLfloat Max)
Definition WindowsOpenGL.h:125
static int32 Strlen(const CharType *String)
Definition CString.h:1047