From 578ab1a9f24c82496324bf554abf03af9a2b71ad Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 3 Feb 2015 16:13:13 -0800 Subject: [PATCH] Leave LOD settings as globals --- interface/src/LODManager.cpp | 82 ++++++++++++++++++++------------- interface/src/LODManager.h | 38 +++++++-------- interface/src/ui/ChatWindow.cpp | 4 +- 3 files changed, 71 insertions(+), 53 deletions(-) diff --git a/interface/src/LODManager.cpp b/interface/src/LODManager.cpp index 6247bc0002..c47b6180c7 100644 --- a/interface/src/LODManager.cpp +++ b/interface/src/LODManager.cpp @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include #include #include "Application.h" @@ -16,16 +17,14 @@ #include "LODManager.h" -LODManager::LODManager() : - _automaticAvatarLOD("automaticAvatarLOD", true), - _avatarLODDecreaseFPS("avatarLODDecreaseFPS", DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS), - _avatarLODIncreaseFPS("avatarLODIncreaseFPS", ADJUST_LOD_UP_FPS), - _avatarLODDistanceMultiplier("avatarLODDistanceMultiplier", - DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER), - _boundaryLevelAdjust("boundaryLevelAdjust", 0), - _octreeSizeScale("octreeSizeScale", DEFAULT_OCTREE_SIZE_SCALE) -{ -} +Setting::Handle automaticAvatarLOD("automaticAvatarLOD", true); +Setting::Handle avatarLODDecreaseFPS("avatarLODDecreaseFPS", DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS); +Setting::Handle avatarLODIncreaseFPS("avatarLODIncreaseFPS", ADJUST_LOD_UP_FPS); +Setting::Handle avatarLODDistanceMultiplier("avatarLODDistanceMultiplier", + DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER); +Setting::Handle boundaryLevelAdjust("boundaryLevelAdjust", 0); +Setting::Handle octreeSizeScale("octreeSizeScale", DEFAULT_OCTREE_SIZE_SCALE); + void LODManager::autoAdjustLOD(float currentFPS) { // NOTE: our first ~100 samples at app startup are completely all over the place, and we don't @@ -42,25 +41,23 @@ void LODManager::autoAdjustLOD(float currentFPS) { quint64 now = usecTimestampNow(); const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000; - if (_automaticAvatarLOD.get()) { - if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS.get()) { + if (_automaticAvatarLOD) { + if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS) { if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) { // attempt to lower the detail in proportion to the fps difference - float targetFps = (_avatarLODDecreaseFPS.get() + _avatarLODIncreaseFPS.get()) * 0.5f; + float targetFps = (_avatarLODDecreaseFPS + _avatarLODIncreaseFPS) * 0.5f; float averageFps = _fastFPSAverage.getAverage(); const float MAXIMUM_MULTIPLIER_SCALE = 2.0f; - _avatarLODDistanceMultiplier.set(qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, - _avatarLODDistanceMultiplier.get() * - (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : - qMin(MAXIMUM_MULTIPLIER_SCALE, - targetFps / averageFps)))); + _avatarLODDistanceMultiplier = qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier * + (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : + qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps))); _lastAvatarDetailDrop = now; } - } else if (_fastFPSAverage.getAverage() > _avatarLODIncreaseFPS.get()) { + } else if (_fastFPSAverage.getAverage() > _avatarLODIncreaseFPS) { // let the detail level creep slowly upwards const float DISTANCE_DECREASE_RATE = 0.05f; - _avatarLODDistanceMultiplier.set(qMax(MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, - _avatarLODDistanceMultiplier.get() - DISTANCE_DECREASE_RATE)); + _avatarLODDistanceMultiplier = qMax(MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, + _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE); } } @@ -68,29 +65,29 @@ void LODManager::autoAdjustLOD(float currentFPS) { quint64 elapsed = now - _lastAdjust; if (elapsed > ADJUST_LOD_DOWN_DELAY && _fpsAverage.getAverage() < ADJUST_LOD_DOWN_FPS - && _octreeSizeScale.get() > ADJUST_LOD_MIN_SIZE_SCALE) { + && _octreeSizeScale > ADJUST_LOD_MIN_SIZE_SCALE) { - _octreeSizeScale.set(_octreeSizeScale.get() * ADJUST_LOD_DOWN_BY); + _octreeSizeScale *= ADJUST_LOD_DOWN_BY; - if (_octreeSizeScale.get() < ADJUST_LOD_MIN_SIZE_SCALE) { - _octreeSizeScale.set(ADJUST_LOD_MIN_SIZE_SCALE); + if (_octreeSizeScale < ADJUST_LOD_MIN_SIZE_SCALE) { + _octreeSizeScale = ADJUST_LOD_MIN_SIZE_SCALE; } changed = true; _lastAdjust = now; qDebug() << "adjusting LOD down... average fps for last approximately 5 seconds=" << _fpsAverage.getAverage() - << "_octreeSizeScale=" << _octreeSizeScale.get(); + << "_octreeSizeScale=" << _octreeSizeScale; } if (elapsed > ADJUST_LOD_UP_DELAY && _fpsAverage.getAverage() > ADJUST_LOD_UP_FPS - && _octreeSizeScale.get() < ADJUST_LOD_MAX_SIZE_SCALE) { - _octreeSizeScale.set(_octreeSizeScale.get() * ADJUST_LOD_UP_BY); - if (_octreeSizeScale.get() > ADJUST_LOD_MAX_SIZE_SCALE) { - _octreeSizeScale.set(ADJUST_LOD_MAX_SIZE_SCALE); + && _octreeSizeScale < ADJUST_LOD_MAX_SIZE_SCALE) { + _octreeSizeScale *= ADJUST_LOD_UP_BY; + if (_octreeSizeScale > ADJUST_LOD_MAX_SIZE_SCALE) { + _octreeSizeScale = ADJUST_LOD_MAX_SIZE_SCALE; } changed = true; _lastAdjust = now; qDebug() << "adjusting LOD up... average fps for last approximately 5 seconds=" << _fpsAverage.getAverage() - << "_octreeSizeScale=" << _octreeSizeScale.get(); + << "_octreeSizeScale=" << _octreeSizeScale; } if (changed) { @@ -182,13 +179,32 @@ bool LODManager::shouldRenderMesh(float largestDimension, float distanceToCamera } void LODManager::setOctreeSizeScale(float sizeScale) { - _octreeSizeScale.set(sizeScale); + _octreeSizeScale = sizeScale; _shouldRenderTableNeedsRebuilding = true; } void LODManager::setBoundaryLevelAdjust(int boundaryLevelAdjust) { - _boundaryLevelAdjust.set(boundaryLevelAdjust); + _boundaryLevelAdjust = boundaryLevelAdjust; _shouldRenderTableNeedsRebuilding = true; } +void LODManager::loadSettings() { + setAutomaticAvatarLOD(automaticAvatarLOD.get()); + setAvatarLODDecreaseFPS(avatarLODDecreaseFPS.get()); + setAvatarLODIncreaseFPS(avatarLODIncreaseFPS.get()); + setAvatarLODDistanceMultiplier(avatarLODDistanceMultiplier.get()); + setBoundaryLevelAdjust(boundaryLevelAdjust.get()); + setOctreeSizeScale(octreeSizeScale.get()); +} + +void LODManager::saveSettings() { + automaticAvatarLOD.set(getAutomaticAvatarLOD()); + avatarLODDecreaseFPS.set(getAvatarLODDecreaseFPS()); + avatarLODIncreaseFPS.set(getAvatarLODIncreaseFPS()); + avatarLODDistanceMultiplier.set(getAvatarLODDistanceMultiplier()); + boundaryLevelAdjust.set(getBoundaryLevelAdjust()); + octreeSizeScale.set(getOctreeSizeScale()); +} + + diff --git a/interface/src/LODManager.h b/interface/src/LODManager.h index fded9c8d7c..b67b9ebc97 100644 --- a/interface/src/LODManager.h +++ b/interface/src/LODManager.h @@ -14,7 +14,6 @@ #include #include -#include #include #include @@ -43,38 +42,41 @@ class LODManager : public Dependency { SINGLETON_DEPENDENCY public: - void setAutomaticAvatarLOD(bool automaticAvatarLOD) { _automaticAvatarLOD.set(automaticAvatarLOD); } - bool getAutomaticAvatarLOD() { return _automaticAvatarLOD.get(); } - void setAvatarLODDecreaseFPS(float avatarLODDecreaseFPS) { _avatarLODDecreaseFPS.set(avatarLODDecreaseFPS); } - float getAvatarLODDecreaseFPS() { return _avatarLODDecreaseFPS.get(); } - void setAvatarLODIncreaseFPS(float avatarLODIncreaseFPS) { _avatarLODIncreaseFPS.set(avatarLODIncreaseFPS); } - float getAvatarLODIncreaseFPS() { return _avatarLODIncreaseFPS.get(); } - void setAvatarLODDistanceMultiplier(float multiplier) { _avatarLODDistanceMultiplier.set(multiplier); } - float getAvatarLODDistanceMultiplier() { return _avatarLODDistanceMultiplier.get(); } + void setAutomaticAvatarLOD(bool automaticAvatarLOD) { _automaticAvatarLOD = automaticAvatarLOD; } + bool getAutomaticAvatarLOD() const { return _automaticAvatarLOD; } + void setAvatarLODDecreaseFPS(float avatarLODDecreaseFPS) { _avatarLODDecreaseFPS = avatarLODDecreaseFPS; } + float getAvatarLODDecreaseFPS() const { return _avatarLODDecreaseFPS; } + void setAvatarLODIncreaseFPS(float avatarLODIncreaseFPS) { _avatarLODIncreaseFPS = avatarLODIncreaseFPS; } + float getAvatarLODIncreaseFPS() const { return _avatarLODIncreaseFPS; } + void setAvatarLODDistanceMultiplier(float multiplier) { _avatarLODDistanceMultiplier = multiplier; } + float getAvatarLODDistanceMultiplier() const { return _avatarLODDistanceMultiplier; } // User Tweakable LOD Items QString getLODFeedbackText(); void setOctreeSizeScale(float sizeScale); - float getOctreeSizeScale() { return _octreeSizeScale.get(); } + float getOctreeSizeScale() const { return _octreeSizeScale; } void setBoundaryLevelAdjust(int boundaryLevelAdjust); - int getBoundaryLevelAdjust() { return _boundaryLevelAdjust.get(); } + int getBoundaryLevelAdjust() const { return _boundaryLevelAdjust; } void autoAdjustLOD(float currentFPS); void resetLODAdjust(); bool shouldRenderMesh(float largestDimension, float distanceToCamera); + void loadSettings(); + void saveSettings(); + private: - LODManager(); + LODManager() {} - Setting::Handle _automaticAvatarLOD; - Setting::Handle _avatarLODDecreaseFPS; - Setting::Handle _avatarLODIncreaseFPS; - Setting::Handle _avatarLODDistanceMultiplier; + bool _automaticAvatarLOD = true; + float _avatarLODDecreaseFPS = DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS; + float _avatarLODIncreaseFPS = ADJUST_LOD_UP_FPS; + float _avatarLODDistanceMultiplier = DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER; - Setting::Handle _boundaryLevelAdjust; - Setting::Handle _octreeSizeScale; + float _octreeSizeScale = DEFAULT_OCTREE_SIZE_SCALE; + int _boundaryLevelAdjust = 0; quint64 _lastAdjust = 0; quint64 _lastAvatarDetailDrop = 0; diff --git a/interface/src/ui/ChatWindow.cpp b/interface/src/ui/ChatWindow.cpp index 792afdc754..35e112350a 100644 --- a/interface/src/ui/ChatWindow.cpp +++ b/interface/src/ui/ChatWindow.cpp @@ -378,9 +378,9 @@ void ChatWindow::messageReceived(const QXmppMessage& message) { if (message.body().contains(usernameMention)) { // Don't show messages already seen in icon tray at start-up. - bool showMessage = usernameMentionTimestamp.get() < _lastMessageStamp; + bool showMessage = _usernameMentionTimestamp.get() < _lastMessageStamp; if (showMessage) { - usernameMentionTimestamp.set(_lastMessageStamp); + _usernameMentionTimestamp.set(_lastMessageStamp); } if (isHidden() && showMessage) {