diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 4cd5025fc1..1c6ef387f3 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -4,6 +4,7 @@ // // Created by Clement on 1/16/15. // Copyright 2015 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -19,8 +20,12 @@ #include "ui/DialogsManager.h" #include "InterfaceLogging.h" -Setting::Handle desktopWorldDetailQuality("desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY); -Setting::Handle hmdWorldDetailQuality("hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY); +const QString LOD_SETTINGS_PREFIX { "lodManager/" }; + +Setting::Handle automaticLODAdjust(LOD_SETTINGS_PREFIX + "automaticLODAdjust", (bool)DEFAULT_LOD_AUTO_ADJUST); +Setting::Handle lodHalfAngle(LOD_SETTINGS_PREFIX + "lodHalfAngle", (float)getHalfAngleFromVisibilityDistance(DEFAULT_VISIBILITY_DISTANCE_FOR_UNIT_ELEMENT)); +Setting::Handle desktopWorldDetailQuality(LOD_SETTINGS_PREFIX + "desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY); +Setting::Handle hmdWorldDetailQuality(LOD_SETTINGS_PREFIX + "hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY); LODManager::LODManager() { } @@ -188,12 +193,14 @@ void LODManager::setVisibilityDistance(float distance) { // Maintain behavior with deprecated _boundaryLevelAdjust property float userDistance = distance / powf(2.0f, _boundaryLevelAdjust); _lodHalfAngle = getHalfAngleFromVisibilityDistance(userDistance); + saveSettings(); } void LODManager::setLODAngleDeg(float lodAngle) { auto newLODAngleDeg = std::max(0.001f, std::min(lodAngle, 90.f)); auto newLODHalfAngle = glm::radians(newLODAngleDeg * 0.5f); _lodHalfAngle = newLODHalfAngle; + saveSettings(); } void LODManager::setSmoothScale(float t) { @@ -244,6 +251,7 @@ void LODManager::resetLODAdjust() { void LODManager::setAutomaticLODAdjust(bool value) { std::lock_guard { _automaticLODLock }; _automaticLODAdjust = value; + saveSettings(); emit autoLODChanged(); } @@ -330,14 +338,19 @@ void LODManager::loadSettings() { if (qApp->property(hifi::properties::OCULUS_STORE).toBool() && firstRun.get()) { hmdQuality = WORLD_DETAIL_HIGH; } + + _automaticLODAdjust = automaticLODAdjust.get(); + _lodHalfAngle = lodHalfAngle.get(); setWorldDetailQuality(desktopQuality, false); setWorldDetailQuality(hmdQuality, true); } void LODManager::saveSettings() { + automaticLODAdjust.set((bool)_automaticLODAdjust); desktopWorldDetailQuality.set((int)_desktopWorldDetailQuality); hmdWorldDetailQuality.set((int)_hmdWorldDetailQuality); + lodHalfAngle.set((float)_lodHalfAngle); } const float MIN_DECREASE_FPS = 0.5f; @@ -405,6 +418,7 @@ void LODManager::setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMod void LODManager::setWorldDetailQuality(WorldDetailQuality quality) { setWorldDetailQuality(quality, qApp->isHMDMode()); + saveSettings(); emit worldDetailQualityChanged(); } diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 16b0529b05..35f80efcda 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -4,6 +4,7 @@ // // Created by Clement on 1/16/15. // Copyright 2015 High Fidelity, Inc. +// Copyright 2021 Vircadia contributors. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -44,10 +45,12 @@ enum WorldDetailQuality { }; Q_DECLARE_METATYPE(WorldDetailQuality); +const bool DEFAULT_LOD_AUTO_ADJUST = false; // true for auto, false for manual. + #ifdef Q_OS_ANDROID -const float LOD_DEFAULT_QUALITY_LEVEL = 0.2f; // default quality level setting is High (lower framerate) +const float DEFAULT_LOD_QUALITY_LEVEL = 0.2f; // default quality level setting is High (lower framerate) #else -const float LOD_DEFAULT_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid +const float DEFAULT_LOD_QUALITY_LEVEL = 0.5f; // default quality level setting is Mid #endif #ifdef Q_OS_ANDROID @@ -255,7 +258,6 @@ public: */ Q_INVOKABLE float getLODTargetFPS() const; - float getPresentTime() const { return _presentTime; } float getEngineRunTime() const { return _engineRunTime; } float getBatchTime() const { return _batchTime; } @@ -351,7 +353,7 @@ private: void setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMode); std::mutex _automaticLODLock; - bool _automaticLODAdjust = true; + bool _automaticLODAdjust = DEFAULT_LOD_AUTO_ADJUST; float _presentTime{ 0.0f }; // msec float _engineRunTime{ 0.0f }; // msec @@ -362,7 +364,7 @@ private: float _smoothScale{ 10.0f }; // smooth is evaluated over 10 times longer than now float _smoothRenderTime{ 0.0f }; // msec - float _lodQualityLevel{ LOD_DEFAULT_QUALITY_LEVEL }; + float _lodQualityLevel{ DEFAULT_LOD_QUALITY_LEVEL }; WorldDetailQuality _desktopWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY }; WorldDetailQuality _hmdWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY };