1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-21 05:53:02 +01:00

fallback to software mode if engine fails to initialise

This commit is contained in:
Ted John
2016-06-06 19:13:50 +01:00
parent f14ea6873c
commit 876336f455
2 changed files with 53 additions and 14 deletions

View File

@@ -132,6 +132,7 @@ enum {
};
enum {
DRAWING_ENGINE_NONE = -1,
DRAWING_ENGINE_SOFTWARE,
DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY,
DRAWING_ENGINE_OPENGL,

View File

@@ -14,6 +14,7 @@
*****************************************************************************/
#pragma endregion
#include "../core/Exception.hpp"
#include "IDrawingContext.h"
#include "IDrawingEngine.h"
@@ -24,21 +25,27 @@ extern "C"
#include "../platform/platform.h"
}
static IDrawingEngine * _drawingEngine = nullptr;
static sint32 _drawingEngineType = DRAWING_ENGINE_SOFTWARE;
static IDrawingEngine * _drawingEngine = nullptr;
extern "C" rct_string_id DrawingEngineStringIds[] =
extern "C"
{
STR_DRAWING_ENGINE_SOFTWARE,
STR_DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY,
STR_DRAWING_ENGINE_OPENGL,
};
rct_string_id DrawingEngineStringIds[] =
{
STR_DRAWING_ENGINE_SOFTWARE,
STR_DRAWING_ENGINE_SOFTWARE_WITH_HARDWARE_DISPLAY,
STR_DRAWING_ENGINE_OPENGL,
};
}
extern "C"
{
void drawing_engine_init()
{
assert(_drawingEngine == nullptr);
switch (gConfigGeneral.drawing_engine) {
_drawingEngineType = gConfigGeneral.drawing_engine;
switch (_drawingEngineType) {
case DRAWING_ENGINE_SOFTWARE:
_drawingEngine = DrawingEngineFactory::CreateSoftware();
break;
@@ -52,16 +59,47 @@ extern "C"
if (_drawingEngine == nullptr)
{
log_error("Unable to create drawing engine. Falling back to software.");
if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE)
{
_drawingEngineType = DRAWING_ENGINE_NONE;
log_fatal("Unable to create a drawing engine.");
exit(-1);
}
else
{
log_error("Unable to create drawing engine. Falling back to software.");
// Fallback to software
gConfigGeneral.drawing_engine = DRAWING_ENGINE_SOFTWARE;
config_save_default();
_drawingEngine = DrawingEngineFactory::CreateSoftware();
// Fallback to software
gConfigGeneral.drawing_engine = DRAWING_ENGINE_SOFTWARE;
config_save_default();
drawing_engine_init();
}
}
else
{
try
{
_drawingEngine->Initialise(gWindow);
}
catch (Exception ex)
{
if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE)
{
_drawingEngineType = DRAWING_ENGINE_NONE;
log_fatal("Unable to initialise a drawing engine.");
exit(-1);
}
else
{
log_error("Unable to initialise drawing engine. Falling back to software.");
_drawingEngine->Initialise(gWindow);
// Fallback to software
gConfigGeneral.drawing_engine = DRAWING_ENGINE_SOFTWARE;
config_save_default();
drawing_engine_init();
}
}
}
}
void drawing_engine_resize()