Skip to content

Commit

Permalink
Don't regulate Framerate on Pandora
Browse files Browse the repository at this point in the history
Restrict the Eps precision change only to Pandora platform
fix Inverted Right and Middle button on certain case with SDL
Added some Failsafe. Fixed a crash in the new game intro cinematic (when Boss of TFE die and Sam goes to the UFO) on the Pandora
Some Pandora fine-tunning
Tried some asynchronus input method, but doesn't seems to works
  • Loading branch information
ptitSeb authored and root committed Sep 9, 2016
1 parent 88a0ec2 commit 57cd734
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 20 deletions.
38 changes: 21 additions & 17 deletions Sources/Engine/Base/SDL/SDLInput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,10 @@ static int _iMouseZ = 0;
static BOOL _bWheelUp = FALSE;
static BOOL _bWheelDn = FALSE;

// emulate Win32: A single mouse wheel rotation
// is +120 (upwards) or -120 (downwards)
#define MOUSE_SCROLL_INTERVAL 120

CTCriticalSection csInput;

// which keys are pressed, as recorded by message interception (by KIDs)
Expand Down Expand Up @@ -314,15 +318,20 @@ static void sdl_event_handler(const SDL_Event *event)

case SDL_MOUSEBUTTONDOWN:
case SDL_MOUSEBUTTONUP:
if (event->button.button <= 5)
_abKeysPressed[KID_MOUSE1 + (event->button.button-1)] = (event->button.state == SDL_PRESSED) ? TRUE : FALSE;
if (event->button.button <= 5) {
int button = KID_MOUSE1;
switch(event->button.button) {
case SDL_BUTTON_RIGHT: button = KID_MOUSE2; break;
case SDL_BUTTON_MIDDLE: button = KID_MOUSE3; break;
case 4: button = KID_MOUSE4; break;
case 5: button = KID_MOUSE5; break;
}
_abKeysPressed[button] = (event->button.state == SDL_PRESSED) ? TRUE : FALSE;
}
break;

case SDL_MOUSEWHEEL:
if (event->wheel.y > 0)
_abKeysPressed[KID_MOUSEWHEELUP] = TRUE;
else if (event->wheel.y < 0)
_abKeysPressed[KID_MOUSEWHEELDOWN] = TRUE;
_iMouseZ += event->wheel.y * MOUSE_SCROLL_INTERVAL;
break;

case SDL_KEYDOWN:
Expand Down Expand Up @@ -715,6 +724,7 @@ void CInput::GetInput(BOOL bPreScan)
// clear button's buffer
memset( inp_ubButtonsBuffer, 0, sizeof( inp_ubButtonsBuffer));

Uint8 *keystate = SDL_GetKeyboardState(NULL);
// for each Key
for (INDEX iKey=0; iKey<ARRAYCOUNT(_akcKeys); iKey++) {
const KeyConversion &kc = _akcKeys[iKey];
Expand All @@ -723,11 +733,11 @@ void CInput::GetInput(BOOL bPreScan)
//INDEX iScan = kc.kc_iScanCode;
INDEX iVirt = kc.kc_iVirtKey;
// if reading async keystate
if (inp_iKeyboardReadingMethod==0) {
if (0/*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)]) {
if (keystate[SDL_GetScancodeFromKey((SDL_Keycode)iVirt)]) {
// mark it as pressed
inp_ubButtonsBuffer[iKID] = 0xFF;
}
Expand All @@ -744,10 +754,6 @@ void CInput::GetInput(BOOL bPreScan)
}
}

// reset this every frame (since we explicitly ignore the button-up events).
_abKeysPressed[KID_MOUSEWHEELUP] = FALSE;
_abKeysPressed[KID_MOUSEWHEELDOWN] = FALSE;

// read mouse position
#ifdef USE_MOUSEWARP
int iMx, iMy;
Expand Down Expand Up @@ -816,17 +822,16 @@ void CInput::GetInput(BOOL bPreScan)
}
#endif

/*
// if not pre-scanning
if (!bPreScan) {
// detect wheel up/down movement
_bWheelDn = FALSE;

if (_iMouseZ>0) {
if (_bWheelUp) {
inp_ubButtonsBuffer[KID_MOUSEWHEELUP] = 0x00;
} else {
inp_ubButtonsBuffer[KID_MOUSEWHEELUP] = 0xFF;
_iMouseZ = ClampDn(_iMouseZ-120, 0);
_iMouseZ = ClampDn(_iMouseZ-MOUSE_SCROLL_INTERVAL, 0);
}
}
_bWheelUp = inp_ubButtonsBuffer[KID_MOUSEWHEELUP];
Expand All @@ -835,12 +840,11 @@ void CInput::GetInput(BOOL bPreScan)
inp_ubButtonsBuffer[KID_MOUSEWHEELDOWN] = 0x00;
} else {
inp_ubButtonsBuffer[KID_MOUSEWHEELDOWN] = 0xFF;
_iMouseZ = ClampUp(_iMouseZ+120, 0);
_iMouseZ = ClampUp(_iMouseZ+MOUSE_SCROLL_INTERVAL, 0);
}
}
_bWheelDn = inp_ubButtonsBuffer[KID_MOUSEWHEELDOWN];
}
*/

inp_bLastPrescan = bPreScan;

Expand Down
15 changes: 15 additions & 0 deletions Sources/Engine/Engine.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ static void DetectCPU(void)
{
#if (defined USE_PORTABLE_C) // rcg10072001
CPrintF(TRANSV(" (No CPU detection in this binary.)\n"));
#ifdef PLATFORM_PANDORA
sys_iCPUMHz = 400; // conservative, ARM -> x86 cpu translation is not 1 to 1.
#endif

#else
char strVendor[12+1];
Expand Down Expand Up @@ -398,7 +401,19 @@ static void SetupMemoryManager(void)
sys_iRAMSwap = ms.dwTotalPageFile/MB;

#elif (defined PLATFORM_UNIX)
#ifdef PLATFORM_PANDORA
sys_iRAMPhys = 256; // conservative here, there is 256MB models and 512MB...
FILE* esrev = fopen("/etc/powervr-esrev", "r");
if (esrev) {
int rev = 0;
fscanf(esrev,"%d", &rev);
if (rev==3 || rev==5)
sys_iRAMPhys = 512;
fclose(esrev);
};
#else
sys_iRAMPhys = 1; // !!! FIXME: This is bad. Bad. BAD.
#endif
sys_iRAMSwap = 1;

#else
Expand Down
4 changes: 4 additions & 0 deletions Sources/Engine/Math/Quaternion.h
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,11 @@ void Quaternion<Type>::FromEuler(const Vector<Type, 3> &a)
template<class Type>
Type Quaternion<Type>::EPS(Type orig) const
{
#ifdef PLATFORM_PANDORA
if ((orig <= 1e-4f) && (orig >= -1e-4f))
#else
if ((orig <= 10e-6f) && (orig >= -10e-6f))
#endif
return(0.0f);

return(orig);
Expand Down
5 changes: 2 additions & 3 deletions Sources/Engine/Rendering/RendASER.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ void CRenderer::AddAddListToActiveList(INDEX iScanLine)
// allocate space in destination for sum of source and add
INDEX ctActiveEdges = re_aaceActiveEdges.Count();
re_aaceActiveEdgesTmp.Push(ctAddEdges+ctActiveEdges);

// check that the add list is sorted right
#if ASER_EXTREME_CHECKING
{
Expand Down Expand Up @@ -66,18 +65,18 @@ void CRenderer::AddAddListToActiveList(INDEX iScanLine)
// start at begining of add list, source active list and destination active list
LISTITER(CAddEdge, ade_lnInAdd) itadeAdd(lhAdd);
CActiveEdge *paceSrc = &re_aaceActiveEdges[0];
CActiveEdge *paceEnd = &re_aaceActiveEdges[re_aaceActiveEdges.Count()-1];
CActiveEdge *paceDst = &re_aaceActiveEdgesTmp[0];

IFDEBUG(INDEX ctNewActive=0);
IFDEBUG(INDEX ctOldActive1=0);
IFDEBUG(INDEX ctOldActive2=0);

// for each edge in add list
while(!itadeAdd.IsPastEnd()) {
CAddEdge &ade = *itadeAdd;

// while the edge in active list is left of the edge in add list
while (paceSrc->ace_xI.slHolder < itadeAdd->ade_xI.slHolder) {
while ((paceSrc->ace_xI.slHolder < ade.ade_xI.slHolder) && (paceSrc!=paceEnd)) {
// copy the active edge
ASSERT(paceSrc<=&re_aaceActiveEdges[ctActiveEdges-1]);
*paceDst++=*paceSrc++;
Expand Down
3 changes: 3 additions & 0 deletions Sources/SeriousSam/SeriousSam.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,8 @@ static void UpdatePauseState(void)
// limit current frame rate if neeeded
void LimitFrameRate(void)
{
// do not limit FPS on the Pandora, it's not powerfull enough and doesn't "iconise" games either
#ifndef PLATFORM_PANDORA
// measure passed time for each loop
static CTimerValue tvLast(-1.0f);
CTimerValue tvNow = _pTimer->GetHighPrecisionTimer();
Expand All @@ -299,6 +301,7 @@ void LimitFrameRate(void)

// remember new time
tvLast = _pTimer->GetHighPrecisionTimer();
#endif
}

// load first demo
Expand Down

0 comments on commit 57cd734

Please sign in to comment.