From 9d93a2f502b2004635987914dcac7aef85300c8e Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 24 Jul 2019 16:27:24 -0700 Subject: [PATCH 1/7] Fix simplifiedUI stuck on wrong LOD value --- interface/src/LODManager.h | 8 ++++++++ scripts/simplifiedUI/ui/simplifiedUI.js | 10 +++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 77cb1a0d39..94e5ae2a3c 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -62,6 +62,8 @@ class LODManager : public QObject, public Dependency { Q_PROPERTY(float lodQualityLevel READ getLODQualityLevel WRITE setLODQualityLevel NOTIFY lodQualityLevelChanged) + Q_PROPERTY(float octreeSizeScale READ getOctreeSizeScale WRITE setOctreeSizeScale) + Q_PROPERTY(bool automaticLODAdjust READ getAutomaticLODAdjust WRITE setAutomaticLODAdjust NOTIFY autoLODChanged) Q_PROPERTY(float presentTime READ getPresentTime) @@ -150,6 +152,12 @@ public: */ Q_INVOKABLE float getOctreeSizeScale() const { return _octreeSizeScale; } + /**jsdoc + * @function LODManager.getDefaultOctreeSizeScale + * @param {number} sizeScale + */ + Q_INVOKABLE float getDefaultOctreeSizeScale() const { return DEFAULT_OCTREE_SIZE_SCALE; } + /**jsdoc * @function LODManager.setBoundaryLevelAdjust * @param {number} boundaryLevelAdjust diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index 50c626b594..80c0a6a61d 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -531,21 +531,21 @@ function maybeUpdateOutputDeviceMutedOverlay() { var oldAutomaticLODAdjust; -var oldLODLevel; +var oldOctreeSizeScale; var DEFAULT_AUTO_LOD_ADJUST = false; -var DEFAULT_LOD_LEVEL = 0.5; +var DEFAULT_OCTREE_SIZE_SCALE = LODManager.getDefaultOctreeSizeScale(); function modifyLODSettings() { oldAutomaticLODAdjust = LODManager.automaticLODAdjust; - oldLODLevel = LODManager.lodQualityLevel; + oldOctreeSizeScale = LODManager.octreeSizeScale; LODManager.automaticLODAdjust = DEFAULT_AUTO_LOD_ADJUST; - LODManager.lodQualityLevel = DEFAULT_LOD_LEVEL; + LODManager.octreeSizeScale = DEFAULT_OCTREE_SIZE_SCALE; } function restoreLODSettings() { LODManager.automaticLODAdjust = oldAutomaticLODAdjust; - LODManager.lodQualityLevel = oldLODLevel; + LODManager.octreeSizeScale = oldOctreeSizeScale; } From 772eb578984837449c95db7c1254267a9ead6515 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 24 Jul 2019 16:43:51 -0700 Subject: [PATCH 2/7] Remove broken/undocumented LODManager script features --- interface/src/LODManager.cpp | 9 --------- interface/src/LODManager.h | 12 ------------ 2 files changed, 21 deletions(-) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 0c9587d3ae..2cba5f9b1b 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -425,12 +425,3 @@ float LODManager::getWorldDetailQuality() const { return HIGH; } - - -void LODManager::setLODQualityLevel(float quality) { - _lodQualityLevel = quality; -} - -float LODManager::getLODQualityLevel() const { - return _lodQualityLevel; -} diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 94e5ae2a3c..62efb639a8 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -47,11 +47,6 @@ class AABox; * @property {number} presentTime Read-only. * @property {number} engineRunTime Read-only. * @property {number} gpuTime Read-only. - * @property {number} avgRenderTime Read-only. - * @property {number} fps Read-only. - * @property {number} lodLevel Read-only. - * @property {number} lodDecreaseFPS Read-only. - * @property {number} lodIncreaseFPS Read-only. */ class LODManager : public QObject, public Dependency { @@ -60,8 +55,6 @@ class LODManager : public QObject, public Dependency { Q_PROPERTY(float worldDetailQuality READ getWorldDetailQuality WRITE setWorldDetailQuality NOTIFY worldDetailQualityChanged) - Q_PROPERTY(float lodQualityLevel READ getLODQualityLevel WRITE setLODQualityLevel NOTIFY lodQualityLevelChanged) - Q_PROPERTY(float octreeSizeScale READ getOctreeSizeScale WRITE setOctreeSizeScale) Q_PROPERTY(bool automaticLODAdjust READ getAutomaticLODAdjust WRITE setAutomaticLODAdjust NOTIFY autoLODChanged) @@ -202,9 +195,6 @@ public: void setWorldDetailQuality(float quality); float getWorldDetailQuality() const; - void setLODQualityLevel(float quality); - float getLODQualityLevel() const; - float getLODAngleDeg() const; void setLODAngleDeg(float lodAngle); float getLODAngleHalfTan() const; @@ -259,8 +249,6 @@ 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 _desktopTargetFPS { LOD_OFFSET_FPS + LOD_DEFAULT_QUALITY_LEVEL * LOD_MAX_LIKELY_DESKTOP_FPS }; float _hmdTargetFPS { LOD_OFFSET_FPS + LOD_DEFAULT_QUALITY_LEVEL * LOD_MAX_LIKELY_HMD_FPS }; From 3a4ce446338664dcc3bbdb86f238f914a57df8fc Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 24 Jul 2019 17:30:08 -0700 Subject: [PATCH 3/7] On second thought, do not expose default octree size scale --- interface/src/LODManager.h | 6 ------ scripts/simplifiedUI/ui/simplifiedUI.js | 8 ++++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 62efb639a8..c0a7797561 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -145,12 +145,6 @@ public: */ Q_INVOKABLE float getOctreeSizeScale() const { return _octreeSizeScale; } - /**jsdoc - * @function LODManager.getDefaultOctreeSizeScale - * @param {number} sizeScale - */ - Q_INVOKABLE float getDefaultOctreeSizeScale() const { return DEFAULT_OCTREE_SIZE_SCALE; } - /**jsdoc * @function LODManager.setBoundaryLevelAdjust * @param {number} boundaryLevelAdjust diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index 80c0a6a61d..e9f49587aa 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -532,14 +532,14 @@ function maybeUpdateOutputDeviceMutedOverlay() { var oldAutomaticLODAdjust; var oldOctreeSizeScale; -var DEFAULT_AUTO_LOD_ADJUST = false; -var DEFAULT_OCTREE_SIZE_SCALE = LODManager.getDefaultOctreeSizeScale(); +var SIMPLIFIED_UI_AUTO_LOD_ADJUST = false; +var SIMPLIFIED_UI_OCTREE_SIZE_SCALE = 32768 * 916; // Octree cell size in meters (constant) * distance in meters at which we want a 1 meter cube to be visible function modifyLODSettings() { oldAutomaticLODAdjust = LODManager.automaticLODAdjust; oldOctreeSizeScale = LODManager.octreeSizeScale; - LODManager.automaticLODAdjust = DEFAULT_AUTO_LOD_ADJUST; - LODManager.octreeSizeScale = DEFAULT_OCTREE_SIZE_SCALE; + LODManager.automaticLODAdjust = SIMPLIFIED_UI_AUTO_LOD_ADJUST; + LODManager.octreeSizeScale = SIMPLIFIED_UI_OCTREE_SIZE_SCALE; } From 4b5a45209ea98de30bf93be75da18b8972effd30 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 25 Jul 2019 11:06:28 -0700 Subject: [PATCH 4/7] Prefer using LODManager.lodAngleDeg for setting manual LOD --- interface/src/LODManager.h | 2 -- scripts/simplifiedUI/ui/simplifiedUI.js | 10 +++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index c0a7797561..6fd9904906 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -55,8 +55,6 @@ class LODManager : public QObject, public Dependency { Q_PROPERTY(float worldDetailQuality READ getWorldDetailQuality WRITE setWorldDetailQuality NOTIFY worldDetailQualityChanged) - Q_PROPERTY(float octreeSizeScale READ getOctreeSizeScale WRITE setOctreeSizeScale) - Q_PROPERTY(bool automaticLODAdjust READ getAutomaticLODAdjust WRITE setAutomaticLODAdjust NOTIFY autoLODChanged) Q_PROPERTY(float presentTime READ getPresentTime) diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index e9f49587aa..3cbdadf47d 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -531,21 +531,21 @@ function maybeUpdateOutputDeviceMutedOverlay() { var oldAutomaticLODAdjust; -var oldOctreeSizeScale; +var oldLODAngleDeg; var SIMPLIFIED_UI_AUTO_LOD_ADJUST = false; -var SIMPLIFIED_UI_OCTREE_SIZE_SCALE = 32768 * 916; // Octree cell size in meters (constant) * distance in meters at which we want a 1 meter cube to be visible +var SIMPLIFIED_UI_LOD_ANGLE_DEG = 1.0 function modifyLODSettings() { oldAutomaticLODAdjust = LODManager.automaticLODAdjust; - oldOctreeSizeScale = LODManager.octreeSizeScale; + oldLODAngleDeg = LODManager.lodAngleDeg; LODManager.automaticLODAdjust = SIMPLIFIED_UI_AUTO_LOD_ADJUST; - LODManager.octreeSizeScale = SIMPLIFIED_UI_OCTREE_SIZE_SCALE; + LODManager.lodAngleDeg = SIMPLIFIED_UI_LOD_ANGLE_DEG; } function restoreLODSettings() { LODManager.automaticLODAdjust = oldAutomaticLODAdjust; - LODManager.octreeSizeScale = oldOctreeSizeScale; + LODManager.lodAngleDeg = oldLODAngleDeg; } From 94e725dc2a07c0219ce379e0a658c560d78e067b Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 25 Jul 2019 11:33:19 -0700 Subject: [PATCH 5/7] Fix rare case where script would fail to set LOD after disabling auto LOD --- interface/src/LODManager.cpp | 2 ++ interface/src/LODManager.h | 3 +++ 2 files changed, 5 insertions(+) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 2cba5f9b1b..2973208fef 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -54,6 +54,7 @@ void LODManager::setRenderTimes(float presentTime, float engineRunTime, float ba } void LODManager::autoAdjustLOD(float realTimeDelta) { + std::lock_guard { _automaticLODLock }; // The "render time" is the worse of: // - engineRunTime: Time spent in the render thread in the engine producing the gpu::Frame N @@ -235,6 +236,7 @@ void LODManager::resetLODAdjust() { } void LODManager::setAutomaticLODAdjust(bool value) { + std::lock_guard { _automaticLODLock }; _automaticLODAdjust = value; emit autoLODChanged(); } diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 6fd9904906..8fd39e7161 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -12,6 +12,8 @@ #ifndef hifi_LODManager_h #define hifi_LODManager_h +#include + #include #include #include @@ -230,6 +232,7 @@ signals: private: LODManager(); + std::mutex _automaticLODLock; bool _automaticLODAdjust = true; float _presentTime{ 0.0f }; // msec From 3da5896e2268918adf20612a9ca347b882529157 Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 25 Jul 2019 11:49:26 -0700 Subject: [PATCH 6/7] Bring back lodQualityLevel --- interface/src/LODManager.cpp | 8 ++++++++ interface/src/LODManager.h | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 2973208fef..0cf795e35b 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -427,3 +427,11 @@ float LODManager::getWorldDetailQuality() const { return HIGH; } + +void LODManager::setLODQualityLevel(float quality) { + _lodQualityLevel = quality; +} + +float LODManager::getLODQualityLevel() const { + return _lodQualityLevel; +} diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index 8fd39e7161..649e0e8e34 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -57,6 +57,8 @@ class LODManager : public QObject, public Dependency { Q_PROPERTY(float worldDetailQuality READ getWorldDetailQuality WRITE setWorldDetailQuality NOTIFY worldDetailQualityChanged) + Q_PROPERTY(float lodQualityLevel READ getLODQualityLevel WRITE setLODQualityLevel NOTIFY lodQualityLevelChanged) + Q_PROPERTY(bool automaticLODAdjust READ getAutomaticLODAdjust WRITE setAutomaticLODAdjust NOTIFY autoLODChanged) Q_PROPERTY(float presentTime READ getPresentTime) @@ -189,6 +191,9 @@ public: void setWorldDetailQuality(float quality); float getWorldDetailQuality() const; + void setLODQualityLevel(float quality); + float getLODQualityLevel() const; + float getLODAngleDeg() const; void setLODAngleDeg(float lodAngle); float getLODAngleHalfTan() const; @@ -244,6 +249,8 @@ 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 _desktopTargetFPS { LOD_OFFSET_FPS + LOD_DEFAULT_QUALITY_LEVEL * LOD_MAX_LIKELY_DESKTOP_FPS }; float _hmdTargetFPS { LOD_OFFSET_FPS + LOD_DEFAULT_QUALITY_LEVEL * LOD_MAX_LIKELY_HMD_FPS }; From 601b579c4265fd09dfbed810b30ca62b3fa1ff2a Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Thu, 25 Jul 2019 17:26:32 -0700 Subject: [PATCH 7/7] Set the LOD angle in simplifiedUI to current effective default, to be adjusted later --- scripts/simplifiedUI/ui/simplifiedUI.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/simplifiedUI/ui/simplifiedUI.js b/scripts/simplifiedUI/ui/simplifiedUI.js index 3cbdadf47d..f4f2627c66 100644 --- a/scripts/simplifiedUI/ui/simplifiedUI.js +++ b/scripts/simplifiedUI/ui/simplifiedUI.js @@ -533,7 +533,7 @@ function maybeUpdateOutputDeviceMutedOverlay() { var oldAutomaticLODAdjust; var oldLODAngleDeg; var SIMPLIFIED_UI_AUTO_LOD_ADJUST = false; -var SIMPLIFIED_UI_LOD_ANGLE_DEG = 1.0 +var SIMPLIFIED_UI_LOD_ANGLE_DEG = 0.5; function modifyLODSettings() { oldAutomaticLODAdjust = LODManager.automaticLODAdjust; oldLODAngleDeg = LODManager.lodAngleDeg;