engine: client: make renderer loading failure less scary for the user

This commit is contained in:
Alibek Omarov
2025-03-20 03:05:53 +03:00
parent c389736c2f
commit 5009db6aac

View File

@@ -572,7 +572,7 @@ static void R_GetRendererName( char *dest, size_t size, const char *opt )
}
}
static qboolean R_LoadRenderer( const char *refopt )
static qboolean R_LoadRenderer( const char *refopt, qboolean quiet )
{
string refdll;
@@ -583,7 +583,8 @@ static qboolean R_LoadRenderer( const char *refopt )
if( !R_LoadProgs( refdll ))
{
R_Shutdown();
Sys_Warn( S_ERROR "Can't initialize %s renderer!\n", refdll );
if( !quiet )
Sys_Warn( S_ERROR "Can't initialize %s renderer!\n", refdll );
return false;
}
@@ -730,19 +731,23 @@ qboolean R_Init( void )
requested_cvar[0] = 0;
if( Sys_GetParmFromCmdLine( "-ref", requested_cmdline ))
success = R_LoadRenderer( requested_cmdline );
success = R_LoadRenderer( requested_cmdline, false );
if( !success && COM_CheckString( r_refdll.string ) && Q_stricmp( requested_cmdline, r_refdll.string ))
{
Q_strncpy( requested_cvar, r_refdll.string, sizeof( requested_cvar ));
success = R_LoadRenderer( requested_cvar );
// do not show scary messages to user if renderer set in config cannot be loaded
// as game data could be copied from one platform to another, where this renderer
// might not be supported (ref_gl on Android for example)
success = R_LoadRenderer( requested_cvar, !host_developer.value );
}
if( !success )
{
int i;
for( i = 0; i < ref.numRenderers && !success; i++ )
for( i = 0; i < ref.numRenderers; i++ )
{
// skip renderer that was requested but failed to load
if( !Q_strcmp( requested_cmdline, ref.shortNames[i] ))
@@ -751,7 +756,19 @@ qboolean R_Init( void )
if( !Q_strcmp( requested_cvar, ref.shortNames[i] ))
continue;
success = R_LoadRenderer( ref.shortNames[i] );
// do not show bruteforcing attempts, however, warn user about falling back
// to software mode
if( !Q_strcmp( "soft", ref.shortNames[i] ) && !host_developer.value )
Sys_Warn( "Can't initialize any hardware accelerated renderer. Falling back to software rendering...\n" );
success = R_LoadRenderer( ref.shortNames[i], !host_developer.value );
if( success )
{
// remember last valid renderer
Cvar_DirectSet( &r_refdll, ref.shortNames[i] );
break;
}
}
}