mirror of
https://github.com/JulianGro/overte.git
synced 2025-08-04 12:46:50 +02:00
Merge pull request #1129 from digisomni/fix/save-lod-settings
Fix LOD manager defaults + settings not being saved correctly.
This commit is contained in:
commit
7bd91bcfb0
2 changed files with 23 additions and 7 deletions
|
@ -4,6 +4,7 @@
|
||||||
//
|
//
|
||||||
// Created by Clement on 1/16/15.
|
// Created by Clement on 1/16/15.
|
||||||
// Copyright 2015 High Fidelity, Inc.
|
// Copyright 2015 High Fidelity, Inc.
|
||||||
|
// Copyright 2021 Vircadia contributors.
|
||||||
//
|
//
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
@ -19,8 +20,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_AUTO_ADJUST);
|
||||||
|
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 +193,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 +251,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,13 +339,18 @@ void LODManager::loadSettings() {
|
||||||
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 +418,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
//
|
//
|
||||||
// Created by Clement on 1/16/15.
|
// Created by Clement on 1/16/15.
|
||||||
// Copyright 2015 High Fidelity, Inc.
|
// Copyright 2015 High Fidelity, Inc.
|
||||||
|
// Copyright 2021 Vircadia contributors.
|
||||||
//
|
//
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// 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);
|
Q_DECLARE_METATYPE(WorldDetailQuality);
|
||||||
|
|
||||||
|
const bool DEFAULT_LOD_AUTO_ADJUST = 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 +258,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 +353,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_AUTO_ADJUST;
|
||||||
|
|
||||||
float _presentTime{ 0.0f }; // msec
|
float _presentTime{ 0.0f }; // msec
|
||||||
float _engineRunTime{ 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 _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 };
|
||||||
|
|
Loading…
Reference in a new issue