void DoMainLoop() { const std::chrono::milliseconds FRAME_PERIOD(16); SDL_Event event; CChronometer chronometer; while (true) { while (SDL_PollEvent(&event) != 0) { if (!ConsumeEvent(event) && m_pClient) { DispatchEvent(event, *m_pClient); } } if (m_isTerminated) { break; } // Очистка буфера кадра, обновление и рисование сцены, вывод буфера кадра. Clear(); if (m_pClient) { const float deltaSeconds = chronometer.GrabDeltaTime(); m_pClient->OnUpdateWindow(deltaSeconds); } CUtils::ValidateOpenGLErrors(); SwapBuffers(); chronometer.WaitNextFrameTime(FRAME_PERIOD); } }
void CAbstractWindow::DoGameLoop() { SDL_Event event; CChronometer chronometer; while (true) { while (SDL_PollEvent(&event) != 0) { if (!m_pImpl->ConsumeEvent(event)) { OnWindowEvent(event); } } if (m_pImpl->IsTerminated()) { break; } // Очистка буфера кадра, обновление и рисование сцены, вывод буфера кадра. m_pImpl->Clear(); const float deltaSeconds = chronometer.GrabDeltaTime(); OnUpdateWindow(deltaSeconds); OnDrawWindow(m_pImpl->GetWindowSize()); CUtils::ValidateOpenGLErrors(); m_pImpl->SwapBuffers(); } }