diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index b6fffbb4bd..b0b919fb0f 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -351,10 +351,18 @@ float LODManager::getHMDLODTargetFPS() const { } float LODManager::getLODTargetFPS() const { + auto refreshRateFPS = qApp->getRefreshRateManager().getActiveRefreshRate(); + auto lodTargetFPS = getDesktopLODTargetFPS(); if (qApp->isHMDMode()) { - return getHMDLODTargetFPS(); + lodTargetFPS = getHMDLODTargetFPS(); + } + + // if RefreshRate is slower than LOD target then it becomes the true LOD target + if (lodTargetFPS > refreshRateFPS) { + return refreshRateFPS; + } else { + return lodTargetFPS; } - return getDesktopLODTargetFPS(); } void LODManager::setWorldDetailQuality(float quality) { diff --git a/libraries/display-plugins/src/display-plugins/RefreshRateController.cpp b/libraries/display-plugins/src/display-plugins/RefreshRateController.cpp index 2d9b553163..369c3cdb26 100644 --- a/libraries/display-plugins/src/display-plugins/RefreshRateController.cpp +++ b/libraries/display-plugins/src/display-plugins/RefreshRateController.cpp @@ -30,7 +30,7 @@ int RefreshRateController::getRefreshRateLimitPeriod() const { return durationNanosecondsToHz(_refreshRateLimitPeriod); } -void RefreshRateController::sleepThreadIfNeeded(QThread* thread, bool isHmd) { +std::chrono::nanoseconds RefreshRateController::sleepThreadIfNeeded(QThread* thread, bool isHmd) { if (!isHmd) { static const std::chrono::nanoseconds EPSILON = std::chrono::milliseconds(1); auto duration = std::chrono::duration_cast(_endTime - _startTime); @@ -39,5 +39,7 @@ void RefreshRateController::sleepThreadIfNeeded(QThread* thread, bool isHmd) { if (sleepDuration.count() > 0) { thread->msleep(std::chrono::duration_cast(sleepDuration).count()); } + return sleepDuration; } + return std::chrono::nanoseconds(0); } diff --git a/libraries/display-plugins/src/display-plugins/RefreshRateController.h b/libraries/display-plugins/src/display-plugins/RefreshRateController.h index 15adee3d3d..3cb563377f 100644 --- a/libraries/display-plugins/src/display-plugins/RefreshRateController.h +++ b/libraries/display-plugins/src/display-plugins/RefreshRateController.h @@ -29,7 +29,7 @@ public: void clockStartTime() { _startTime = std::chrono::high_resolution_clock::now(); } void clockEndTime() { _endTime = std::chrono::high_resolution_clock::now(); } - void sleepThreadIfNeeded(QThread* thread, bool isHmd); + std::chrono::nanoseconds sleepThreadIfNeeded(QThread* thread, bool isHmd); private: std::chrono::time_point _startTime { std::chrono::high_resolution_clock::now() }; std::chrono::time_point _endTime { std::chrono::high_resolution_clock::now() }; diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index a07e6cea04..9dc1d7002d 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -211,7 +211,7 @@ public: virtual void cycleDebugOutput() {} void waitForPresent(); - float getAveragePresentTime() { return _movingAveragePresent.average / (float)USECS_PER_MSEC; } // in msec + float getAveragePresentTime() { return _movingAveragePresent.average / (float)USECS_PER_MSEC; } // in msec std::function getHUDOperator();