diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index 5fa479aa..85e20cf8 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -669,17 +669,20 @@ qboolean R_Init( void ) if( !(success = R_LoadRenderer( refopt ))) { - // check if we are tried to load default accelearated renderer already - // and if not, load it first - if( Q_strcmp( refopt, DEFAULT_ACCELERATED_RENDERER ) ) - { - success = R_LoadRenderer( refopt ); - } + int i; - // software renderer is the last chance... - if( !success ) + // cycle through renderers that we collected in CollectRendererNames + for( i = 0; i < ref.numRenderers; i++ ) { - success = R_LoadRenderer( DEFAULT_SOFTWARE_RENDERER ); + // skip renderer that was requested but failed to load + if( Q_strcmp( refopt, ref.shortNames[i] )) + continue; + + success = R_LoadRenderer( ref.shortNames[i] ); + + // yay, found working one + if( success ) + break; } } diff --git a/engine/common/com_strings.h b/engine/common/com_strings.h index d150d533..fcb40d41 100644 --- a/engine/common/com_strings.h +++ b/engine/common/com_strings.h @@ -65,6 +65,7 @@ GNU General Public License for more details. #define XASH_ENGINE_NAME "Xash3D FWGS" +// renderers order is important, software is always a last chance fallback #define DEFAULT_RENDERERS { "gl", "gles1", "gles2", "gl4es", "soft" } #define DEFAULT_RENDERERS_LEN 5