Merge pull request #409 from lordhoto/rtti

Enable RTTI and clean up the code by exploiting the availability of dynamic_cast.
This commit is contained in:
Johannes Schickel 2014-01-23 15:23:12 -08:00
commit 2fe303ce3f
11 changed files with 38 additions and 48 deletions

View file

@ -33,8 +33,9 @@ ifeq "$(HAVE_GCC)" "1"
#CXXFLAGS+= -Wmissing-format-attribute #CXXFLAGS+= -Wmissing-format-attribute
ifneq "$(BACKEND)" "tizen" ifneq "$(BACKEND)" "tizen"
# Disable RTTI and exceptions. These settings cause tizen apps to crash # Disable exceptions. This setting causes tizen apps to crash
CXXFLAGS+= -fno-rtti -fno-exceptions # TODO: Does this still apply after enabling RTTI again?
CXXFLAGS+= -fno-exceptions
endif endif
ifneq "$(HAVE_CLANG)" "1" ifneq "$(HAVE_CLANG)" "1"

View file

@ -37,27 +37,6 @@ class GraphicsManager : public PaletteManager {
public: public:
virtual ~GraphicsManager() {} virtual ~GraphicsManager() {}
/**
* Makes this graphics manager active. That means it should be ready to
* process inputs now. However, even without being active it should be
* able to query the supported modes and other bits.
*
* HACK: Actually this is specific to SdlGraphicsManager subclasses.
* But sadly we cannot cast from GraphicsManager to SdlGraphicsManager
* because there is no relation between these two.
*/
virtual void activateManager() {}
/**
* Makes this graphics manager inactive. This should allow another
* graphics manager to become active again.
*
* HACK: Actually this is specific to SdlGraphicsManager subclasses.
* But sadly we cannot cast from GraphicsManager to SdlGraphicsManager
* because there is no relation between these two.
*/
virtual void deactivateManager() {}
virtual bool hasFeature(OSystem::Feature f) = 0; virtual bool hasFeature(OSystem::Feature f) = 0;
virtual void setFeatureState(OSystem::Feature f, bool enable) = 0; virtual void setFeatureState(OSystem::Feature f, bool enable) = 0;
virtual bool getFeatureState(OSystem::Feature f) = 0; virtual bool getFeatureState(OSystem::Feature f) = 0;

View file

@ -47,7 +47,7 @@ enum {
GFX_NEAREST = 1 GFX_NEAREST = 1
}; };
class OpenGLGraphicsManager : public GraphicsManager { class OpenGLGraphicsManager : virtual public GraphicsManager {
public: public:
OpenGLGraphicsManager(); OpenGLGraphicsManager();
virtual ~OpenGLGraphicsManager(); virtual ~OpenGLGraphicsManager();

View file

@ -73,8 +73,7 @@ OpenGLSdlGraphicsManager::~OpenGLSdlGraphicsManager() {
} }
void OpenGLSdlGraphicsManager::activateManager() { void OpenGLSdlGraphicsManager::activateManager() {
OpenGLGraphicsManager::activateManager(); SdlGraphicsManager::activateManager();
initEventSource();
// Register the graphics manager as a event observer // Register the graphics manager as a event observer
g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false); g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
@ -86,8 +85,7 @@ void OpenGLSdlGraphicsManager::deactivateManager() {
g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this); g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
} }
deinitEventSource(); SdlGraphicsManager::deactivateManager();
OpenGLGraphicsManager::deactivateManager();
} }
bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) { bool OpenGLSdlGraphicsManager::hasFeature(OSystem::Feature f) {

View file

@ -31,10 +31,10 @@ SdlGraphicsManager::SdlGraphicsManager(SdlEventSource *source)
SdlGraphicsManager::~SdlGraphicsManager() { SdlGraphicsManager::~SdlGraphicsManager() {
} }
void SdlGraphicsManager::initEventSource() { void SdlGraphicsManager::activateManager() {
_eventSource->setGraphicsManager(this); _eventSource->setGraphicsManager(this);
} }
void SdlGraphicsManager::deinitEventSource() { void SdlGraphicsManager::deactivateManager() {
_eventSource->setGraphicsManager(0); _eventSource->setGraphicsManager(0);
} }

View file

@ -23,6 +23,8 @@
#ifndef BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H #ifndef BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
#define BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H #define BACKENDS_GRAPHICS_SDL_SDLGRAPHICS_H
#include "backends/graphics/graphics.h"
#include "common/rect.h" #include "common/rect.h"
class SdlEventSource; class SdlEventSource;
@ -31,15 +33,25 @@ class SdlEventSource;
* Base class for a SDL based graphics manager. * Base class for a SDL based graphics manager.
* *
* It features a few extra a few extra features required by SdlEventSource. * It features a few extra a few extra features required by SdlEventSource.
* FIXME/HACK:
* Note it does not inherit from GraphicsManager to avoid a diamond inheritance
* in the current OpenGLSdlGraphicsManager.
*/ */
class SdlGraphicsManager { class SdlGraphicsManager : virtual public GraphicsManager {
public: public:
SdlGraphicsManager(SdlEventSource *source); SdlGraphicsManager(SdlEventSource *source);
virtual ~SdlGraphicsManager(); virtual ~SdlGraphicsManager();
/**
* Makes this graphics manager active. That means it should be ready to
* process inputs now. However, even without being active it should be
* able to query the supported modes and other bits.
*/
virtual void activateManager();
/**
* Makes this graphics manager inactive. This should allow another
* graphics manager to become active again.
*/
virtual void deactivateManager();
/** /**
* Notify the graphics manager that the graphics needs to be redrawn, since * Notify the graphics manager that the graphics needs to be redrawn, since
* the application window was modified. * the application window was modified.
@ -80,9 +92,6 @@ public:
virtual void notifyMousePos(Common::Point mouse) = 0; virtual void notifyMousePos(Common::Point mouse) = 0;
protected: protected:
void initEventSource();
void deinitEventSource();
SdlEventSource *_eventSource; SdlEventSource *_eventSource;
}; };

View file

@ -198,8 +198,7 @@ SurfaceSdlGraphicsManager::~SurfaceSdlGraphicsManager() {
} }
void SurfaceSdlGraphicsManager::activateManager() { void SurfaceSdlGraphicsManager::activateManager() {
GraphicsManager::activateManager(); SdlGraphicsManager::activateManager();
initEventSource();
// Register the graphics manager as a event observer // Register the graphics manager as a event observer
g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false); g_system->getEventManager()->getEventDispatcher()->registerObserver(this, 10, false);
@ -211,8 +210,7 @@ void SurfaceSdlGraphicsManager::deactivateManager() {
g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this); g_system->getEventManager()->getEventDispatcher()->unregisterObserver(this);
} }
deinitEventSource(); SdlGraphicsManager::deactivateManager();
GraphicsManager::deactivateManager();
} }
bool SurfaceSdlGraphicsManager::hasFeature(OSystem::Feature f) { bool SurfaceSdlGraphicsManager::hasFeature(OSystem::Feature f) {

View file

@ -75,7 +75,7 @@ public:
/** /**
* SDL graphics manager * SDL graphics manager
*/ */
class SurfaceSdlGraphicsManager : public GraphicsManager, public SdlGraphicsManager, public Common::EventObserver { class SurfaceSdlGraphicsManager : public SdlGraphicsManager, public Common::EventObserver {
public: public:
SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource); SurfaceSdlGraphicsManager(SdlEventSource *sdlEventSource);
virtual ~SurfaceSdlGraphicsManager(); virtual ~SurfaceSdlGraphicsManager();

View file

@ -91,7 +91,7 @@ OSystem_SDL::~OSystem_SDL() {
delete _savefileManager; delete _savefileManager;
_savefileManager = 0; _savefileManager = 0;
if (_graphicsManager) { if (_graphicsManager) {
_graphicsManager->deactivateManager(); dynamic_cast<SdlGraphicsManager *>(_graphicsManager)->deactivateManager();
} }
delete _graphicsManager; delete _graphicsManager;
_graphicsManager = 0; _graphicsManager = 0;
@ -240,7 +240,7 @@ void OSystem_SDL::initBackend() {
// so the virtual keyboard can be initialized, but we have to add the // so the virtual keyboard can be initialized, but we have to add the
// graphics manager as an event observer after initializing the event // graphics manager as an event observer after initializing the event
// manager. // manager.
_graphicsManager->activateManager(); dynamic_cast<SdlGraphicsManager *>(_graphicsManager)->activateManager();
} }
#if defined(USE_TASKBAR) #if defined(USE_TASKBAR)
@ -579,14 +579,14 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
// manager, delete and create the new mode graphics manager // manager, delete and create the new mode graphics manager
if (_graphicsMode >= _firstGLMode && mode < _firstGLMode) { if (_graphicsMode >= _firstGLMode && mode < _firstGLMode) {
debug(1, "switching to plain SDL graphics"); debug(1, "switching to plain SDL graphics");
_graphicsManager->deactivateManager(); dynamic_cast<SdlGraphicsManager *>(_graphicsManager)->deactivateManager();
delete _graphicsManager; delete _graphicsManager;
_graphicsManager = new SurfaceSdlGraphicsManager(_eventSource); _graphicsManager = new SurfaceSdlGraphicsManager(_eventSource);
switchedManager = true; switchedManager = true;
} else if (_graphicsMode < _firstGLMode && mode >= _firstGLMode) { } else if (_graphicsMode < _firstGLMode && mode >= _firstGLMode) {
debug(1, "switching to OpenGL graphics"); debug(1, "switching to OpenGL graphics");
_graphicsManager->deactivateManager(); dynamic_cast<SdlGraphicsManager *>(_graphicsManager)->deactivateManager();
delete _graphicsManager; delete _graphicsManager;
_graphicsManager = new OpenGLSdlGraphicsManager(_desktopWidth, _desktopHeight, _eventSource); _graphicsManager = new OpenGLSdlGraphicsManager(_desktopWidth, _desktopHeight, _eventSource);
@ -596,7 +596,7 @@ bool OSystem_SDL::setGraphicsMode(int mode) {
_graphicsMode = mode; _graphicsMode = mode;
if (switchedManager) { if (switchedManager) {
_graphicsManager->activateManager(); dynamic_cast<SdlGraphicsManager *>(_graphicsManager)->activateManager();
_graphicsManager->beginGFXTransaction(); _graphicsManager->beginGFXTransaction();
#ifdef USE_RGB_COLOR #ifdef USE_RGB_COLOR

5
configure vendored
View file

@ -2046,18 +2046,21 @@ case $_host_os in
CXXFLAGS="$CXXFLAGS -march=armv5te" CXXFLAGS="$CXXFLAGS -march=armv5te"
CXXFLAGS="$CXXFLAGS -mtune=xscale" CXXFLAGS="$CXXFLAGS -mtune=xscale"
CXXFLAGS="$CXXFLAGS -msoft-float" CXXFLAGS="$CXXFLAGS -msoft-float"
ABI="armeabi"
;; ;;
android-v7a) android-v7a)
CXXFLAGS="$CXXFLAGS -march=armv7-a" CXXFLAGS="$CXXFLAGS -march=armv7-a"
CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp" CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
CXXFLAGS="$CXXFLAGS -mfpu=vfp" CXXFLAGS="$CXXFLAGS -mfpu=vfp"
LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8" LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8"
ABI="armeabi-v7a"
;; ;;
ouya) ouya)
CXXFLAGS="$CXXFLAGS -march=armv7-a" CXXFLAGS="$CXXFLAGS -march=armv7-a"
CXXFLAGS="$CXXFLAGS -mtune=cortex-a9" CXXFLAGS="$CXXFLAGS -mtune=cortex-a9"
CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp" CXXFLAGS="$CXXFLAGS -mfloat-abi=softfp"
CXXFLAGS="$CXXFLAGS -mfpu=neon" CXXFLAGS="$CXXFLAGS -mfpu=neon"
ABI="armeabi-v7a"
;; ;;
esac esac
CXXFLAGS="$CXXFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm" CXXFLAGS="$CXXFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm"
@ -2083,6 +2086,8 @@ case $_host_os in
CXXFLAGS="$CXXFLAGS -Wno-psabi" CXXFLAGS="$CXXFLAGS -Wno-psabi"
LDFLAGS="$LDFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm" LDFLAGS="$LDFLAGS --sysroot=$ANDROID_NDK/platforms/android-4/arch-arm"
LDFLAGS="$LDFLAGS -mthumb-interwork" LDFLAGS="$LDFLAGS -mthumb-interwork"
LDFLAGS="$LDFLAGS -L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/`$CXX -dumpversion`/libs/$ABI/"
LIBS="$LIBS -lsupc++"
add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK" add_line_to_config_mk "ANDROID_SDK = $ANDROID_SDK"
_seq_midi=no _seq_midi=no
;; ;;

View file

@ -33,6 +33,6 @@
#define DISABLE_EDIT_AND_CONTINUE "tinsel,tony,scummvm" // Comma separated list of projects that need Edit&Continue to be disabled for co-routine support (the main project is automatically added) #define DISABLE_EDIT_AND_CONTINUE "tinsel,tony,scummvm" // Comma separated list of projects that need Edit&Continue to be disabled for co-routine support (the main project is automatically added)
//#define ADDITIONAL_LIBRARY "" // Add a single library to the list of externally linked libraries //#define ADDITIONAL_LIBRARY "" // Add a single library to the list of externally linked libraries
#define NEEDS_RTTI 0 // Enable RTTI globally #define NEEDS_RTTI 1 // Enable RTTI globally
#endif // TOOLS_CREATE_PROJECT_CONFIG_H #endif // TOOLS_CREATE_PROJECT_CONFIG_H