X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fgui%2Fmainwin.cpp;h=43ec937cbf5cfbaa123d7746f6f02bc06d40fe8f;hb=eec77bddfd9b9169b23717cf3b37d182ca88bbc3;hp=6becf8eb13816b1b7eae77d4ec568ce2155a36a0;hpb=94d59c2c8c14b9ac51dffd117ec507418b4d0881;p=virtualjaguar diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 6becf8e..43ec937 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -89,6 +89,12 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), for(int i=0; i<8; i++) keyHeld[i] = false; + // FPS management + for(int i=0; ikey() == (int)vjs.p1KeyBindings[i]) // joypad_0_buttons[i] = (uint8)state; - joypad_0_buttons[i] = (state ? 0x01 : 0x00); + joypad0Buttons[i] = (state ? 0x01 : 0x00); // Pad #2 is screwing up pad #1. Prolly a problem in joystick.cpp... // So let's try to fix it there. :-P [DONE] if (e->key() == (int)vjs.p2KeyBindings[i]) // joypad_1_buttons[i] = (uint8)state; - joypad_1_buttons[i] = (state ? 0x01 : 0x00); + joypad1Buttons[i] = (state ? 0x01 : 0x00); } } @@ -557,10 +563,10 @@ void MainWin::HandleGamepads(void) for(int i=BUTTON_FIRST; i<=BUTTON_LAST; i++) { if (vjs.p1KeyBindings[i] & (JOY_BUTTON | JOY_HAT | JOY_AXIS)) - joypad_0_buttons[i] = (Gamepad::GetState(0, vjs.p1KeyBindings[i]) ? 0x01 : 0x00); + joypad0Buttons[i] = (Gamepad::GetState(0, vjs.p1KeyBindings[i]) ? 0x01 : 0x00); if (vjs.p2KeyBindings[i] & (JOY_BUTTON | JOY_HAT | JOY_AXIS)) - joypad_1_buttons[i] = (Gamepad::GetState(1, vjs.p2KeyBindings[i]) ? 0x01 : 0x00); + joypad1Buttons[i] = (Gamepad::GetState(1, vjs.p2KeyBindings[i]) ? 0x01 : 0x00); } } @@ -674,6 +680,33 @@ void MainWin::Timer(void) } videoWidget->updateGL(); + + // FPS handling + // Approach: We use a ring buffer to store times (in ms) over a given + // amount of frames, then sum them to figure out the FPS. + uint32_t timestamp = SDL_GetTicks(); + // This assumes the ring buffer size is a power of 2 +// ringBufferPointer = (ringBufferPointer + 1) & (RING_BUFFER_SIZE - 1); + // Doing it this way is better. Ring buffer size can be arbitrary then. + ringBufferPointer = (ringBufferPointer + 1) % RING_BUFFER_SIZE; + ringBuffer[ringBufferPointer] = timestamp - oldTimestamp; + uint32_t elapsedTime = 0; + + for(uint32_t i=0; ishowMessage(QString("%1.%2 FPS").arg(fpsIntegerPart).arg(fpsDecimalPart)); + oldTimestamp = timestamp; }