mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-22 18:30:27 +01:00
Merge pull request #24 from ptitSeb/master
More OpenPandora support (special keymap) and optionnal Multi-Threading.
This commit is contained in:
commit
dc2c869cfc
|
@ -152,7 +152,10 @@ endif()
|
||||||
|
|
||||||
|
|
||||||
# !!! FIXME: I currently force this, but you shouldn't _have_ to.
|
# !!! FIXME: I currently force this, but you shouldn't _have_ to.
|
||||||
add_definitions(-DSINGLE_THREADED=1)
|
option(USE_SINGLE_THREAD "Use Single Threaded version" TRUE)
|
||||||
|
if(USE_SINGLE_THREAD)
|
||||||
|
add_definitions(-DSINGLE_THREADED=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
include_directories(
|
include_directories(
|
||||||
|
@ -585,6 +588,22 @@ if (USE_I386_ASM)
|
||||||
list(APPEND ADDITIONAL_ENGINE_SRCS SoundMixer386.o)
|
list(APPEND ADDITIONAL_ENGINE_SRCS SoundMixer386.o)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(USE_SINGLE_THREAD)
|
||||||
|
set(SYNCHRO_SRCS
|
||||||
|
Engine/Base/NullSynchronization.cpp # single threaded.
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
#!! TODO Win32/Linux case
|
||||||
|
set(SYNCHRO_SRCS
|
||||||
|
Engine/Base/Unix/UnixSynchronization.cpp # multithreaded Unix.
|
||||||
|
#Engine/Base/SDL/SDLSynchronization.cpp
|
||||||
|
#Engine/Base/SDL/SDLThreadLocalStorage.cpp # multithreaded Unix.
|
||||||
|
)
|
||||||
|
#Engine/Base/Registry.cpp # Windows only.
|
||||||
|
#Engine/Base/StackDump.cpp # Windows only.
|
||||||
|
#Engine/Base/Win32/Win32Synchronization.cpp # Windows only.
|
||||||
|
endif()
|
||||||
|
|
||||||
set(ENGINE_SRCS
|
set(ENGINE_SRCS
|
||||||
${ENGINE_ENTITIES_CPP}
|
${ENGINE_ENTITIES_CPP}
|
||||||
Engine/Engine.cpp
|
Engine/Engine.cpp
|
||||||
|
@ -623,12 +642,7 @@ set(ENGINE_SRCS
|
||||||
Engine/Base/SDL/SDLTimer.cpp
|
Engine/Base/SDL/SDLTimer.cpp
|
||||||
Engine/Base/SDL/SDLInput.cpp
|
Engine/Base/SDL/SDLInput.cpp
|
||||||
Engine/Base/SDL/SDLEvents.cpp
|
Engine/Base/SDL/SDLEvents.cpp
|
||||||
Engine/Base/NullSynchronization.cpp # single threaded.
|
${SYNCHRO_SRCS}
|
||||||
#Engine/Base/Unix/UnixSynchronization.cpp # multithreaded Unix.
|
|
||||||
#Engine/Base/SDL/SDLThreadLocalStorage.cpp # multithreaded Unix.
|
|
||||||
#Engine/Base/Registry.cpp # Windows only.
|
|
||||||
#Engine/Base/StackDump.cpp # Windows only.
|
|
||||||
#Engine/Base/Win32/Win32Synchronization.cpp # Windows only.
|
|
||||||
Engine/Brushes/Brush.cpp
|
Engine/Brushes/Brush.cpp
|
||||||
Engine/Brushes/BrushIO.cpp
|
Engine/Brushes/BrushIO.cpp
|
||||||
Engine/Brushes/BrushShadows.cpp
|
Engine/Brushes/BrushShadows.cpp
|
||||||
|
|
0
Sources/Engine/Base/Lists.cpp
Normal file → Executable file
0
Sources/Engine/Base/Lists.cpp
Normal file → Executable file
22
Sources/Engine/Base/SDL/SDLEvents.cpp
Normal file → Executable file
22
Sources/Engine/Base/SDL/SDLEvents.cpp
Normal file → Executable file
|
@ -50,6 +50,13 @@ BOOL PeekMessage(MSG *msg, void *hwnd, UINT wMsgFilterMin,
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
if (sdlevent.key.keysym.sym == SDLK_BACKQUOTE)
|
if (sdlevent.key.keysym.sym == SDLK_BACKQUOTE)
|
||||||
msg->unicode = '~'; // !!! FIXME: this is all a hack.
|
msg->unicode = '~'; // !!! FIXME: this is all a hack.
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
if(sdlevent.key.keysym.sym == SDLK_RCTRL) {
|
||||||
|
msg->message = (sdlevent.type==SDL_KEYDOWN)?WM_RBUTTONDOWN:WM_RBUTTONUP;
|
||||||
|
} else if(sdlevent.key.keysym.sym == SDLK_RSHIFT) {
|
||||||
|
msg->message = (sdlevent.type==SDL_KEYDOWN)?WM_LBUTTONDOWN:WM_LBUTTONUP;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
msg->wParam = sdlevent.key.keysym.sym;
|
msg->wParam = sdlevent.key.keysym.sym;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -107,17 +114,28 @@ void DispatchMessage(MSG *msg)
|
||||||
SHORT GetKeyState(int vk)
|
SHORT GetKeyState(int vk)
|
||||||
{
|
{
|
||||||
SHORT retval = 0;
|
SHORT retval = 0;
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
Uint8 *keystate = SDL_GetKeyboardState(NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (vk)
|
switch (vk)
|
||||||
{
|
{
|
||||||
case VK_LBUTTON:
|
case VK_LBUTTON:
|
||||||
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_LMASK)
|
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_LMASK)
|
||||||
retval = 0x8000;
|
retval = 0x8000;
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
if(keystate[SDL_SCANCODE_RSHIFT])
|
||||||
|
retval = 0x8000;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VK_RBUTTON:
|
case VK_RBUTTON:
|
||||||
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_RMASK)
|
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON_RMASK)
|
||||||
retval = 0x8000;
|
retval = 0x8000;
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
if(keystate[SDL_SCANCODE_RCTRL])
|
||||||
|
retval = 0x8000;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VK_MBUTTON:
|
case VK_MBUTTON:
|
||||||
|
@ -127,7 +145,11 @@ SHORT GetKeyState(int vk)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
STUBBED("this can't possibly be right, yeah?");
|
STUBBED("this can't possibly be right, yeah?");
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
if (keystate[SDL_GetScancodeFromKey((SDL_Keycode)vk)])
|
||||||
|
#else
|
||||||
if (SDL_GetKeyboardState(NULL)[SDL_GetScancodeFromKey((SDL_Keycode)vk)])
|
if (SDL_GetKeyboardState(NULL)[SDL_GetScancodeFromKey((SDL_Keycode)vk)])
|
||||||
|
#endif
|
||||||
retval = 0x8000;
|
retval = 0x8000;
|
||||||
break;
|
break;
|
||||||
} // switch
|
} // switch
|
||||||
|
|
|
@ -49,6 +49,8 @@ INDEX inp_bMsgDebugger = FALSE;
|
||||||
INDEX inp_bForceJoystickPolling = 0;
|
INDEX inp_bForceJoystickPolling = 0;
|
||||||
INDEX inp_bAutoDisableJoysticks = 0;
|
INDEX inp_bAutoDisableJoysticks = 0;
|
||||||
|
|
||||||
|
static CTCriticalSection sl_csInput;
|
||||||
|
|
||||||
extern INDEX inp_ctJoysticksAllowed;
|
extern INDEX inp_ctJoysticksAllowed;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -281,6 +283,16 @@ static void SetKeyFromEvent(const SDL_Event *event, const BOOL bDown)
|
||||||
return;
|
return;
|
||||||
} // if
|
} // if
|
||||||
|
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
if(event->key.keysym.sym==SDLK_RSHIFT) {
|
||||||
|
_abKeysPressed[KID_MOUSE1] = bDown;
|
||||||
|
return;
|
||||||
|
} else if(event->key.keysym.sym==SDLK_RCTRL) {
|
||||||
|
_abKeysPressed[KID_MOUSE2] = bDown;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// convert virtualkey to kid
|
// convert virtualkey to kid
|
||||||
const INDEX iKID = _aiScancodeToKid[event->key.keysym.scancode];
|
const INDEX iKID = _aiScancodeToKid[event->key.keysym.scancode];
|
||||||
|
|
||||||
|
@ -333,10 +345,14 @@ static void sdl_event_handler(const SDL_Event *event)
|
||||||
int SE_SDL_InputEventPoll(SDL_Event *sdlevent)
|
int SE_SDL_InputEventPoll(SDL_Event *sdlevent)
|
||||||
{
|
{
|
||||||
ASSERT(sdlevent != NULL);
|
ASSERT(sdlevent != NULL);
|
||||||
|
CTSingleLock slInput(&sl_csInput, FALSE);
|
||||||
|
if(slInput.TryToLock()) {
|
||||||
const int retval = SDL_PollEvent(sdlevent);
|
const int retval = SDL_PollEvent(sdlevent);
|
||||||
if (retval)
|
if (retval)
|
||||||
sdl_event_handler(sdlevent);
|
sdl_event_handler(sdlevent);
|
||||||
return retval;
|
return retval;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
} // SE_SDL_InputEventPoll
|
} // SE_SDL_InputEventPoll
|
||||||
|
|
||||||
|
|
||||||
|
@ -495,6 +511,9 @@ BOOL CInput::PlatformInit(void)
|
||||||
_pShell->DeclareSymbol("persistent user INDEX inp_bSDLPermitCtrlG;", (void*)&inp_bSDLPermitCtrlG);
|
_pShell->DeclareSymbol("persistent user INDEX inp_bSDLPermitCtrlG;", (void*)&inp_bSDLPermitCtrlG);
|
||||||
_pShell->DeclareSymbol("persistent user INDEX inp_bSDLGrabInput;", (void*)&inp_bSDLGrabInput);
|
_pShell->DeclareSymbol("persistent user INDEX inp_bSDLGrabInput;", (void*)&inp_bSDLGrabInput);
|
||||||
MakeConversionTables();
|
MakeConversionTables();
|
||||||
|
|
||||||
|
sl_csInput.cs_iIndex = 3000;
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -656,11 +675,16 @@ void CInput::DisableInput( void)
|
||||||
inp_bPollJoysticks = FALSE;
|
inp_bPollJoysticks = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define USE_MOUSEWARP 1
|
||||||
|
// Define this to use GetMouse instead of using Message to read mouse coordinates
|
||||||
|
|
||||||
// blank any queued mousemove events...SDLInput.cpp needs this when
|
// blank any queued mousemove events...SDLInput.cpp needs this when
|
||||||
// returning from the menus/console to game or the viewport will jump...
|
// returning from the menus/console to game or the viewport will jump...
|
||||||
void CInput::ClearRelativeMouseMotion(void)
|
void CInput::ClearRelativeMouseMotion(void)
|
||||||
{
|
{
|
||||||
|
#if USE_MOUSEWARP
|
||||||
|
SDL_GetRelativeMouseState(NULL, NULL);
|
||||||
|
#endif
|
||||||
mouse_relative_x = mouse_relative_y = 0;
|
mouse_relative_x = mouse_relative_y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -697,8 +721,20 @@ void CInput::GetInput(BOOL bPreScan)
|
||||||
// get codes
|
// get codes
|
||||||
INDEX iKID = kc.kc_iKID;
|
INDEX iKID = kc.kc_iKID;
|
||||||
//INDEX iScan = kc.kc_iScanCode;
|
//INDEX iScan = kc.kc_iScanCode;
|
||||||
//INDEX iVirt = kc.kc_iVirtKey;
|
INDEX iVirt = kc.kc_iVirtKey;
|
||||||
|
// if reading async keystate
|
||||||
|
if (inp_iKeyboardReadingMethod==0) {
|
||||||
|
// if there is a valid virtkey
|
||||||
|
if (iVirt>=0) {
|
||||||
|
// is state is pressed
|
||||||
|
if (SDL_GetKeyboardState(NULL)[SDL_GetScancodeFromKey((SDL_Keycode)iVirt)]) {
|
||||||
|
// mark it as pressed
|
||||||
|
inp_ubButtonsBuffer[iKID] = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// if snooped that key is pressed
|
// if snooped that key is pressed
|
||||||
if (_abKeysPressed[iKID]) {
|
if (_abKeysPressed[iKID]) {
|
||||||
// mark it as pressed
|
// mark it as pressed
|
||||||
|
@ -706,13 +742,22 @@ void CInput::GetInput(BOOL bPreScan)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// reset this every frame (since we explicitly ignore the button-up events).
|
// reset this every frame (since we explicitly ignore the button-up events).
|
||||||
_abKeysPressed[KID_MOUSEWHEELUP] = FALSE;
|
_abKeysPressed[KID_MOUSEWHEELUP] = FALSE;
|
||||||
_abKeysPressed[KID_MOUSEWHEELDOWN] = FALSE;
|
_abKeysPressed[KID_MOUSEWHEELDOWN] = FALSE;
|
||||||
|
|
||||||
// read mouse position
|
// read mouse position
|
||||||
if ((mouse_relative_x != 0) || (mouse_relative_y != 0)) {
|
#ifdef USE_MOUSEWARP
|
||||||
|
int iMx, iMy;
|
||||||
|
SDL_GetRelativeMouseState(&iMx, &iMy);
|
||||||
|
mouse_relative_x = iMx;
|
||||||
|
mouse_relative_y = iMy;
|
||||||
|
#else
|
||||||
|
if ((mouse_relative_x != 0) || (mouse_relative_y != 0))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
FLOAT fDX = FLOAT( mouse_relative_x );
|
FLOAT fDX = FLOAT( mouse_relative_x );
|
||||||
FLOAT fDY = FLOAT( mouse_relative_y );
|
FLOAT fDY = FLOAT( mouse_relative_y );
|
||||||
|
|
||||||
|
@ -762,11 +807,14 @@ void CInput::GetInput(BOOL bPreScan)
|
||||||
inp_caiAllAxisInfo[1].cai_fReading = fMouseRelX;
|
inp_caiAllAxisInfo[1].cai_fReading = fMouseRelX;
|
||||||
inp_caiAllAxisInfo[2].cai_fReading = fMouseRelY;
|
inp_caiAllAxisInfo[2].cai_fReading = fMouseRelY;
|
||||||
inp_caiAllAxisInfo[3].cai_fReading = fMouseRelZ;
|
inp_caiAllAxisInfo[3].cai_fReading = fMouseRelZ;
|
||||||
} else {
|
}
|
||||||
|
#ifndef USE_MOUSEWARP
|
||||||
|
else {
|
||||||
inp_caiAllAxisInfo[1].cai_fReading = 0.0;
|
inp_caiAllAxisInfo[1].cai_fReading = 0.0;
|
||||||
inp_caiAllAxisInfo[2].cai_fReading = 0.0;
|
inp_caiAllAxisInfo[2].cai_fReading = 0.0;
|
||||||
inp_caiAllAxisInfo[3].cai_fReading = 0.0;
|
inp_caiAllAxisInfo[3].cai_fReading = 0.0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// if not pre-scanning
|
// if not pre-scanning
|
||||||
|
|
0
Sources/Engine/Base/Stream.cpp
Normal file → Executable file
0
Sources/Engine/Base/Stream.cpp
Normal file → Executable file
9
Sources/Engine/Base/Timer.cpp
Normal file → Executable file
9
Sources/Engine/Base/Timer.cpp
Normal file → Executable file
|
@ -195,8 +195,9 @@ void __stdcall CTimer_TimerFunc(UINT uID, UINT uMsg, ULONG dwUser, ULONG dw1, UL
|
||||||
}
|
}
|
||||||
#elif (defined PLATFORM_UNIX)
|
#elif (defined PLATFORM_UNIX)
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
Uint32 CTimer_TimerFunc_SDL(Uint32 interval)
|
Uint32 CTimer_TimerFunc_SDL(Uint32 interval, void* param)
|
||||||
{
|
{
|
||||||
|
(void)param;
|
||||||
// access to the list of handlers must be locked
|
// access to the list of handlers must be locked
|
||||||
CTSingleLock slHooks(&_pTimer->tm_csHooks, TRUE);
|
CTSingleLock slHooks(&_pTimer->tm_csHooks, TRUE);
|
||||||
// handle all timers
|
// handle all timers
|
||||||
|
@ -433,8 +434,8 @@ CTimer::CTimer(BOOL bInterrupt /*=TRUE*/)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if (SDL_Init(SDL_INIT_TIMER) == -1) FatalError(TRANS("Cannot initialize multimedia timer!"));
|
if (SDL_Init(SDL_INIT_TIMER) == -1) FatalError(TRANS("Cannot initialize multimedia timer!"));
|
||||||
SDL_SetTimer(ULONG(TickQuantum*1000.0f), CTimer_TimerFunc_SDL);
|
tm_TimerID = SDL_AddTimer(ULONG(TickQuantum*1000.0f), CTimer_TimerFunc_SDL, NULL);
|
||||||
|
if( tm_TimerID==NULL) FatalError(TRANS("Cannot initialize multimedia timer!"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// make sure that timer interrupt is ticking
|
// make sure that timer interrupt is ticking
|
||||||
|
@ -473,7 +474,7 @@ CTimer::~CTimer(void)
|
||||||
ASSERT(tm_lhHooks.IsEmpty());
|
ASSERT(tm_lhHooks.IsEmpty());
|
||||||
|
|
||||||
#else
|
#else
|
||||||
SDL_SetTimer(0, NULL);
|
SDL_RemoveTimer(tm_TimerID);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
4
Sources/Engine/Base/Timer.h
Normal file → Executable file
4
Sources/Engine/Base/Timer.h
Normal file → Executable file
|
@ -82,7 +82,11 @@ public:
|
||||||
FLOAT tm_fLerpFactor; // factor used for lerping between frames
|
FLOAT tm_fLerpFactor; // factor used for lerping between frames
|
||||||
FLOAT tm_fLerpFactor2; // secondary lerp-factor used for unpredicted movement
|
FLOAT tm_fLerpFactor2; // secondary lerp-factor used for unpredicted movement
|
||||||
|
|
||||||
|
#ifdef PLATFORM_WIN32
|
||||||
ULONG tm_TimerID; // windows timer ID
|
ULONG tm_TimerID; // windows timer ID
|
||||||
|
#else
|
||||||
|
int tm_TimerID; // SDL_TimerID in fact
|
||||||
|
#endif
|
||||||
|
|
||||||
CTCriticalSection tm_csHooks; // access to timer hooks
|
CTCriticalSection tm_csHooks; // access to timer hooks
|
||||||
CListHead tm_lhHooks; // a list head for timer hooks
|
CListHead tm_lhHooks; // a list head for timer hooks
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include "Engine/StdH.h"
|
#include "Engine/StdH.h"
|
||||||
#include <Engine/Base/Synchronization.h>
|
#include <Engine/Base/Synchronization.h>
|
||||||
|
//#pragma GCC optimize 0
|
||||||
CTCriticalSection::CTCriticalSection(void)
|
CTCriticalSection::CTCriticalSection(void)
|
||||||
{
|
{
|
||||||
cs_pvObject = (void *) new pthread_mutex_t;
|
cs_pvObject = (void *) new pthread_mutex_t;
|
||||||
|
@ -25,7 +25,14 @@ INDEX CTCriticalSection::Lock(void)
|
||||||
{
|
{
|
||||||
if (owner == pthread_self())
|
if (owner == pthread_self())
|
||||||
return(++LockCounter);
|
return(++LockCounter);
|
||||||
|
if(owner==0 && LockCounter) {
|
||||||
|
//printf("Warning, suspicious mutex state, force unlocking...\n");
|
||||||
|
pthread_mutex_unlock((pthread_mutex_t *) cs_pvObject);
|
||||||
|
LockCounter=0;
|
||||||
|
}
|
||||||
|
if(owner!=0) {
|
||||||
|
// do something???
|
||||||
|
}
|
||||||
pthread_mutex_lock((pthread_mutex_t *) cs_pvObject);
|
pthread_mutex_lock((pthread_mutex_t *) cs_pvObject);
|
||||||
owner = pthread_self();
|
owner = pthread_self();
|
||||||
return(++LockCounter);
|
return(++LockCounter);
|
||||||
|
@ -51,7 +58,7 @@ INDEX CTCriticalSection::Unlock(void)
|
||||||
{
|
{
|
||||||
if (--LockCounter == 0)
|
if (--LockCounter == 0)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock((pthread_mutex_t *) cs_pvObject);
|
int ret = pthread_mutex_unlock((pthread_mutex_t *) cs_pvObject);
|
||||||
owner = 0;
|
owner = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -648,7 +648,12 @@ ENGINE_API void SE_InitEngine(const char *argv0, CTString strGameID)
|
||||||
ReleaseDC( NULL, hdc);
|
ReleaseDC( NULL, hdc);
|
||||||
#else
|
#else
|
||||||
// !!! FIXME : rcg01072002 This CAN be done with SDL, actually. Move this somewhere.
|
// !!! FIXME : rcg01072002 This CAN be done with SDL, actually. Move this somewhere.
|
||||||
|
#ifdef PLATFORM_PANDORA
|
||||||
|
// hacked gamma support
|
||||||
|
_pGfx->gl_ulFlags |= GLF_ADJUSTABLEGAMMA;
|
||||||
|
#else
|
||||||
CPrintF( TRANS("\nWARNING: Gamma, brightness and contrast are not adjustable!\n\n"));
|
CPrintF( TRANS("\nWARNING: Gamma, brightness and contrast are not adjustable!\n\n"));
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// !!! FIXME : rcg12072001 Move this somewhere else.
|
// !!! FIXME : rcg12072001 Move this somewhere else.
|
||||||
|
@ -688,6 +693,9 @@ ENGINE_API void SE_EndEngine(void)
|
||||||
//ASSERT(bOK);
|
//ASSERT(bOK);
|
||||||
ReleaseDC( NULL, hdc);
|
ReleaseDC( NULL, hdc);
|
||||||
}
|
}
|
||||||
|
#elif defined(PLATFORM_PANDORA)
|
||||||
|
// restore default gamma
|
||||||
|
system("sudo /usr/pandora/scripts/op_gamma.sh 0");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// free stocks
|
// free stocks
|
||||||
|
|
|
@ -1992,6 +1992,18 @@ void CGfxLibrary::SwapBuffers(CViewPort *pvp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
#elif defined(PLATFORM_PANDORA)
|
||||||
|
if( gl_ulFlags & GLF_ADJUSTABLEGAMMA) {
|
||||||
|
//hacky Gamma only (no Contrast/Brightness) support.
|
||||||
|
static float old_pandora_gamma = 0.0f;
|
||||||
|
if (old_pandora_gamma!=gfx_fGamma) {
|
||||||
|
char buf[50];
|
||||||
|
sprintf(buf,"sudo /usr/pandora/scripts/op_gamma.sh %.2f", gfx_fGamma);
|
||||||
|
system(buf);
|
||||||
|
old_pandora_gamma = gfx_fGamma;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
// if not supported
|
// if not supported
|
||||||
{
|
{
|
||||||
|
|
|
@ -2224,7 +2224,12 @@ void CGame::GameRedrawView( CDrawPort *pdpDrawPort, ULONG ulFlags)
|
||||||
_pInput->GetInput(TRUE);
|
_pInput->GetInput(TRUE);
|
||||||
}
|
}
|
||||||
// timer must not occur during prescanning
|
// timer must not occur during prescanning
|
||||||
{ CTSingleLock csTimer(&_pTimer->tm_csHooks, TRUE);
|
{
|
||||||
|
#if defined(PLATFORM_UNIX) && !defined(SINGLE_THREADED)
|
||||||
|
#warning "This seems to cause Race Condition, so disabled"
|
||||||
|
#else
|
||||||
|
CTSingleLock csTimer(&_pTimer->tm_csHooks, TRUE);
|
||||||
|
#endif
|
||||||
// for each local player
|
// for each local player
|
||||||
for( INDEX i=0; i<4; i++) {
|
for( INDEX i=0; i<4; i++) {
|
||||||
// if local player
|
// if local player
|
||||||
|
|
Loading…
Reference in New Issue
Block a user