MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Blast / MessageLoop

Method MessageLoop

samples/SampleBase/core/DeviceManager.cpp:341–401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

339}
340
341void
342DeviceManager::MessageLoop()
343{
344 MSG msg = {0};
345
346 LARGE_INTEGER perfFreq, previousTime;
347 QueryPerformanceFrequency(&perfFreq);
348 QueryPerformanceCounter(&previousTime);
349
350 while (WM_QUIT != msg.message)
351 {
352 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
353 {
354 TranslateMessage(&msg);
355 DispatchMessage(&msg);
356 }
357 else
358 {
359 PROFILER_BEGIN("Main Loop");
360
361 LARGE_INTEGER newTime;
362 QueryPerformanceCounter(&newTime);
363
364 double elapsedSeconds = (m_FixedFrameInterval >= 0)
365 ? m_FixedFrameInterval
366 : (double)(newTime.QuadPart - previousTime.QuadPart) / (double)perfFreq.QuadPart;
367
368 if(m_SwapChain && GetWindowState() != kWindowMinimized)
369 {
370 Animate(elapsedSeconds);
371 Render();
372 m_SwapChain->Present(m_SyncInterval, 0);
373 Sleep(0);
374 }
375 else
376 {
377 // Release CPU resources when idle
378 Sleep(1);
379 }
380
381 {
382 m_vFrameTimes.push_back(elapsedSeconds);
383 double timeSum = 0;
384 for(auto it = m_vFrameTimes.begin(); it != m_vFrameTimes.end(); it++)
385 timeSum += *it;
386
387 if(timeSum > m_AverageTimeUpdateInterval)
388 {
389 m_AverageFrameTime = timeSum / (double)m_vFrameTimes.size();
390 m_vFrameTimes.clear();
391 }
392 }
393
394 previousTime = newTime;
395
396 PROFILER_END();
397 PROFILER_RESET();
398 }

Callers 1

runMethod · 0.80

Calls 3

push_backMethod · 0.80
sizeMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected