diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 4cd5025fc1..b2bbe2654b 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -19,8 +19,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_MODE); +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 +192,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 +250,7 @@ void LODManager::resetLODAdjust() { void LODManager::setAutomaticLODAdjust(bool value) { std::lock_guard { _automaticLODLock }; _automaticLODAdjust = value; + saveSettings(); emit autoLODChanged(); } @@ -330,14 +337,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 +417,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..b35ca9e212 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -44,10 +44,12 @@ enum WorldDetailQuality { }; Q_DECLARE_METATYPE(WorldDetailQuality); +const bool DEFAULT_LOD_MODE = 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 +257,6 @@ public: */ Q_INVOKABLE float getLODTargetFPS() const; - float getPresentTime() const { return _presentTime; } float getEngineRunTime() const { return _engineRunTime; } float getBatchTime() const { return _batchTime; } @@ -351,7 +352,7 @@ private: void setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMode); std::mutex _automaticLODLock; - bool _automaticLODAdjust = true; + bool _automaticLODAdjust = DEFAULT_LOD_MODE; float _presentTime{ 0.0f }; // msec float _engineRunTime{ 0.0f }; // msec @@ -362,7 +363,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 };