Showing the changes to interface/src/Menu.cpp (1 of 4 files). Show all
Unified · Split
| @@ -79,6 +79,9 @@ Menu::Menu() : · 78 unmodified lines | |||
| 79 | _lodToolsDialog(NULL), | 79 | _lodToolsDialog(NULL), |
| 80 | _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM), | 80 | _maxVoxels(DEFAULT_MAX_VOXELS_PER_SYSTEM), |
| 81 | _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE), | 81 | _voxelSizeScale(DEFAULT_OCTREE_SIZE_SCALE), |
| 82 | _automaticAvatarLOD(true), | ||
| 83 | _avatarLODDecreaseFPS(DEFAULT_ADJUST_AVATAR_LOD_DOWN_FPS), | ||
| 84 | _avatarLODIncreaseFPS(ADJUST_LOD_UP_FPS), | ||
| 82 | _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER), | 85 | _avatarLODDistanceMultiplier(DEFAULT_AVATAR_LOD_DISTANCE_MULTIPLIER), |
| 83 | _boundaryLevelAdjust(0), | 86 | _boundaryLevelAdjust(0), |
| 84 | _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS), | 87 | _maxVoxelPacketsPerSecond(DEFAULT_MAX_VOXEL_PPS), |
| @@ -273,7 +276,7 @@ Menu::Menu() : · 188 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,6 +417,11 @@ 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); |
| 419 | 426 | ||
| 420 | settings->beginGroup("View Frustum Offset Camera"); | 427 | settings->beginGroup("View Frustum Offset Camera"); |
| @@ -454,6 +461,10 @@ void Menu::saveSettings(QSettings* settings) { · 33 unmodified lines | |||
| 454 | settings->setValue("maxVoxels", _maxVoxels); | 461 | settings->setValue("maxVoxels", _maxVoxels); |
| 455 | settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond); | 462 | settings->setValue("maxVoxelsPPS", _maxVoxelPacketsPerSecond); |
| 456 | settings->setValue("voxelSizeScale", _voxelSizeScale); | 463 | settings->setValue("voxelSizeScale", _voxelSizeScale); |
| 464 | settings->setValue("automaticAvatarLOD", _automaticAvatarLOD); | ||
| 465 | settings->setValue("avatarLODDecreaseFPS", _avatarLODDecreaseFPS); | ||
| 466 | settings->setValue("avatarLODIncreaseFPS", _avatarLODIncreaseFPS); | ||
| 467 | settings->setValue("avatarLODDistanceMultiplier", _avatarLODDistanceMultiplier); | ||
| 457 | settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust); | 468 | settings->setValue("boundaryLevelAdjust", _boundaryLevelAdjust); |
| 458 | settings->beginGroup("View Frustum Offset Camera"); | 469 | settings->beginGroup("View Frustum Offset Camera"); |
| 459 | settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw); | 470 | settings->setValue("viewFrustumOffsetYaw", _viewFrustumOffset.yaw); |
| @@ -1165,27 +1176,27 @@ void Menu::autoAdjustLOD(float currentFPS) { · 705 unmodified lines | |||
| 1165 | 1176 | ||
| 1166 | quint64 now = usecTimestampNow(); | 1177 | quint64 now = usecTimestampNow(); |
| 1167 | 1178 | ||
| 1168 | const float ADJUST_AVATAR_LOD_DOWN_FPS = 30.0f; | ||
| 1169 | const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000; | 1179 | const quint64 ADJUST_AVATAR_LOD_DOWN_DELAY = 1000 * 1000; |
| 1170 | if (_fastFPSAverage.getAverage() < ADJUST_AVATAR_LOD_DOWN_FPS) { | 1180 | if (_automaticAvatarLOD) { |
| 1171 | if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) { | 1181 | if (_fastFPSAverage.getAverage() < _avatarLODDecreaseFPS) { |
| 1172 | // attempt to lower the detail in proportion to the fps difference | 1182 | if (now - _lastAvatarDetailDrop > ADJUST_AVATAR_LOD_DOWN_DELAY) { |
| 1173 | float targetFps = (ADJUST_AVATAR_LOD_DOWN_FPS + ADJUST_LOD_UP_FPS) * 0.5f; | 1183 | // attempt to lower the detail in proportion to the fps difference |
| 1174 | float averageFps = _fastFPSAverage.getAverage(); | 1184 | float targetFps = (_avatarLODDecreaseFPS + _avatarLODIncreaseFPS) * 0.5f; |
| 1175 | const float MAXIMUM_MULTIPLIER_SCALE = 2.0f; | 1185 | float averageFps = _fastFPSAverage.getAverage(); |
| 1176 | const float MAXIMUM_DISTANCE_MULTIPLIER = 15.0f; | 1186 | const float MAXIMUM_MULTIPLIER_SCALE = 2.0f; |
| 1177 | _avatarLODDistanceMultiplier = qMin(MAXIMUM_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier * | 1187 | _avatarLODDistanceMultiplier = qMin(MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, _avatarLODDistanceMultiplier * |
| 1178 | (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps))); | 1188 | (averageFps < EPSILON ? MAXIMUM_MULTIPLIER_SCALE : |
| 1179 | _lastAvatarDetailDrop = now; | 1189 | qMin(MAXIMUM_MULTIPLIER_SCALE, targetFps / averageFps))); |
| 1190 | _lastAvatarDetailDrop = now; | ||
| 1191 | } | ||
| 1192 | } else if (_fastFPSAverage.getAverage() > _avatarLODIncreaseFPS) { | ||
| 1193 | // let the detail level creep slowly upwards | ||
| 1194 | const float DISTANCE_DECREASE_RATE = 0.05f; | ||
| 1195 | _avatarLODDistanceMultiplier = qMax(MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER, | ||
| 1196 | _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE); | ||
| 1180 | } | 1197 | } |
| 1181 | } else if (_fastFPSAverage.getAverage() > ADJUST_LOD_UP_FPS) { | ||
| 1182 | // let the detail level creep slowly upwards | ||
| 1183 | const float DISTANCE_DECREASE_RATE = 0.05f; | ||
| 1184 | const float MINIMUM_DISTANCE_MULTIPLIER = 0.1f; | ||
| 1185 | _avatarLODDistanceMultiplier = qMax(MINIMUM_DISTANCE_MULTIPLIER, | ||
| 1186 | _avatarLODDistanceMultiplier - DISTANCE_DECREASE_RATE); | ||
| 1187 | } | 1198 | } |
| 1188 | 1199 | ||
| 1189 | bool changed = false; | 1200 | bool changed = false; |
| 1190 | quint64 elapsed = now - _lastAdjust; | 1201 | quint64 elapsed = now - _lastAdjust; |
| 1191 | 1202 | ||