History

Merge remote-tracking branch 'upstream/master' into 19554-2

Ryan Huffman committed 12 years ago

Commit 2de98482 parents 23d68d5 bd37a7520 files · +347 −84Browse files

Showing the changes to interface/src/Menu.cpp (1 of 20 files). Show all

Unified · Split

interface/src/Menu.cpp+43−22
@@ -25,7 +25,6 @@ · 24 unmodified lines
25#include <QMessageBox>25#include <QMessageBox>
26#include <QShortcut>26#include <QShortcut>
27#include <QSlider>27#include <QSlider>
28#include <QStandardPaths>
29#include <QUuid>28#include <QUuid>
30#include <QHBoxLayout>29#include <QHBoxLayout>
31 30
@@ -79,6 +78,9 @@ Menu::Menu() : · 47 unmodified lines
79 _lodToolsDialog(NULL),78 _lodToolsDialog(NULL),
80 _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),79 _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM),
81 _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),80 _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE),
81 _automaticAvatarLOD(true),
82 _avatarLODDecreaseFPS(DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS),
83 _avatarLODIncreaseFPS(ADJUST_LOD_UP_FPS),
82 _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),84 _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER),
83 _boundaryLevelAdjust(0),85 _boundaryLevelAdjust(0),
84 _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),86 _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS),
@@ -87,7 +89,8 @@ Menu::Menu() : · 2 unmodified lines
87 _fpsAverage(FIVE_SECONDS_OF_FRAMES),89 _fpsAverage(FIVE_SECONDS_OF_FRAMES),
88 _fastFPSAverage(ONE_SECOND_OF_FRAMES),90 _fastFPSAverage(ONE_SECOND_OF_FRAMES),
89 _loginAction(NULL),91 _loginAction(NULL),
90 _preferencesDialog(NULL)92 _preferencesDialog(NULL),
93 _snapshotsLocation()
91{94{
92 Application *appInstance = Application::getInstance();95 Application *appInstance = Application::getInstance();
93 96
@@ -273,7 +276,7 @@ Menu::Menu() : · 179 unmodified lines
273 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true);276 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Metavoxels, 0, true);
274 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true);277 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::BuckyBalls, 0, true);
275 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true);278 addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::Particles, 0, true);
276 279 addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
277 280
278 QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options");281 QMenu* voxelOptionsMenu = developerMenu->addMenu("Voxel Options");
279 282
@@ -286,7 +289,6 @@ Menu::Menu() : · 6 unmodified lines
286 289
287 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::VoxelTextures);290 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::VoxelTextures);
288 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::AmbientOcclusion);291 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::AmbientOcclusion);
289 addActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::LodTools, Qt::SHIFT | Qt::Key_L, this, SLOT(lodTools()));
290 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DontFadeOnVoxelServerChanges);292 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DontFadeOnVoxelServerChanges);
291 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DisableAutoAdjustLOD);293 addCheckableActionToQMenuAndActionHash(voxelOptionsMenu, MenuOption::DisableAutoAdjustLOD);
292 294
@@ -415,7 +417,14 @@ void Menu::loadSettings(QSettings* settings) { · 122 unmodified lines
415 _maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);417 _maxVoxels = loadSetting(settings, "maxVoxels", DEFAULT_MAX_VOXELS_PER_SYSTEM);
416 _maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);418 _maxVoxelPacketsPerSecond = loadSetting(settings, "maxVoxelsPPS", DEFAULT_MAX_VOXEL_PPS);
417 _voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);419 _voxelSizeScale = loadSetting(settings, "voxelSizeScale", DEFAULT_OCTREE_SIZE_SCALE);
420 _automaticAvatarLOD = settings->value("automaticAvatarLOD", true).toBool();
421 _avatarLODDecreaseFPS = loadSetting(settings, "avatarLODDecreaseFPS", DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS);
422 _avatarLODIncreaseFPS = loadSetting(settings, "avatarLODIncreaseFPS", ADJUST_LOD_UP_FPS);
423 _avatarLODDistanceMultiplier = loadSetting(settings, "avatarLODDistanceMultiplier",
424 DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER);
418 _boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);425 _boundaryLevelAdjust = loadSetting(settings, "boundaryLevelAdjust", 0);
426 _snapshotsLocation = settings->value("snapshotsLocation",
427 QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)).toString();
419 428
420 settings->beginGroup("View Frustum Offset Camera");429 settings->beginGroup("View Frustum Offset Camera");
421 // in case settings is corrupt or missing loadSetting() will check for NaN430 // in case settings is corrupt or missing loadSetting() will check for NaN
@@ -454,7 +463,12 @@ void Menu::saveSettings(QSettings* settings) { · 32 unmodified lines
454 settings->setValue("maxVoxels", _maxVoxels);463 settings->setValue("maxVoxels", _maxVoxels);
455 settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);464 settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond);
456 settings->setValue("voxelSizeScale", _voxelSizeScale);465 settings->setValue("voxelSizeScale", _voxelSizeScale);
466 settings->setValue("automaticAvatarLOD", _automaticAvatarLOD);
467 settings->setValue("avatarLODDecreaseFPS", _avatarLODDecreaseFPS);
468 settings->setValue("avatarLODIncreaseFPS", _avatarLODIncreaseFPS);
469 settings->setValue("avatarLODDistanceMultiplier", _avatarLODDistanceMultiplier);
457 settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);470 settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust);
471 settings->setValue("snapshotsLocation", _snapshotsLocation);
458 settings->beginGroup("View Frustum Offset Camera");472 settings->beginGroup("View Frustum Offset Camera");
459 settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);473 settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw);
460 settings->setValue("viewFrustumOffsetPitch", _viewFrustumOffset.pitch);474 settings->setValue("viewFrustumOffsetPitch", _viewFrustumOffset.pitch);
@@ -1157,27 +1171,27 @@ void Menu::autoAdjustLOD(float currentFPS) { · 696 unmodified lines
1157 1171
1158 quint64 now = usecTimestampNow();1172 quint64 now = usecTimestampNow();
1159 1173
1160 const float ADJUST_AVATAR_LOD_DOWN_FPS = 30.0f;
1161 const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000;1174 const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000;
1162 if (_fastFPSAverage.getAverage() < ADJUST_AVATAR_LOD_DOWN_FPS) {1175 if (_automaticAvatarLOD) {
1163 if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {1176 if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS) {
1164 // attempt to lower the detail in proportion to the fps difference1177 if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) {
1165 float targetFps = (ADJUST_AVATAR_LOD_DOWN_FPS + ADJUST_LOD_UP_FPS) * 0.5f;1178 // attempt to lower the detail in proportion to the fps difference
1166 float averageFps = _fastFPSAverage.getAverage();1179 float targetFps = (_avatarLODDecreaseFPS + _avatarLODIncreaseFPS) * 0.5f;
1167 const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;1180 float averageFps = _fastFPSAverage.getAverage();
1168 const float MAXIMUM_DISTANCE_MULTIPLIER = 15.0f;1181 const float MAXIMUM_MULTIPLIER_SCALE = 2.0f;
1169 _avatarLODDistanceMultiplier = qMin(MAXIMUM_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *1182 _avatarLODDistanceMultiplier = qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier *
1170 (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps)));1183 (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE :
1171 _lastAvatarDetailDrop = now;1184 qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps)));
1185 _lastAvatarDetailDrop = now;
1186 }
1187 } else if (_fastFPSAverage.getAverage() > _avatarLODIncreaseFPS) {
1188 // let the detail level creep slowly upwards
1189 const float DISTANCE_DECREASE_RATE = 0.05f;
1190 _avatarLODDistanceMultiplier = qMax(MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER,
1191 _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE);
1172 }1192 }
1173 } else if (_fastFPSAverage.getAverage() > ADJUST_LOD_UP_FPS) {
1174 // let the detail level creep slowly upwards
1175 const float DISTANCE_DECREASE_RATE = 0.05f;
1176 const float MINIMUM_DISTANCE_MULTIPLIER = 0.1f;
1177 _avatarLODDistanceMultiplier = qMax(MINIMUM_DISTANCE_MULTIPLIER,
1178 _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE);
1179 }1193 }
1180 1194
1181 bool changed = false;1195 bool changed = false;
1182 quint64 elapsed = now - _lastAdjust;1196 quint64 elapsed = now - _lastAdjust;
1183 1197
@@ -1501,3 +1515,10 @@ void Menu::removeMenuItem(const QString& menu, const QString& menuitem) { · 317 unmodified lines
1501 QMenuBar::repaint();1515 QMenuBar::repaint();
1502};1516};
1503 1517
1518QString Menu::getSnapshotsLocation() const {
1519 if (_snapshotsLocation.isNull() || _snapshotsLocation.isEmpty() || QDir(_snapshotsLocation).exists() == false) {
1520 return QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
1521 }
1522 return _snapshotsLocation;
1523}
1524