Fix for [#32361] "Blenderplayer quad-buffer maximum 100Hz Fps" reported by HG1.

Allowing the Blenderplayer to break 100fps by making it less dependent on Ghost's messages.
This commit is contained in:
Mitchell Stokes 2012-08-18 23:46:37 +00:00
parent 4120c18c47
commit e4a6602a9a
3 changed files with 52 additions and 24 deletions

@ -464,31 +464,34 @@ bool GPG_Application::processEvent(GHOST_IEvent* event)
handled = false; handled = false;
break; break;
case GHOST_kEventWindowUpdate: // The player now runs as often as it can (repsecting vsync and fixedtime).
{ // This allows the player to break 100fps, but this code is being left here
GHOST_IWindow* window = event->getWindow(); // as reference. (see EngineNextFrame)
if (!m_system->validWindow(window)) break; //case GHOST_kEventWindowUpdate:
// Update the state of the game engine // {
if (m_kxsystem && !m_exitRequested) // GHOST_IWindow* window = event->getWindow();
{ // if (!m_system->validWindow(window)) break;
// Proceed to next frame // // Update the state of the game engine
window->activateDrawingContext(); // if (m_kxsystem && !m_exitRequested)
// {
// // Proceed to next frame
// window->activateDrawingContext();
// first check if we want to exit // // first check if we want to exit
m_exitRequested = m_ketsjiengine->GetExitCode(); // m_exitRequested = m_ketsjiengine->GetExitCode();
//
// kick the engine // // kick the engine
bool renderFrame = m_ketsjiengine->NextFrame(); // bool renderFrame = m_ketsjiengine->NextFrame();
if (renderFrame) // if (renderFrame)
{ // {
// render the frame // // render the frame
m_ketsjiengine->Render(); // m_ketsjiengine->Render();
} // }
} // }
m_exitString = m_ketsjiengine->GetExitString(); // m_exitString = m_ketsjiengine->GetExitString();
} // }
break; // break;
//
case GHOST_kEventWindowSize: case GHOST_kEventWindowSize:
{ {
GHOST_IWindow* window = event->getWindow(); GHOST_IWindow* window = event->getWindow();
@ -789,6 +792,28 @@ void GPG_Application::stopEngine()
m_engineRunning = false; m_engineRunning = false;
} }
void GPG_Application::EngineNextFrame()
{
// Update the state of the game engine
if (m_kxsystem && !m_exitRequested)
{
// Proceed to next frame
if (m_mainWindow)
m_mainWindow->activateDrawingContext();
// first check if we want to exit
m_exitRequested = m_ketsjiengine->GetExitCode();
// kick the engine
bool renderFrame = m_ketsjiengine->NextFrame();
if (renderFrame && m_mainWindow)
{
// render the frame
m_ketsjiengine->Render();
}
}
m_exitString = m_ketsjiengine->GetExitString();
}
void GPG_Application::exitEngine() void GPG_Application::exitEngine()
{ {

@ -77,6 +77,7 @@ public:
GlobalSettings* getGlobalSettings(void); GlobalSettings* getGlobalSettings(void);
bool StartGameEngine(int stereoMode); bool StartGameEngine(int stereoMode);
void StopGameEngine(); void StopGameEngine();
void EngineNextFrame();
protected: protected:
bool handleWheel(GHOST_IEvent* event); bool handleWheel(GHOST_IEvent* event);

@ -970,6 +970,8 @@ int main(int argc, char** argv)
{ {
system->processEvents(false); system->processEvents(false);
system->dispatchEvents(); system->dispatchEvents();
app.EngineNextFrame();
if ((exitcode = app.getExitRequested())) if ((exitcode = app.getExitRequested()))
{ {
run = false; run = false;