for(int i=0; i<8; i++)
keyHeld[i] = false;
+ // FPS management
+ for(int i=0; i<RING_BUFFER_SIZE; i++)
+ ringBuffer[i] = 0;
+
+ ringBufferPointer = RING_BUFFER_SIZE - 1;
+
videoWidget = new GLWidget(this);
setCentralWidget(videoWidget);
setWindowIcon(QIcon(":/res/vj-icon.png"));
{
if (e->key() == (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);
}
}
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);
}
}
}
videoWidget->updateGL();
+
+#if 1
+ // FPS handling
+ // Approach: We use a ring buffer to store timestamps 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);
+ ringBuffer[ringBufferPointer] = timestamp - oldTimestamp;
+ uint32_t elapsedTime = 0;
+
+ for(uint32_t i=0; i<RING_BUFFER_SIZE; i++)
+ elapsedTime += ringBuffer[i];
+
+ // elapsedTime must be non-zero
+ if (elapsedTime == 0)
+ elapsedTime = 1;
+
+#if 0
+ float framesPerSecond = ((float)RING_BUFFER_SIZE / (float)elapsedTime) * 1000.0;
+ statusBar()->showMessage(QString("%1 FPS").arg(framesPerSecond));
+#else
+ // This is in frames per 10 seconds, so we can have 1 decimal
+ uint32_t framesPerSecond = (uint32_t)(((float)RING_BUFFER_SIZE / (float)elapsedTime) * 10000.0);
+ uint32_t fpsIntegerPart = framesPerSecond / 10;
+ uint32_t fpsDecimalPart = framesPerSecond % 10;
+ statusBar()->showMessage(QString("%1.%2 FPS").arg(fpsIntegerPart).arg(fpsDecimalPart));
+#endif
+ oldTimestamp = timestamp;
+#endif
}