Skip to content

Commit 2bc9ae2

Browse files
committed
renderer: add support for the GL_RED image format
1 parent 0682adf commit 2bc9ae2

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

src/engine/renderer/tr_backend.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -739,12 +739,11 @@ static GLint GL_ToSRGB( GLint internalFormat, bool isSRGB )
739739
{
740740
switch ( format )
741741
{
742-
#if 0 // Not used in the code base.
743742
/* EXT_texture_sRGB_R8 extension.
744743
See: https://github.com/KhronosGroup/OpenGL-Registry/blob/main/extensions/EXT/EXT_texture_sRGB_R8.txt */
745744
case GL_RED:
745+
ASSERT( glConfig2.textureSrgbR8Available );
746746
return GL_SR8_EXT;
747-
#endif
748747
case GL_RGB:
749748
return GL_SRGB;
750749
case GL_RGBA:

src/engine/renderer/tr_image.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ class ListImagesCmd : public Cmd::StaticCmd
176176
{ GL_RGBA32UI, { "RGBA32UI", 16 } },
177177
{ GL_ALPHA16F_ARB, { "A16F", 2 } },
178178
{ GL_ALPHA32F_ARB, { "A32F", 4 } },
179+
{ GL_RED, { "R8", 1 } },
179180
{ GL_R16F, { "R16F", 2 } },
180181
{ GL_R32F, { "R32F", 4 } },
181182
{ GL_LUMINANCE_ALPHA16F_ARB, { "LA16F", 4 } },
@@ -933,6 +934,18 @@ void R_UploadImage( const char *name, const byte **dataArray, int numLayers, int
933934
format = GL_DEPTH_STENCIL;
934935
internalFormat = GL_DEPTH24_STENCIL8;
935936
}
937+
else if ( image->bits & IF_RED )
938+
{
939+
if( isSRGB && !glConfig2.textureSrgbR8Available )
940+
{
941+
Log::Warn("red image '%s' cannot be loaded as sRGB", image->name );
942+
internalFormat = GL_RGBA8;
943+
}
944+
else
945+
{
946+
internalFormat = GL_RED;
947+
}
948+
}
936949
else if ( image->bits & ( IF_RGBA16F | IF_RGBA32F | IF_TWOCOMP16F | IF_TWOCOMP32F | IF_ONECOMP16F | IF_ONECOMP32F ) )
937950
{
938951
if( !glConfig2.textureFloatAvailable ) {
@@ -2433,6 +2446,11 @@ static void R_CreateFogImage()
24332446
imageParams.filterType = filterType_t::FT_DEFAULT;
24342447
imageParams.wrapType = wrapTypeEnum_t::WT_CLAMP;
24352448

2449+
if ( glConfig2.textureSrgbR8Available )
2450+
{
2451+
imageParams.bits |= IF_RED;
2452+
}
2453+
24362454
tr.fogImageNaive = R_CreateImage( "_fogNaive", ( const byte ** ) &data, FOG_S, FOG_T, 1, imageParams );
24372455

24382456
imageParams.bits |= IF_SRGB;

src/engine/renderer/tr_public.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ struct glconfig2_t
121121
bool gpuShader4Available;
122122
bool gpuShader5Available;
123123
bool textureGatherAvailable;
124+
bool textureSrgbR8Available;
124125
int maxDrawBuffers;
125126

126127
float maxTextureAnisotropy;

src/engine/sys/sdl_glimp.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ static Cvar::Cvar<bool> r_ext_texture_integer( "r_ext_texture_integer",
123123
"Use GL_EXT_texture_integer if available", Cvar::NONE, true );
124124
static Cvar::Cvar<bool> r_ext_texture_rg( "r_ext_texture_rg",
125125
"Use GL_EXT_texture_rg if available", Cvar::NONE, true );
126+
static Cvar::Cvar<bool> r_ext_texture_srgb_r8( "r_ext_texture_srgb_r8",
127+
"Use GL_EXT_texture_sRGB_R8 if available", Cvar::NONE, true );
126128
static Cvar::Cvar<bool> r_khr_debug( "r_khr_debug",
127129
"Use GL_KHR_debug if available", Cvar::NONE, true );
128130
static Cvar::Cvar<bool> r_khr_shader_subgroup( "r_khr_shader_subgroup",
@@ -2019,6 +2021,7 @@ static void GLimp_InitExtensions()
20192021
Cvar::Latch( r_ext_texture_float );
20202022
Cvar::Latch( r_ext_texture_integer );
20212023
Cvar::Latch( r_ext_texture_rg );
2024+
Cvar::Latch( r_ext_texture_srgb_r8 );
20222025
Cvar::Latch( r_khr_debug );
20232026
Cvar::Latch( r_khr_shader_subgroup );
20242027

@@ -2207,6 +2210,8 @@ static void GLimp_InitExtensions()
22072210
// made required in OpenGL 3.0
22082211
glConfig2.textureCompressionRGTCAvailable = LOAD_EXTENSION( ExtFlag_CORE, ARB_texture_compression_rgtc );
22092212

2213+
glConfig2.textureSrgbR8Available = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, EXT_texture_sRGB_R8, r_ext_texture_srgb_r8.Get() );
2214+
22102215
// Texture - others
22112216
glConfig2.textureAnisotropyAvailable = false;
22122217
glConfig2.textureAnisotropy = 0.0f;

0 commit comments

Comments
 (0)