void Application::Run() { scene = new MinScene; scene->Init(); ResetCursorPos(); m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(m_window) && !Close) { getKeyboardUpdate(); scene->Update(m_timer.getElapsedTime()); scene->Render(); //Swap buffers glfwSwapBuffers(m_window); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); //m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } scene->Exit(); delete scene; }
void Controller::Run() { //Main Loop m_timer.startTimer(); // Start timer to calculate how long it takes to render this frame while (!glfwWindowShouldClose(view->getWindow()) && !IsKeyPressed(VK_ESCAPE)) { //get the elapsed time m_dElapsedTime = m_timer.getElapsedTime(); m_dAccumulatedTime_thread1 += m_dElapsedTime; m_dAccumulatedTime_thread2 += m_dElapsedTime; /* fps */ fps = (float)(1.f / m_dElapsedTime); /* twin threaded approach */ if(m_dAccumulatedTime_thread1 > 0.01) //update: update fps is _dAccumulatedTime_thread1 > fps { /** controller update **/ GetMouseUpdate(); getKeyboardUpdate(); /** model update **/ if (stateManager->GetState() == StateManager::GAME) { modelList[Model::getCurrentModel()]->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } else if (stateManager->GetState() == StateManager::TRANSITION) { stateManager->UpdateTransitionTime(m_dElapsedTime); modelList[Model::getCurrentModel()]->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } else { modelScreen->Update(m_dElapsedTime, myKeys, GetMousePos(), stateManager->GetState()); } modelTransitioning(); m_dAccumulatedTime_thread1 = 0.0; } if(m_dAccumulatedTime_thread2 > 0.003) //render: render fps is _dAccumulatedTime_thread1 > fps { /** View update(rendering) **/ view->Render(fps); //or switch to pause screen m_dAccumulatedTime_thread2 = 0.0; } if(myKeys[KEY_LMOUSE] || myKeys[KEY_RMOUSE]) UpdateMouseClick(); //Swap buffers glfwSwapBuffers(view->getWindow()); //Get and organize events, like keyboard and mouse input, window resizing, etc... glfwPollEvents(); m_timer.waitUntil(frameTime); // Frame rate limiter. Limits each frame to a specified time in ms. } //Check if the ESC key had been pressed or if the window had been closed view->Exit(); for(int i = 0; i < Model::getModelCount(); ++i) { //model[i].Exit(); } }