ENGINES: If backend is not capable support opengl in game do not try create opengl renderer

This commit is contained in:
Paweł Kołodziejski 2020-10-19 06:52:31 +02:00
parent bda199eac4
commit 749c3ec9e1
4 changed files with 43 additions and 15 deletions

View File

@ -275,9 +275,13 @@ GfxBase *GrimEngine::createRenderer(int screenW, int screenH) {
initGraphics(screenW, screenH, nullptr);
}
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
bool backendCapableOpenGL = g_system->hasFeature(OSystem::kFeatureOpenGLForGame);
#endif
#if defined(USE_OPENGL_GAME)
// Check the OpenGL context actually supports shaders
if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) {
matchingRendererType = Graphics::kRendererTypeOpenGL;
}
#endif
@ -289,12 +293,12 @@ GfxBase *GrimEngine::createRenderer(int screenW, int screenH) {
GfxBase *renderer = nullptr;
#if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
renderer = CreateGfxOpenGLShader();
}
#endif
#if defined(USE_OPENGL_GAME) && !defined(USE_GLES2)
if (matchingRendererType == Graphics::kRendererTypeOpenGL) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGL) {
renderer = CreateGfxOpenGL();
}
#endif

View File

@ -209,9 +209,13 @@ Renderer *createRenderer(OSystem *system) {
initGraphics(width, height, nullptr);
}
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
bool backendCapableOpenGL = g_system->hasFeature(OSystem::kFeatureOpenGLForGame);
#endif
#if defined(USE_OPENGL_GAME)
// Check the OpenGL context actually supports shaders
if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) {
matchingRendererType = Graphics::kRendererTypeOpenGL;
}
#endif
@ -222,12 +226,12 @@ Renderer *createRenderer(OSystem *system) {
}
#if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
return CreateGfxOpenGLShader(system);
}
#endif
#if defined(USE_OPENGL_GAME) && !defined(USE_GLES2)
if (matchingRendererType == Graphics::kRendererTypeOpenGL) {
if (backendCapableOpenGL && matchingRendererType == Graphics::kRendererTypeOpenGL) {
return CreateGfxOpenGL(system);
}
#endif

View File

@ -36,16 +36,22 @@ namespace Stark {
namespace Gfx {
Driver *Driver::create() {
#if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
Driver *driver = nullptr;
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
initGraphics3d(kOriginalWidth, kOriginalHeight);
if (OpenGLContext.shadersSupported) {
return new OpenGLSDriver();
} else {
error("Your system does not have the required OpenGL capabilities");
}
#endif // defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
bool backendCapableOpenGL = g_system->hasFeature(OSystem::kFeatureOpenGLForGame);
if (backendCapableOpenGL) {
if (OpenGLContext.shadersSupported) {
driver = new OpenGLSDriver();
} else {
error("Your system does not have the required OpenGL capabilities");
}
}
#endif
if (driver)
return driver;
error("No renderers have been found for this game");
}

View File

@ -84,6 +84,9 @@
#ifdef ENABLE_WME3D
#include "graphics/renderer.h"
#include "engines/util.h"
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
#include "graphics/opengl/context.h"
#endif
#endif
namespace Wintermute {
@ -501,16 +504,27 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated
#ifdef ENABLE_WME3D
initGraphics3d(_settings->getResWidth(), _settings->getResHeight());
#if defined(USE_OPENGL_GAME) || defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
bool backendCapableOpenGL = g_system->hasFeature(OSystem::kFeatureOpenGLForGame);
#endif
Common::String rendererConfig = ConfMan.get("renderer");
Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig);
#if defined(USE_OPENGL_GAME)
// Check the OpenGL context actually supports shaders
if (backendCapableOpenGL && desiredRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) {
desiredRendererType = Graphics::kRendererTypeOpenGL;
}
#endif
#if defined(USE_OPENGL_SHADERS) || defined(USE_GLES2)
if (desiredRendererType == Graphics::kRendererTypeOpenGLShaders) {
if (backendCapableOpenGL && desiredRendererType == Graphics::kRendererTypeOpenGLShaders) {
_renderer3D = makeOpenGL3DShaderRenderer(this);
}
#endif // defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
#if defined(USE_OPENGL_GAME)
if (desiredRendererType == Graphics::kRendererTypeOpenGL) {
if (backendCapableOpenGL && desiredRendererType == Graphics::kRendererTypeOpenGL) {
_renderer3D = makeOpenGL3DRenderer(this);
}
#endif // defined(USE_OPENGL)