[Scummvm-cvs-logs] SF.net SVN: scummvm:[51493] scummvm/branches/gsoc2010-opengl/backends
vgvgf at users.sourceforge.net
vgvgf at users.sourceforge.net
Fri Jul 30 05:31:05 CEST 2010
Revision: 51493
http://scummvm.svn.sourceforge.net/scummvm/?rev=51493&view=rev
Author: vgvgf
Date: 2010-07-30 03:31:05 +0000 (Fri, 30 Jul 2010)
Log Message:
-----------
SDL/OPENGL: Add ability to switch between SDL and OpenGL graphics managers.
OSystem_SDL will create a merged list of all graphics modes from SDL and OpenGL. When the user changes the graphics mode in options and restarts ScummVM should switch to that graphics mode in the corresponding graphics manager.
Modified Paths:
--------------
scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.cpp
scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.h
scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.cpp
scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.h
scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.cpp
scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.h
Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.cpp
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.cpp 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.cpp 2010-07-30 03:31:05 UTC (rev 51493)
@@ -119,6 +119,10 @@
{0, 0, 0}
};
+const OSystem::GraphicsMode *OpenGLGraphicsManager::supportedGraphicsModes() {
+ return s_supportedGraphicsModes;
+}
+
const OSystem::GraphicsMode *OpenGLGraphicsManager::getSupportedGraphicsModes() const {
return s_supportedGraphicsModes;
}
Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.h
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.h 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/opengl/opengl-graphics.h 2010-07-30 03:31:05 UTC (rev 51493)
@@ -55,6 +55,7 @@
virtual void setFeatureState(OSystem::Feature f, bool enable);
virtual bool getFeatureState(OSystem::Feature f);
+ static const OSystem::GraphicsMode *supportedGraphicsModes();
virtual const OSystem::GraphicsMode *getSupportedGraphicsModes() const;
virtual int getDefaultGraphicsMode() const;
virtual bool setGraphicsMode(int mode);
Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.cpp
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.cpp 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.cpp 2010-07-30 03:31:05 UTC (rev 51493)
@@ -240,6 +240,10 @@
}
}
+const OSystem::GraphicsMode *SdlGraphicsManager::supportedGraphicsModes() {
+ return s_supportedGraphicsModes;
+}
+
const OSystem::GraphicsMode *SdlGraphicsManager::getSupportedGraphicsModes() const {
return s_supportedGraphicsModes;
}
Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.h
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.h 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/sdl/sdl-graphics.h 2010-07-30 03:31:05 UTC (rev 51493)
@@ -82,6 +82,7 @@
virtual void setFeatureState(OSystem::Feature f, bool enable);
virtual bool getFeatureState(OSystem::Feature f);
+ static const OSystem::GraphicsMode *supportedGraphicsModes();
virtual const OSystem::GraphicsMode *getSupportedGraphicsModes() const;
virtual int getDefaultGraphicsMode() const;
virtual bool setGraphicsMode(int mode);
Modified: scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.cpp
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.cpp 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.cpp 2010-07-30 03:31:05 UTC (rev 51493)
@@ -43,6 +43,12 @@
OSystem_SDL::OSystem_SDL()
:
+#ifdef USE_OPENGL
+ _graphicsModes(0),
+ _graphicsMode(0),
+ _sdlModesCount(0),
+ _glModesCount(0),
+#endif
_inited(false),
_initedSDL(false),
_mixerManager(0) {
@@ -87,26 +93,24 @@
if (_graphicsManager == 0) {
#ifdef USE_OPENGL
- /*if (ConfMan.hasKey("gfx_mode")) {
+ // Setup a list with both SDL and OpenGL graphics modes
+ setupGraphicsModes();
+
+ if (ConfMan.hasKey("gfx_mode")) {
Common::String gfxMode(ConfMan.get("gfx_mode"));
-
- _openglGraphicsMode = OpenGLSdlGraphicsManager::getSupportedGraphicsModes();
-
bool use_opengl = false;
-
- while (_openglGraphicsMode->name) {
- if (scumm_stricmp(_openglGraphicsMode->name, gfxMode.c_str()) == 0)
+ const OSystem::GraphicsMode *mode = OpenGLSdlGraphicsManager::supportedGraphicsModes();
+ while (mode->name) {
+ if (scumm_stricmp(mode->name, gfxMode.c_str()) == 0)
use_opengl = true;
- _openglGraphicsMode++;
+ mode++;
}
- if (use_opengl) {
+ // If the gfx_mode is from OpenGL, create the OpenGL graphics manager
+ if (use_opengl)
_graphicsManager = new OpenGLSdlGraphicsManager();
- ((OpenGLSdlGraphicsManager *)_graphicsManager)->init();
- }
- }*/
- _graphicsManager = new OpenGLSdlGraphicsManager();
+ }
#endif
if (_graphicsManager == 0)
_graphicsManager = new SdlGraphicsManager();
@@ -202,6 +206,10 @@
delete _mutexManager;
_mutexManager = 0;
+#ifdef USE_OPENGL
+ free((void *)_graphicsModes),
+#endif
+
SDL_Quit();
}
@@ -297,3 +305,91 @@
assert(_mixerManager);
return _mixerManager;
}
+
+#ifdef USE_OPENGL
+
+const OSystem::GraphicsMode *OSystem_SDL::getSupportedGraphicsModes() const {
+ return _graphicsModes;
+}
+
+int OSystem_SDL::getDefaultGraphicsMode() const {
+ if (_graphicsMode < _sdlModesCount)
+ return _graphicsManager->getDefaultGraphicsMode();
+ else
+ return _graphicsManager->getDefaultGraphicsMode() + _sdlModesCount;
+}
+
+bool OSystem_SDL::setGraphicsMode(int mode) {
+ const OSystem::GraphicsMode *srcMode;
+ int i;
+ if (mode < _sdlModesCount) {
+ srcMode = SdlGraphicsManager::supportedGraphicsModes();
+ i = 0;
+ } else {
+ srcMode = OpenGLSdlGraphicsManager::supportedGraphicsModes();
+ i = _sdlModesCount;
+ }
+ while (srcMode->name) {
+ if (i == mode) {
+ if (_graphicsMode >= _sdlModesCount && mode < _sdlModesCount) {
+ delete _graphicsManager;
+ _graphicsManager = new SdlGraphicsManager();
+ _graphicsManager->beginGFXTransaction();
+ } else if (_graphicsMode < _sdlModesCount && mode >= _sdlModesCount) {
+ delete _graphicsManager;
+ _graphicsManager = new OpenGLSdlGraphicsManager();
+ _graphicsManager->beginGFXTransaction();
+ }
+ _graphicsMode = mode;
+ return _graphicsManager->setGraphicsMode(srcMode->id);
+ }
+ i++;
+ srcMode++;
+ }
+ return false;
+}
+
+int OSystem_SDL::getGraphicsMode() const {
+ return _graphicsMode;
+}
+
+void OSystem_SDL::setupGraphicsModes() {
+ const OSystem::GraphicsMode *sdlGraphicsModes = SdlGraphicsManager::supportedGraphicsModes();
+ const OSystem::GraphicsMode *openglGraphicsModes = OpenGLSdlGraphicsManager::supportedGraphicsModes();
+ _sdlModesCount = 0;
+ _glModesCount = 0;
+
+ // Count the number of graphics modes
+ const OSystem::GraphicsMode *srcMode = sdlGraphicsModes;
+ while (srcMode->name) {
+ _sdlModesCount++;
+ srcMode++;
+ }
+ srcMode = openglGraphicsModes;
+ while (srcMode->name) {
+ _glModesCount ++;
+ srcMode++;
+ }
+
+ // Allocate enough space for merged array of modes
+ _graphicsModes = (OSystem::GraphicsMode *)malloc(sizeof(OSystem::GraphicsMode) * (_glModesCount + _sdlModesCount + 1));
+
+ // Copy SDL graphics modes
+ memcpy((void *)_graphicsModes, sdlGraphicsModes, _sdlModesCount * sizeof(OSystem::GraphicsMode));
+
+ // Copy OpenGL graphics modes
+ memcpy((void *)(_graphicsModes + _sdlModesCount), openglGraphicsModes, _glModesCount * sizeof(OSystem::GraphicsMode));
+
+ // Set a null mode at the end
+ memset((void *)(_graphicsModes + _sdlModesCount + _glModesCount), 0, sizeof(OSystem::GraphicsMode));
+
+ // Set new internal ids for all modes
+ int i = 0;
+ OSystem::GraphicsMode * mode = _graphicsModes;
+ while (mode->name) {
+ mode->id = i++;
+ mode++;
+ }
+}
+
+#endif
Modified: scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.h
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.h 2010-07-30 03:06:57 UTC (rev 51492)
+++ scummvm/branches/gsoc2010-opengl/backends/platform/sdl/sdl.h 2010-07-30 03:31:05 UTC (rev 51493)
@@ -103,6 +103,23 @@
* of ScummVM will be saved.
*/
virtual Common::String getDefaultConfigFileName();
+
+#ifdef USE_OPENGL
+ OSystem::GraphicsMode *_graphicsModes;
+ int _graphicsMode;
+ int _sdlModesCount;
+ int _glModesCount;
+
+ /**
+ * Creates the merged graphics modes list
+ */
+ virtual void setupGraphicsModes();
+
+ virtual const OSystem::GraphicsMode *getSupportedGraphicsModes() const;
+ virtual int getDefaultGraphicsMode() const;
+ virtual bool setGraphicsMode(int mode);
+ virtual int getGraphicsMode() const;
+#endif
};
#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list