UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LinuxOpenGL.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"
6#include "OpenGLPlatform.h"
7
8#include "OpenGL4.h"
9
10struct FLinuxOpenGL : public FOpenGL4
11{
16
18 {
20 {
22 }
23 }
24
32
34 {
36 {
38 }
39 }
40
41 static FORCEINLINE bool TexStorage2D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLenum Format, GLenum Type, ETextureCreateFlags Flags)
42 {
43 if (glTexStorage2D != NULL)
44 {
45 glTexStorage2D(Target, Levels, InternalFormat, Width, Height);
46 return true;
47 }
48
49 return false;
50 }
51
52 static FORCEINLINE void TexStorage3D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLsizei Depth, GLenum Format, GLenum Type)
53 {
55 {
56 glTexStorage3D(Target, Levels, InternalFormat, Width, Height, Depth);
57 }
58 else
59 {
60 const bool bArrayTexture = Target == GL_TEXTURE_2D_ARRAY || Target == GL_TEXTURE_CUBE_MAP_ARRAY;
61
62 for (uint32 MipIndex = 0; MipIndex < uint32(Levels); MipIndex++)
63 {
65 Target,
66 MipIndex,
67 InternalFormat,
68 FMath::Max<uint32>(1, (Width >> MipIndex)),
69 FMath::Max<uint32>(1, (Height >> MipIndex)),
70 (bArrayTexture) ? Depth : FMath::Max<uint32>(1, (Depth >> MipIndex)),
71 0,
72 Format,
73 Type,
74 NULL
75 );
76 }
77 }
78 }
79
81 {
82 glCopyImageSubData(SrcName, SrcTarget, SrcLevel, SrcX, SrcY, SrcZ, DstName, DstTarget, DstLevel, DstX, DstY, DstZ, Width, Height, Depth);
83 }
84
85 static void ProcessExtensions(const FString& ExtensionsString)
86 {
87 FOpenGL4::ProcessExtensions(ExtensionsString);
88
89 FString VendorName(ANSI_TO_TCHAR((const ANSICHAR*)glGetString(GL_VENDOR)));
90
91 if (VendorName.Contains(TEXT("ATI ")))
92 {
93 // Workaround for AMD driver not handling GL_SRGB8_ALPHA8 in glTexStorage2D() properly (gets treated as non-sRGB)
94 // FIXME: obsolete ? this was the case in <= 2014
95 glTexStorage1D = nullptr;
96 glTexStorage2D = nullptr;
97 glTexStorage3D = nullptr;
98 }
99 }
100};
101
103
#define NULL
Definition oodle2base.h:134
#define FORCEINLINE
Definition AndroidPlatform.h:140
#define TEXT(x)
Definition Platform.h:1272
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
#define ANSI_TO_TCHAR(str)
Definition StringConv.h:1020
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AndroidOpenGL.h:15
Definition LinuxOpenGL.h:11
static FORCEINLINE void PopGroupMarker()
Definition LinuxOpenGL.h:33
static FORCEINLINE void LabelObject(GLenum Type, GLuint Object, const ANSICHAR *Name)
Definition LinuxOpenGL.h:17
static FORCEINLINE bool TexStorage2D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLenum Format, GLenum Type, ETextureCreateFlags Flags)
Definition LinuxOpenGL.h:41
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 LinuxOpenGL.h:80
static void ProcessExtensions(const FString &ExtensionsString)
Definition LinuxOpenGL.h:85
static FORCEINLINE void TexStorage3D(GLenum Target, GLint Levels, GLint InternalFormat, GLsizei Width, GLsizei Height, GLsizei Depth, GLenum Format, GLenum Type)
Definition LinuxOpenGL.h:52
static FORCEINLINE void InitDebugContext()
Definition LinuxOpenGL.h:12
static FORCEINLINE void PushGroupMarker(const ANSICHAR *Name)
Definition LinuxOpenGL.h:25
static int32 Strlen(const CharType *String)
Definition CString.h:1047