Renderer *createRenderer(OSystem *system) { Common::String rendererConfig = ConfMan.get("renderer"); Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig); Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType); if (matchingRendererType != desiredRendererType && desiredRendererType != Graphics::kRendererTypeDefault) { // Display a warning if unable to use the desired renderer warning("Unable to create a '%s' renderer", rendererConfig.c_str()); } #if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS) if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders) { return CreateGfxOpenGLShader(system); } #endif #if defined(USE_OPENGL) && !defined(USE_GLES2) if (matchingRendererType == Graphics::kRendererTypeOpenGL) { return CreateGfxOpenGL(system); } #endif if (matchingRendererType == Graphics::kRendererTypeTinyGL) { return CreateGfxTinyGL(system); } error("Unable to create a '%s' renderer", rendererConfig.c_str()); }
GfxBase *GrimEngine::createRenderer(int screenW, int screenH, bool fullscreen) { Common::String rendererConfig = ConfMan.get("renderer"); Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig); Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType); _softRenderer = matchingRendererType == Graphics::kRendererTypeTinyGL; _system->setupScreen(screenW, screenH, fullscreen, !_softRenderer); #if defined(USE_OPENGL) // Check the OpenGL context actually supports shaders if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders && !OpenGLContext.shadersSupported) { matchingRendererType = Graphics::kRendererTypeOpenGL; } #endif if (matchingRendererType != desiredRendererType && desiredRendererType != Graphics::kRendererTypeDefault) { // Display a warning if unable to use the desired renderer warning("Unable to create a '%s' renderer", rendererConfig.c_str()); } GfxBase *renderer = nullptr; #if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS) if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders) { renderer = CreateGfxOpenGLShader(); } #endif #if defined(USE_OPENGL) && !defined(USE_GLES2) if (matchingRendererType == Graphics::kRendererTypeOpenGL) { renderer = CreateGfxOpenGL(); } #endif if (matchingRendererType == Graphics::kRendererTypeTinyGL) { renderer = CreateGfxTinyGL(); } if (!renderer) { error("Unable to create a '%s' renderer", rendererConfig.c_str()); } renderer->setupScreen(screenW, screenH, fullscreen); renderer->loadEmergFont(); return renderer; }