mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 17:33:05 +00:00
ENGINES: Add a new 'renderer' option to replace 'soft_renderer'
'soft_renderer' was a bool and was not useful to select a renderer in a list with more than two values.
This commit is contained in:
parent
19cc6b41e7
commit
8d5406720c
@ -42,6 +42,8 @@
|
||||
|
||||
#include "audio/musicplugin.h"
|
||||
|
||||
#include "graphics/renderer.h"
|
||||
|
||||
#define DETECTOR_TESTING_HACK
|
||||
#define UPGRADE_ALL_TARGETS_HACK
|
||||
|
||||
@ -115,8 +117,7 @@ static const char HELP_STRING[] =
|
||||
" --talkspeed=NUM Set talk speed for games (default: 179)\n"
|
||||
" --show-fps Set the turn on display FPS info\n"
|
||||
" --no-show-fps Set the turn off display FPS info\n"
|
||||
" --soft-renderer Switch to 3D software renderer\n"
|
||||
" --no-soft-renderer Switch to 3D hardware renderer\n"
|
||||
" --renderer=RENDERER Select renderer (software, opengl, opengl_shaders)\n"
|
||||
" --aspect-ratio Enable aspect ratio correction\n"
|
||||
#ifdef ENABLE_EVENTRECORDER
|
||||
" --record-mode=MODE Specify record mode for event recorder (record, playback,\n"
|
||||
@ -158,7 +159,6 @@ void registerDefaults() {
|
||||
|
||||
// Graphics
|
||||
ConfMan.registerDefault("fullscreen", false);
|
||||
ConfMan.registerDefault("soft_renderer", false);
|
||||
ConfMan.registerDefault("show_fps", false);
|
||||
ConfMan.registerDefault("aspect_ratio", false);
|
||||
|
||||
@ -490,7 +490,10 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha
|
||||
DO_LONG_OPTION("gamma")
|
||||
END_OPTION
|
||||
|
||||
DO_LONG_OPTION_BOOL("soft-renderer")
|
||||
DO_LONG_OPTION("renderer")
|
||||
Graphics::RendererType renderer = Graphics::parseRendererTypeCode(option);
|
||||
if (renderer == Graphics::kRendererTypeDefault)
|
||||
usage("Unrecognized renderer type '%s'", option);
|
||||
END_OPTION
|
||||
|
||||
DO_LONG_OPTION_BOOL("show-fps")
|
||||
|
@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include "common/config-manager.h"
|
||||
#include "graphics/renderer.h"
|
||||
|
||||
#include "engines/grim/debugger.h"
|
||||
#include "engines/grim/md5check.h"
|
||||
@ -34,7 +35,7 @@ Debugger::Debugger() :
|
||||
registerCmd("check_gamedata", WRAP_METHOD(Debugger, cmd_checkFiles));
|
||||
registerCmd("lua_do", WRAP_METHOD(Debugger, cmd_lua_do));
|
||||
registerCmd("jump", WRAP_METHOD(Debugger, cmd_jump));
|
||||
registerCmd("swap_renderer", WRAP_METHOD(Debugger, cmd_swap_renderer));
|
||||
registerCmd("set_renderer", WRAP_METHOD(Debugger, cmd_set_renderer));
|
||||
registerCmd("save", WRAP_METHOD(Debugger, cmd_save));
|
||||
registerCmd("load", WRAP_METHOD(Debugger, cmd_load));
|
||||
}
|
||||
@ -88,11 +89,22 @@ bool Debugger::cmd_jump(int argc, const char **argv) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Debugger::cmd_swap_renderer(int argc, const char **argv) {
|
||||
bool accel = ConfMan.getBool("soft_renderer");
|
||||
ConfMan.setBool("soft_renderer", !accel);
|
||||
bool Debugger::cmd_set_renderer(int argc, const char **argv) {
|
||||
if (argc < 2) {
|
||||
debugPrintf("Usage: set_renderer <renderer>\n");
|
||||
debugPrintf("Where <renderer> is 'software', 'opengl' or 'opengl_shaders'\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
Graphics::RendererType renderer = Graphics::parseRendererTypeCode(argv[1]);
|
||||
if (renderer == Graphics::kRendererTypeDefault) {
|
||||
debugPrintf("Invalid renderer '%s'\n", argv[1]);
|
||||
return true;
|
||||
}
|
||||
|
||||
ConfMan.set("renderer", Graphics::getRendererTypeCode(renderer));
|
||||
g_grim->changeHardwareState();
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Debugger::cmd_save(int argc, const char **argv) {
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
bool cmd_checkFiles(int argc, const char **argv);
|
||||
bool cmd_lua_do(int argc, const char **argv);
|
||||
bool cmd_jump(int argc, const char **argv);
|
||||
bool cmd_swap_renderer(int argc, const char **argv);
|
||||
bool cmd_set_renderer(int argc, const char **argv);
|
||||
bool cmd_save(int argc, const char **argv);
|
||||
bool cmd_load(int argc, const char **argv);
|
||||
};
|
||||
|
@ -308,6 +308,7 @@ protected:
|
||||
// Factory-like functions:
|
||||
|
||||
GfxBase *CreateGfxOpenGL();
|
||||
GfxBase *CreateGfxOpenGLShader();
|
||||
GfxBase *CreateGfxTinyGL();
|
||||
|
||||
extern GfxBase *g_driver;
|
||||
|
@ -205,7 +205,7 @@ Math::Matrix4 makeFrustumMatrix(double left, double right, double bottom, double
|
||||
return proj;
|
||||
}
|
||||
|
||||
GfxBase *CreateGfxOpenGL() {
|
||||
GfxBase *CreateGfxOpenGLShader() {
|
||||
return new GfxOpenGLS();
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "common/translation.h"
|
||||
|
||||
#include "graphics/pixelbuffer.h"
|
||||
#include "graphics/renderer.h"
|
||||
|
||||
#include "gui/error.h"
|
||||
#include "gui/gui-manager.h"
|
||||
@ -99,7 +100,6 @@ GrimEngine::GrimEngine(OSystem *syst, uint32 gameFlags, GrimGameType gameType, C
|
||||
g_imuse = nullptr;
|
||||
|
||||
//Set default settings
|
||||
ConfMan.registerDefault("soft_renderer", false);
|
||||
ConfMan.registerDefault("engine_speed", 60);
|
||||
ConfMan.registerDefault("fullscreen", false);
|
||||
ConfMan.registerDefault("show_fps", false);
|
||||
@ -228,23 +228,32 @@ LuaBase *GrimEngine::createLua() {
|
||||
return new Lua_V1();
|
||||
}
|
||||
|
||||
void GrimEngine::createRenderer() {
|
||||
#ifdef USE_OPENGL
|
||||
_softRenderer = ConfMan.getBool("soft_renderer");
|
||||
#endif
|
||||
GfxBase *GrimEngine::createRenderer() {
|
||||
Common::String rendererConfig = ConfMan.get("renderer");
|
||||
Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig);
|
||||
Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType);
|
||||
|
||||
if (!_softRenderer && !g_system->hasFeature(OSystem::kFeatureOpenGL)) {
|
||||
warning("gfx backend doesn't support hardware rendering");
|
||||
_softRenderer = true;
|
||||
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 (_softRenderer) {
|
||||
g_driver = CreateGfxTinyGL();
|
||||
#ifdef USE_OPENGL
|
||||
} else {
|
||||
g_driver = CreateGfxOpenGL();
|
||||
#endif
|
||||
_softRenderer = matchingRendererType == Graphics::kRendererTypeTinyGL;
|
||||
|
||||
#if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
|
||||
if (matchingRendererType == Graphics::kRendererTypeOpenGLShaders) {
|
||||
return CreateGfxOpenGLShader();
|
||||
}
|
||||
#elif defined(USE_OPENGL)
|
||||
if (matchingRendererType == Graphics::kRendererTypeOpenGL) {
|
||||
return CreateGfxOpenGL();
|
||||
}
|
||||
#endif
|
||||
if (matchingRendererType == Graphics::kRendererTypeTinyGL) {
|
||||
return CreateGfxTinyGL();
|
||||
}
|
||||
|
||||
error("Unable to create a '%s' renderer", rendererConfig.c_str());
|
||||
}
|
||||
|
||||
const char *GrimEngine::getUpdateFilename() {
|
||||
@ -317,7 +326,7 @@ Common::Error GrimEngine::run() {
|
||||
g_sound = new SoundPlayer();
|
||||
|
||||
bool fullscreen = ConfMan.getBool("fullscreen");
|
||||
createRenderer();
|
||||
g_driver = createRenderer();
|
||||
g_driver->setupScreen(640, 480, fullscreen);
|
||||
g_driver->loadEmergFont();
|
||||
|
||||
@ -767,7 +776,7 @@ void GrimEngine::mainLoop() {
|
||||
clearPools();
|
||||
|
||||
delete g_driver;
|
||||
createRenderer();
|
||||
g_driver = createRenderer();
|
||||
g_driver->setupScreen(screenWidth, screenHeight, fullscreen);
|
||||
savegameRestore();
|
||||
|
||||
|
@ -47,6 +47,7 @@ class TextObject;
|
||||
class PrimitiveObject;
|
||||
class Debugger;
|
||||
class LuaBase;
|
||||
class GfxBase;
|
||||
|
||||
enum GrimGameType {
|
||||
GType_GRIM,
|
||||
@ -204,7 +205,7 @@ protected:
|
||||
void cameraPostChangeHandle(int num);
|
||||
void buildActiveActorsList();
|
||||
void savegameCallback();
|
||||
void createRenderer();
|
||||
GfxBase *createRenderer();
|
||||
void playAspyrLogo();
|
||||
virtual LuaBase *createLua();
|
||||
virtual void updateNormalMode();
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "common/config-manager.h"
|
||||
|
||||
#include "graphics/pixelbuffer.h"
|
||||
#include "graphics/renderer.h"
|
||||
#include "graphics/colormasks.h"
|
||||
|
||||
#include "math/matrix3.h"
|
||||
@ -289,7 +290,11 @@ void Lua_V1::Is3DHardwareEnabled() {
|
||||
void Lua_V1::SetHardwareState() {
|
||||
// changing only in config setup (software/hardware rendering)
|
||||
bool accel = getbool(1);
|
||||
ConfMan.setBool("soft_renderer", !accel);
|
||||
|
||||
Graphics::RendererType renderer = accel ? Graphics::kRendererTypeOpenGL : Graphics::kRendererTypeTinyGL;
|
||||
renderer = Graphics::getBestMatchingAvailableRendererType(renderer);
|
||||
ConfMan.set("renderer", Graphics::getRendererTypeCode(renderer));
|
||||
|
||||
g_grim->changeHardwareState();
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,9 @@
|
||||
|
||||
#include "engines/myst3/gfx.h"
|
||||
|
||||
#include "common/config-manager.h"
|
||||
|
||||
#include "graphics/renderer.h"
|
||||
#include "graphics/surface.h"
|
||||
|
||||
#include "math/glmath.h"
|
||||
@ -208,4 +211,30 @@ void BaseRenderer::flipVertical(Graphics::Surface *s) {
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
#elif defined(USE_OPENGL)
|
||||
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());
|
||||
}
|
||||
|
||||
} // End of namespace Myst3
|
||||
|
@ -144,6 +144,7 @@ protected:
|
||||
Renderer *CreateGfxOpenGL(OSystem *system);
|
||||
Renderer *CreateGfxOpenGLShader(OSystem *system);
|
||||
Renderer *CreateGfxTinyGL(OSystem *system);
|
||||
Renderer *createRenderer(OSystem *system);
|
||||
|
||||
} // End of namespace Myst3
|
||||
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "image/jpeg.h"
|
||||
|
||||
#include "graphics/conversion.h"
|
||||
#include "graphics/renderer.h"
|
||||
#include "graphics/yuv_to_rgb.h"
|
||||
|
||||
#include "math/vector2d.h"
|
||||
@ -136,7 +137,10 @@ Myst3Engine::~Myst3Engine() {
|
||||
|
||||
bool Myst3Engine::hasFeature(EngineFeature f) const {
|
||||
// The TinyGL renderer does not support arbitrary resolutions for now
|
||||
bool softRenderer = ConfMan.getBool("soft_renderer");
|
||||
Common::String rendererConfig = ConfMan.get("renderer");
|
||||
Graphics::RendererType desiredRendererType = Graphics::parseRendererTypeCode(rendererConfig);
|
||||
Graphics::RendererType matchingRendererType = Graphics::getBestMatchingAvailableRendererType(desiredRendererType);
|
||||
bool softRenderer = matchingRendererType == Graphics::kRendererTypeTinyGL;
|
||||
|
||||
return
|
||||
(f == kSupportsRTL) ||
|
||||
@ -150,19 +154,7 @@ Common::Error Myst3Engine::run() {
|
||||
return Common::kUserCanceled;
|
||||
}
|
||||
|
||||
bool softRenderer = ConfMan.getBool("soft_renderer");
|
||||
|
||||
if (softRenderer) {
|
||||
_gfx = CreateGfxTinyGL(_system);
|
||||
} else {
|
||||
#if defined(USE_GLES2) || defined(USE_OPENGL_SHADERS)
|
||||
_gfx = CreateGfxOpenGLShader(_system);
|
||||
#elif defined(USE_OPENGL)
|
||||
_gfx = CreateGfxOpenGL(_system);
|
||||
#else
|
||||
_gfx = CreateGfxTinyGL(_system);
|
||||
#endif
|
||||
}
|
||||
_gfx = createRenderer(_system);
|
||||
_sound = new Sound(this);
|
||||
_ambient = new Ambient(this);
|
||||
_rnd = new Common::RandomSource("sprint");
|
||||
|
Loading…
x
Reference in New Issue
Block a user