Fix LOD manager defaults + settings not being saved correctly.

This commit is contained in:
Kalila L 2021-03-29 01:12:09 -04:00
parent 58fde3c159
commit 0140513cd7
2 changed files with 21 additions and 7 deletions

View file

@ -19,8 +19,12 @@
#include "ui/DialogsManager.h" #include "ui/DialogsManager.h"
#include "InterfaceLogging.h" #include "InterfaceLogging.h"
Setting::Handle<int> desktopWorldDetailQuality("desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY); const QString LOD_SETTINGS_PREFIX { "lodManager/" };
Setting::Handle<int> hmdWorldDetailQuality("hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
Setting::Handle<bool> automaticLODAdjust(LOD_SETTINGS_PREFIX + "automaticLODAdjust", (bool)DEFAULT_LOD_MODE);
Setting::Handle<float> lodHalfAngle(LOD_SETTINGS_PREFIX + "lodHalfAngle", (float)getHalfAngleFromVisibilityDistance(DEFAULT_VISIBILITY_DISTANCE_FOR_UNIT_ELEMENT));
Setting::Handle<int> desktopWorldDetailQuality(LOD_SETTINGS_PREFIX + "desktopWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
Setting::Handle<int> hmdWorldDetailQuality(LOD_SETTINGS_PREFIX + "hmdWorldDetailQuality", (int)DEFAULT_WORLD_DETAIL_QUALITY);
LODManager::LODManager() { LODManager::LODManager() {
} }
@ -188,12 +192,14 @@ void LODManager::setVisibilityDistance(float distance) {
// Maintain behavior with deprecated _boundaryLevelAdjust property // Maintain behavior with deprecated _boundaryLevelAdjust property
float userDistance = distance / powf(2.0f, _boundaryLevelAdjust); float userDistance = distance / powf(2.0f, _boundaryLevelAdjust);
_lodHalfAngle = getHalfAngleFromVisibilityDistance(userDistance); _lodHalfAngle = getHalfAngleFromVisibilityDistance(userDistance);
saveSettings();
} }
void LODManager::setLODAngleDeg(float lodAngle) { void LODManager::setLODAngleDeg(float lodAngle) {
auto newLODAngleDeg = std::max(0.001f, std::min(lodAngle, 90.f)); auto newLODAngleDeg = std::max(0.001f, std::min(lodAngle, 90.f));
auto newLODHalfAngle = glm::radians(newLODAngleDeg * 0.5f); auto newLODHalfAngle = glm::radians(newLODAngleDeg * 0.5f);
_lodHalfAngle = newLODHalfAngle; _lodHalfAngle = newLODHalfAngle;
saveSettings();
} }
void LODManager::setSmoothScale(float t) { void LODManager::setSmoothScale(float t) {
@ -244,6 +250,7 @@ void LODManager::resetLODAdjust() {
void LODManager::setAutomaticLODAdjust(bool value) { void LODManager::setAutomaticLODAdjust(bool value) {
std::lock_guard<std::mutex> { _automaticLODLock }; std::lock_guard<std::mutex> { _automaticLODLock };
_automaticLODAdjust = value; _automaticLODAdjust = value;
saveSettings();
emit autoLODChanged(); emit autoLODChanged();
} }
@ -330,14 +337,19 @@ void LODManager::loadSettings() {
if (qApp->property(hifi::properties::OCULUS_STORE).toBool() && firstRun.get()) { if (qApp->property(hifi::properties::OCULUS_STORE).toBool() && firstRun.get()) {
hmdQuality = WORLD_DETAIL_HIGH; hmdQuality = WORLD_DETAIL_HIGH;
} }
_automaticLODAdjust = automaticLODAdjust.get();
_lodHalfAngle = lodHalfAngle.get();
setWorldDetailQuality(desktopQuality, false); setWorldDetailQuality(desktopQuality, false);
setWorldDetailQuality(hmdQuality, true); setWorldDetailQuality(hmdQuality, true);
} }
void LODManager::saveSettings() { void LODManager::saveSettings() {
automaticLODAdjust.set((bool)_automaticLODAdjust);
desktopWorldDetailQuality.set((int)_desktopWorldDetailQuality); desktopWorldDetailQuality.set((int)_desktopWorldDetailQuality);
hmdWorldDetailQuality.set((int)_hmdWorldDetailQuality); hmdWorldDetailQuality.set((int)_hmdWorldDetailQuality);
lodHalfAngle.set((float)_lodHalfAngle);
} }
const float MIN_DECREASE_FPS = 0.5f; const float MIN_DECREASE_FPS = 0.5f;
@ -405,6 +417,7 @@ void LODManager::setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMod
void LODManager::setWorldDetailQuality(WorldDetailQuality quality) { void LODManager::setWorldDetailQuality(WorldDetailQuality quality) {
setWorldDetailQuality(quality, qApp->isHMDMode()); setWorldDetailQuality(quality, qApp->isHMDMode());
saveSettings();
emit worldDetailQualityChanged(); emit worldDetailQualityChanged();
} }

View file

@ -44,10 +44,12 @@ enum WorldDetailQuality {
}; };
Q_DECLARE_METATYPE(WorldDetailQuality); Q_DECLARE_METATYPE(WorldDetailQuality);
const bool DEFAULT_LOD_MODE = false; // true for auto, false for manual.
#ifdef Q_OS_ANDROID #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 #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 #endif
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
@ -255,7 +257,6 @@ public:
*/ */
Q_INVOKABLE float getLODTargetFPS() const; Q_INVOKABLE float getLODTargetFPS() const;
float getPresentTime() const { return _presentTime; } float getPresentTime() const { return _presentTime; }
float getEngineRunTime() const { return _engineRunTime; } float getEngineRunTime() const { return _engineRunTime; }
float getBatchTime() const { return _batchTime; } float getBatchTime() const { return _batchTime; }
@ -351,7 +352,7 @@ private:
void setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMode); void setWorldDetailQuality(WorldDetailQuality quality, bool isHMDMode);
std::mutex _automaticLODLock; std::mutex _automaticLODLock;
bool _automaticLODAdjust = true; bool _automaticLODAdjust = DEFAULT_LOD_MODE;
float _presentTime{ 0.0f }; // msec float _presentTime{ 0.0f }; // msec
float _engineRunTime{ 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 _smoothScale{ 10.0f }; // smooth is evaluated over 10 times longer than now
float _smoothRenderTime{ 0.0f }; // msec float _smoothRenderTime{ 0.0f }; // msec
float _lodQualityLevel{ LOD_DEFAULT_QUALITY_LEVEL }; float _lodQualityLevel{ DEFAULT_LOD_QUALITY_LEVEL };
WorldDetailQuality _desktopWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY }; WorldDetailQuality _desktopWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY };
WorldDetailQuality _hmdWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY }; WorldDetailQuality _hmdWorldDetailQuality { DEFAULT_WORLD_DETAIL_QUALITY };