From 6486c4f6ea8b5380fae69837a28f865e75c84dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20V=C3=B6gele?= Date: Tue, 13 Sep 2016 18:28:44 +0200 Subject: [PATCH 1/2] Show exception messages when initializing a drawing engine fails --- src/drawing/NewDrawing.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/drawing/NewDrawing.cpp b/src/drawing/NewDrawing.cpp index e8c7c3b7c9..c03a606256 100644 --- a/src/drawing/NewDrawing.cpp +++ b/src/drawing/NewDrawing.cpp @@ -92,11 +92,13 @@ extern "C" if (_drawingEngineType == DRAWING_ENGINE_SOFTWARE) { _drawingEngineType = DRAWING_ENGINE_NONE; + log_error(ex.GetMessage()); log_fatal("Unable to initialise a drawing engine."); exit(-1); } else { + log_error(ex.GetMessage()); log_error("Unable to initialise drawing engine. Falling back to software."); // Fallback to software From f7caa55ee1dfa283b74d8ad35d513d949c44e7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20V=C3=B6gele?= Date: Tue, 13 Sep 2016 18:46:26 +0200 Subject: [PATCH 2/2] Defer instantiation of TextureCache until OpenGL is initialized If TextureCache is instantiated before OpenGL is initialized and something goes wrong during OpenGL initialization the destructor of TextureCache calls an OpenGL function which will cause the application to crash. --- src/drawing/engines/opengl/OpenGLDrawingEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drawing/engines/opengl/OpenGLDrawingEngine.cpp b/src/drawing/engines/opengl/OpenGLDrawingEngine.cpp index d05c269e4f..fd50fdd189 100644 --- a/src/drawing/engines/opengl/OpenGLDrawingEngine.cpp +++ b/src/drawing/engines/opengl/OpenGLDrawingEngine.cpp @@ -503,7 +503,6 @@ IDrawingEngine * DrawingEngineFactory::CreateOpenGL() OpenGLDrawingContext::OpenGLDrawingContext(OpenGLDrawingEngine * engine) { _engine = engine; - _textureCache = new TextureCache(); } OpenGLDrawingContext::~OpenGLDrawingContext() @@ -522,6 +521,7 @@ IDrawingEngine * OpenGLDrawingContext::GetEngine() void OpenGLDrawingContext::Initialise() { + _textureCache = new TextureCache(); _drawImageShader = new DrawImageShader(); _drawLineShader = new DrawLineShader(); _fillRectShader = new FillRectShader();