Skip to content

Commit 745f18f

Browse files
committed
renderer: add support for the GL_RED image format
1 parent a3d3101 commit 745f18f

File tree

5 files changed

+21
-2
lines changed

5 files changed

+21
-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( glConfig.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: 13 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 && !glConfig.textureSrgbR8Available )
940+
{
941+
Log::Warn("red image '%s' cannot be loaded as sRGB", image->name );
942+
internalFormat = GL_RGB8;
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( !glConfig.textureFloatAvailable ) {

src/engine/renderer/tr_local.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@ enum class ssaoMode {
473473
IF_DEPTH32 = BIT( 11 ),
474474
IF_PACKED_DEPTH24_STENCIL8 = BIT( 12 ),
475475
IF_LIGHTMAP = BIT( 13 ),
476+
IF_RED = BIT( 14 ),
476477
IF_RGBE = BIT( 15 ),
477478
IF_ALPHATEST = BIT( 16 ), // FIXME: this is unused
478479
IF_ALPHA = BIT( 17 ),

src/engine/renderer/tr_public.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ struct GLConfig
138138
bool gpuShader4Available;
139139
bool gpuShader5Available;
140140
bool textureGatherAvailable;
141+
bool textureSrgbR8Available;
141142
int maxDrawBuffers;
142143

143144
float maxTextureAnisotropy;

src/engine/sys/sdl_glimp.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ static Cvar::Cvar<bool> r_ext_texture_integer( "r_ext_texture_integer",
122122
"Use GL_EXT_texture_integer if available", Cvar::NONE, true );
123123
static Cvar::Cvar<bool> r_ext_texture_rg( "r_ext_texture_rg",
124124
"Use GL_EXT_texture_rg if available", Cvar::NONE, true );
125+
static Cvar::Cvar<bool> r_ext_texture_srgb_r8( "r_ext_texture_srgb_r8",
126+
"Use GL_EXT_texture_sRGB_R8 if available", Cvar::NONE, true );
125127
static Cvar::Cvar<bool> r_khr_debug( "r_khr_debug",
126128
"Use GL_KHR_debug if available", Cvar::NONE, true );
127129
static Cvar::Cvar<bool> r_khr_shader_subgroup( "r_khr_shader_subgroup",
@@ -2031,6 +2033,7 @@ static void GLimp_InitExtensions()
20312033
Cvar::Latch( r_ext_texture_float );
20322034
Cvar::Latch( r_ext_texture_integer );
20332035
Cvar::Latch( r_ext_texture_rg );
2036+
Cvar::Latch( r_ext_texture_srgb_r8 );
20342037
Cvar::Latch( r_khr_debug );
20352038
Cvar::Latch( r_khr_shader_subgroup );
20362039

@@ -2210,6 +2213,8 @@ static void GLimp_InitExtensions()
22102213
// made required in OpenGL 3.0
22112214
glConfig.textureCompressionRGTCAvailable = LOAD_EXTENSION( ExtFlag_CORE, ARB_texture_compression_rgtc );
22122215

2216+
glConfig.textureSrgbR8Available = LOAD_EXTENSION_WITH_TEST( ExtFlag_NONE, EXT_texture_sRGB_R8, r_ext_texture_srgb_r8.Get() );
2217+
22132218
// Texture - others
22142219
glConfig.textureAnisotropyAvailable = false;
22152220
glConfig.textureAnisotropy = 0.0f;

0 commit comments

Comments
 (0)