| 471 | u32 app_inactive_time_start = 0; |
| 472 | |
| 473 | void CRenderDevice::FrameMove() |
| 474 | { |
| 475 | ZoneScoped; |
| 476 | |
| 477 | dwFrame++; |
| 478 | |
| 479 | u32 _old_continual = dwTimeContinual; |
| 480 | dwTimeContinual = TimerMM.GetElapsed_ms() - app_inactive_time; |
| 481 | dwTimeDeltaContinual = dwTimeContinual - _old_continual; |
| 482 | |
| 483 | fTimeDeltaReal = Timer.GetElapsed_sec(); |
| 484 | fTimeDeltaRealMS = static_cast<float>(Timer.GetElapsed_ms()); |
| 485 | if (!_valid(fTimeDeltaReal)) |
| 486 | fTimeDeltaReal = EPS_S + EPS_S; |
| 487 | Timer.Start(); // previous frame |
| 488 | |
| 489 | { |
| 490 | if (Paused()) |
| 491 | fTimeDelta = 0.0f; |
| 492 | else |
| 493 | { |
| 494 | fTimeDelta = 0.1f * fTimeDelta + 0.9f * fTimeDeltaReal; // smooth random system activity - worst case ~7% error |
| 495 | clamp(fTimeDelta, EPS_S + EPS_S, .1f); // limit to 10fps minimum |
| 496 | } |
| 497 | fTimeGlobal = TimerGlobal.GetElapsed_sec(); |
| 498 | |
| 499 | u32 _old_global = dwTimeGlobal; |
| 500 | dwTimeGlobal = TimerGlobal.GetElapsed_ms(); |
| 501 | dwTimeDelta = dwTimeGlobal - _old_global; |
| 502 | } |
| 503 | |
| 504 | // Frame move |
| 505 | Statistic->EngineTOTAL.Begin(); |
| 506 | |
| 507 | Device.seqFrame.Process(rp_Frame); |
| 508 | |
| 509 | Statistic->EngineTOTAL.End(); |
| 510 | } |
| 511 | |
| 512 | ENGINE_API BOOL bShowPauseString = TRUE; |
| 513 | |