From 5009db6aac54c07c5abaec872d0686f4b51d2cc1 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 20 Mar 2025 03:05:53 +0300 Subject: [PATCH] engine: client: make renderer loading failure less scary for the user --- engine/client/ref_common.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index fc63027e..e9e496c1 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -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; + } } }