diff options
-rw-r--r-- | intern/ghost/intern/GHOST_DisplayManagerSDL.cpp | 8 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_DisplayManagerSDL.h | 8 | ||||
-rw-r--r-- | source/gameengine/GameLogic/CMakeLists.txt | 4 | ||||
-rw-r--r-- | source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp | 15 |
4 files changed, 26 insertions, 9 deletions
diff --git a/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp b/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp index 1b73329f8bb..4c67616a4c4 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp +++ b/intern/ghost/intern/GHOST_DisplayManagerSDL.cpp @@ -36,7 +36,7 @@ GHOST_DisplayManagerSDL::GHOST_DisplayManagerSDL(GHOST_SystemSDL *system) } GHOST_TSuccess -GHOST_DisplayManagerSDL::getNumDisplays(GHOST_TUns8& numDisplays) +GHOST_DisplayManagerSDL::getNumDisplays(GHOST_TUns8& numDisplays) const { numDisplays= SDL_GetNumVideoDisplays(); return GHOST_kSuccess; @@ -44,7 +44,7 @@ GHOST_DisplayManagerSDL::getNumDisplays(GHOST_TUns8& numDisplays) GHOST_TSuccess GHOST_DisplayManagerSDL::getNumDisplaySettings(GHOST_TUns8 display, - GHOST_TInt32& numSettings) + GHOST_TInt32& numSettings) const { GHOST_ASSERT(display < 1, "Only single display systems are currently supported.\n"); numSettings= GHOST_TInt32(1); @@ -54,7 +54,7 @@ GHOST_TSuccess GHOST_DisplayManagerSDL::getNumDisplaySettings(GHOST_TUns8 displa GHOST_TSuccess GHOST_DisplayManagerSDL::getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, - GHOST_DisplaySetting& setting) + GHOST_DisplaySetting& setting) const { GHOST_ASSERT(display < 1, "Only single display systems are currently supported.\n"); @@ -74,7 +74,7 @@ GHOST_DisplayManagerSDL::getDisplaySetting(GHOST_TUns8 display, GHOST_TSuccess GHOST_DisplayManagerSDL::getCurrentDisplaySetting(GHOST_TUns8 display, - GHOST_DisplaySetting& setting) + GHOST_DisplaySetting& setting) const { return getDisplaySetting(display,GHOST_TInt32(0),setting); } diff --git a/intern/ghost/intern/GHOST_DisplayManagerSDL.h b/intern/ghost/intern/GHOST_DisplayManagerSDL.h index ff8ab13c4fa..297a61f41ff 100644 --- a/intern/ghost/intern/GHOST_DisplayManagerSDL.h +++ b/intern/ghost/intern/GHOST_DisplayManagerSDL.h @@ -46,20 +46,20 @@ public: GHOST_DisplayManagerSDL(GHOST_SystemSDL *system); GHOST_TSuccess - getNumDisplays(GHOST_TUns8& numDisplays); + getNumDisplays(GHOST_TUns8& numDisplays) const; GHOST_TSuccess getNumDisplaySettings(GHOST_TUns8 display, - GHOST_TInt32& numSettings); + GHOST_TInt32& numSettings) const; GHOST_TSuccess getDisplaySetting(GHOST_TUns8 display, GHOST_TInt32 index, - GHOST_DisplaySetting& setting); + GHOST_DisplaySetting& setting) const; GHOST_TSuccess getCurrentDisplaySetting(GHOST_TUns8 display, - GHOST_DisplaySetting& setting); + GHOST_DisplaySetting& setting) const; GHOST_TSuccess setCurrentDisplaySetting(GHOST_TUns8 display, diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt index 64c2af9031b..98255bb8b97 100644 --- a/source/gameengine/GameLogic/CMakeLists.txt +++ b/source/gameengine/GameLogic/CMakeLists.txt @@ -132,6 +132,10 @@ if(WITH_SDL) ) add_definitions(-DWITH_SDL) + + if(WITH_GHOST_SDL) + add_definitions(-DWITH_GHOST_SDL) + endif() endif() blender_add_lib(ge_logic "${SRC}" "${INC}" "${INC_SYS}") diff --git a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp index 0547d97285d..15aeef242b7 100644 --- a/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp +++ b/source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp @@ -88,8 +88,14 @@ SCA_Joystick *SCA_Joystick::GetInstance( short int joyindex ) if (m_refCount == 0) { int i; - // do this once only + // The video subsystem is required for joystick input to work. However, + // when GHOST is running under SDL, video is initialised elsewhere. + // Do this once only. +# ifdef WITH_GHOST_SDL + if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1 ){ +# else if(SDL_InitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO) == -1 ){ +# endif echo("Error-Initializing-SDL: " << SDL_GetError()); return NULL; } @@ -124,7 +130,14 @@ void SCA_Joystick::ReleaseInstance() m_instance[i]= NULL; } + // The video subsystem is required for joystick input to work. However, + // when GHOST is running under SDL, video is freed elsewhere. + // Do this once only. +# ifdef WITH_GHOST_SDL + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); +# else SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_VIDEO); +# endif #endif /* WITH_SDL */ } } |