ref_gl: use skybox names generated by CheckSkybox function, don't checking same file twice

Also fixes priority for skyboxes
This commit is contained in:
Alibek Omarov 2022-08-31 02:42:17 +03:00
parent 28001ea150
commit f29a9f5f58
1 changed files with 22 additions and 18 deletions

View File

@ -60,11 +60,7 @@ float r_turbsin[] =
#include "warpsin.h"
};
#define SKYBOX_MISSED 0
#define SKYBOX_HLSTYLE 1
#define SKYBOX_Q1STYLE 2
static int CheckSkybox( const char *name )
static qboolean CheckSkybox( const char *name, char out[6][MAX_STRING] )
{
const char *skybox_ext[3] = { "dds", "tga", "bmp" };
int i, j, num_checked_sides;
@ -73,32 +69,40 @@ static int CheckSkybox( const char *name )
// search for skybox images
for( i = 0; i < 3; i++ )
{
// check HL-style skyboxes
num_checked_sides = 0;
for( j = 0; j < 6; j++ )
{
// build side name
sidename = va( "%s%s.%s", name, r_skyBoxSuffix[j], skybox_ext[i] );
if( gEngfuncs.fsapi->FileExists( sidename, false ))
{
Q_strncpy( out[j], sidename, sizeof( out[j] ));
num_checked_sides++;
}
}
if( num_checked_sides == 6 )
return SKYBOX_HLSTYLE; // image exists
return true; // image exists
// check Q1-style skyboxes
num_checked_sides = 0;
for( j = 0; j < 6; j++ )
{
// build side name
sidename = va( "%s_%s.%s", name, r_skyBoxSuffix[j], skybox_ext[i] );
if( gEngfuncs.fsapi->FileExists( sidename, false ))
{
Q_strncpy( out[j], sidename, sizeof( out[j] ));
num_checked_sides++;
}
}
if( num_checked_sides == 6 )
return SKYBOX_Q1STYLE; // images exists
return true; // images exists
}
return SKYBOX_MISSED;
return false;
}
void DrawSkyPolygon( int nump, vec3_t vecs )
@ -411,8 +415,9 @@ R_SetupSky
void R_SetupSky( const char *skyboxname )
{
char loadname[MAX_STRING];
char sidename[MAX_STRING];
int i, result, len;
char sidenames[6][MAX_STRING];
int i, len;
qboolean result;
if( !COM_CheckString( skyboxname ))
{
@ -428,10 +433,10 @@ void R_SetupSky( const char *skyboxname )
if( loadname[len - 1] == '_' )
loadname[len - 1] = '\0';
result = CheckSkybox( loadname );
result = CheckSkybox( loadname, sidenames );
// to prevent infinite recursion if default skybox was missed
if( result == SKYBOX_MISSED && Q_stricmp( loadname, DEFAULT_SKYBOX_PATH ))
if( !result && Q_stricmp( loadname, DEFAULT_SKYBOX_PATH ))
{
gEngfuncs.Con_Reportf( S_WARN "missed or incomplete skybox '%s'\n", skyboxname );
R_SetupSky( "desert" ); // force to default
@ -444,12 +449,11 @@ void R_SetupSky( const char *skyboxname )
for( i = 0; i < 6; i++ )
{
if( result == SKYBOX_HLSTYLE )
Q_snprintf( sidename, sizeof( sidename ), "%s%s", loadname, r_skyBoxSuffix[i] );
else Q_snprintf( sidename, sizeof( sidename ), "%s_%s", loadname, r_skyBoxSuffix[i] );
tr.skyboxTextures[i] = GL_LoadTexture( sidenames[i], NULL, 0, TF_CLAMP|TF_SKY );
if( !tr.skyboxTextures[i] )
break;
tr.skyboxTextures[i] = GL_LoadTexture( sidename, NULL, 0, TF_CLAMP|TF_SKY );
if( !tr.skyboxTextures[i] ) break;
gEngfuncs.Con_DPrintf( "%s%s%s", skyboxname, r_skyBoxSuffix[i], i != 5 ? ", " : ". " );
}