// // Re-created Bradley Austin Davis on 2016/01/22 // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "PreferencesDialog.h" #include #include #include #include #include #include #include #include #include "Application.h" #include "DialogsManager.h" #include "LODManager.h" #include "Menu.h" #include "Snapshot.h" #include "UserActivityLogger.h" #include "AmbientOcclusionEffect.h" #include "AntialiasingEffect.h" #include "RenderShadowTask.h" void setupPreferences() { auto preferences = DependencyManager::get(); MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); static const QString AVATAR_BASICS { "Avatar Basics" }; { auto getter = [=]()->QString {return myAvatar->getDisplayName(); }; auto setter = [=](const QString& value) { myAvatar->setDisplayName(value); }; const QString label = "Avatar display name (optional)"; auto preference = new EditPreference(AVATAR_BASICS, label, getter, setter); preference->setPlaceholderText("Not showing a name"); preferences->addPreference(preference); } { auto getter = [=]()->QString {return myAvatar->getCollisionSoundURL(); }; auto setter = [=](const QString& value) { myAvatar->setCollisionSoundURL(value); }; const QString label = "Avatar collision sound URL (optional)"; auto preference = new EditPreference(AVATAR_BASICS, label, getter, setter); preference->setPlaceholderText("Enter the URL of a sound to play when you bump into something"); preferences->addPreference(preference); } { auto getter = [=]()->QString { return myAvatar->getFullAvatarURLFromPreferences().toString(); }; auto setter = [=](const QString& value) { myAvatar->useFullAvatarURL(value, ""); }; auto preference = new AvatarPreference(AVATAR_BASICS, "Appearance: ", getter, setter); preferences->addPreference(preference); } { auto getter = [=]()->bool {return myAvatar->getSnapTurn(); }; auto setter = [=](bool value) { myAvatar->setSnapTurn(value); }; preferences->addPreference(new CheckPreference(AVATAR_BASICS, "Snap Turn when in HMD", getter, setter)); } { auto getter = []()->QString { return Snapshot::snapshotsLocation.get(); }; auto setter = [](const QString& value) { Snapshot::snapshotsLocation.set(value); }; auto preference = new BrowsePreference("Snapshots", "Place my Snapshots here:", getter, setter); preferences->addPreference(preference); } // Scripts { auto getter = []()->QString { return DependencyManager::get()->getScriptsLocation(); }; auto setter = [](const QString& value) { DependencyManager::get()->setScriptsLocation(value); }; preferences->addPreference(new BrowsePreference("Scripts", "Load scripts from this directory:", getter, setter)); } preferences->addPreference(new ButtonPreference("Scripts", "Load Default Scripts", [] { DependencyManager::get()->loadDefaultScripts(); })); { auto getter = []()->bool {return !Menu::getInstance()->isOptionChecked(MenuOption::DisableActivityLogger); }; auto setter = [](bool value) { Menu::getInstance()->setIsOptionChecked(MenuOption::DisableActivityLogger, !value); }; preferences->addPreference(new CheckPreference("Privacy", "Send Data", getter, setter)); } static const QString LOD_TUNING("Level of Detail Tuning"); { auto getter = []()->float { return DependencyManager::get()->getDesktopLODDecreaseFPS(); }; auto setter = [](float value) { DependencyManager::get()->setDesktopLODDecreaseFPS(value); }; auto preference = new SpinnerPreference(LOD_TUNING, "Minimum Desktop FPS", getter, setter); preference->setMin(0); preference->setMax(120); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getHMDLODDecreaseFPS(); }; auto setter = [](float value) { DependencyManager::get()->setHMDLODDecreaseFPS(value); }; auto preference = new SpinnerPreference(LOD_TUNING, "Minimum HMD FPS", getter, setter); preference->setMin(0); preference->setMax(120); preference->setStep(1); preferences->addPreference(preference); } static const QString AVATAR_TUNING { "Avatar Tuning" }; { auto getter = [=]()->float { return myAvatar->getRealWorldFieldOfView(); }; auto setter = [=](float value) { myAvatar->setRealWorldFieldOfView(value); }; auto preference = new SpinnerPreference(AVATAR_TUNING, "Real world vertical field of view (angular size of monitor)", getter, setter); preference->setMin(1); preference->setMax(180); preferences->addPreference(preference); } { auto getter = []()->float { return qApp->getFieldOfView(); }; auto setter = [](float value) { qApp->setFieldOfView(value); }; auto preference = new SpinnerPreference(AVATAR_TUNING, "Vertical field of view", getter, setter); preference->setMin(1); preference->setMax(180); preference->setStep(1); preferences->addPreference(preference); } { auto getter = [=]()->float { return myAvatar->getLeanScale(); }; auto setter = [=](float value) { myAvatar->setLeanScale(value); }; auto preference = new SpinnerPreference(AVATAR_TUNING, "Lean scale (applies to Faceshift users)", getter, setter); preference->setMin(0); preference->setMax(99.9f); preference->setDecimals(2); preference->setStep(1); preferences->addPreference(preference); } { auto getter = [=]()->float { return myAvatar->getUniformScale(); }; auto setter = [=](float value) { myAvatar->setTargetScaleVerbose(value); }; // The hell? auto preference = new SpinnerPreference(AVATAR_TUNING, "Avatar scale (default is 1.0)", getter, setter); preference->setMin(0.01f); preference->setMax(99.9f); preference->setDecimals(2); preference->setStep(1); preferences->addPreference(preference); } { auto getter = [=]()->float { return myAvatar->getHead()->getPupilDilation(); }; auto setter = [=](float value) { myAvatar->getHead()->setPupilDilation(value); }; preferences->addPreference(new SliderPreference(AVATAR_TUNING, "Pupil dilation", getter, setter)); } { auto getter = []()->float { return DependencyManager::get()->getEyeClosingThreshold(); }; auto setter = [](float value) { DependencyManager::get()->setEyeClosingThreshold(value); }; preferences->addPreference(new SliderPreference(AVATAR_TUNING, "Camera binary eyelid threshold", getter, setter)); } { auto getter = []()->float { return FaceTracker::getEyeDeflection(); }; auto setter = [](float value) { FaceTracker::setEyeDeflection(value); }; preferences->addPreference(new SliderPreference(AVATAR_TUNING, "Face tracker eye deflection", getter, setter)); } { auto getter = []()->QString { return DependencyManager::get()->getHostname(); }; auto setter = [](const QString& value) { DependencyManager::get()->setHostname(value); }; auto preference = new EditPreference(AVATAR_TUNING, "Faceshift hostname", getter, setter); preference->setPlaceholderText("localhost"); preferences->addPreference(preference); } { auto getter = [=]()->QString { return myAvatar->getAnimGraphUrl().toString(); }; auto setter = [=](const QString& value) { myAvatar->setAnimGraphUrl(value); }; auto preference = new EditPreference(AVATAR_TUNING, "Avatar Animation JSON", getter, setter); preference->setPlaceholderText("default"); preferences->addPreference(preference); } static const QString AVATAR_CAMERA { "Avatar Camera" }; { auto getter = [=]()->float { return myAvatar->getPitchSpeed(); }; auto setter = [=](float value) { myAvatar->setPitchSpeed(value); }; auto preference = new SpinnerPreference(AVATAR_CAMERA, "Camera Pitch Speed (degrees/second)", getter, setter); preference->setMin(1.0f); preference->setMax(360.0f); preferences->addPreference(preference); } { auto getter = [=]()->float { return myAvatar->getYawSpeed(); }; auto setter = [=](float value) { myAvatar->setYawSpeed(value); }; auto preference = new SpinnerPreference(AVATAR_CAMERA, "Camera Yaw Speed (degrees/second)", getter, setter); preference->setMin(1.0f); preference->setMax(360.0f); preferences->addPreference(preference); } static const QString AUDIO("Audio"); { auto getter = []()->bool {return DependencyManager::get()->getReceivedAudioStream().getDynamicJitterBuffers(); }; auto setter = [](bool value) { DependencyManager::get()->getReceivedAudioStream().setDynamicJitterBuffers(value); }; preferences->addPreference(new CheckPreference(AUDIO, "Enable Dynamic Jitter Buffers", getter, setter)); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getDesiredJitterBufferFrames(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setStaticDesiredJitterBufferFrames(value); }; auto preference = new SpinnerPreference(AUDIO, "Static Jitter Buffer Frames", getter, setter); preference->setMin(0); preference->setMax(10000); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getMaxFramesOverDesired(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setMaxFramesOverDesired(value); }; auto preference = new SpinnerPreference(AUDIO, "Max Frames Over Desired", getter, setter); preference->setMax(10000); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->bool {return DependencyManager::get()->getReceivedAudioStream().getUseStDevForJitterCalc(); }; auto setter = [](bool value) { DependencyManager::get()->getReceivedAudioStream().setUseStDevForJitterCalc(value); }; preferences->addPreference(new CheckPreference(AUDIO, "Use Stddev for Dynamic Jitter Calc", getter, setter)); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getWindowStarveThreshold(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setWindowStarveThreshold(value); }; auto preference = new SpinnerPreference(AUDIO, "Window A Starve Threshold", getter, setter); preference->setMax(10000); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getWindowSecondsForDesiredCalcOnTooManyStarves(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setWindowSecondsForDesiredCalcOnTooManyStarves(value); }; auto preference = new SpinnerPreference(AUDIO, "Window A (raise desired on N starves) Seconds)", getter, setter); preference->setMax(10000); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getReceivedAudioStream().getWindowSecondsForDesiredReduction(); }; auto setter = [](float value) { DependencyManager::get()->getReceivedAudioStream().setWindowSecondsForDesiredReduction(value); }; auto preference = new SpinnerPreference(AUDIO, "Window B (desired ceiling) Seconds", getter, setter); preference->setMax(10000); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->bool {return DependencyManager::get()->getReceivedAudioStream().getRepetitionWithFade(); }; auto setter = [](bool value) { DependencyManager::get()->getReceivedAudioStream().setRepetitionWithFade(value); }; preferences->addPreference(new CheckPreference(AUDIO, "Repetition with Fade", getter, setter)); } { auto getter = []()->float { return DependencyManager::get()->getOutputBufferSize(); }; auto setter = [](float value) { DependencyManager::get()->setOutputBufferSize(value); }; auto preference = new SpinnerPreference(AUDIO, "Output Buffer Initial Size (frames)", getter, setter); preference->setMin(1); preference->setMax(20); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->bool {return DependencyManager::get()->getOutputStarveDetectionEnabled(); }; auto setter = [](bool value) { DependencyManager::get()->setOutputStarveDetectionEnabled(value); }; auto preference = new CheckPreference(AUDIO, "Output Starve Detection (Automatic Buffer Size Increase)", getter, setter); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getOutputStarveDetectionThreshold(); }; auto setter = [](float value) { DependencyManager::get()->setOutputStarveDetectionThreshold(value); }; auto preference = new SpinnerPreference(AUDIO, "Output Starve Detection Threshold", getter, setter); preference->setMin(1); preference->setMax(500); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return DependencyManager::get()->getOutputStarveDetectionPeriod(); }; auto setter = [](float value) { DependencyManager::get()->setOutputStarveDetectionPeriod(value); }; auto preference = new SpinnerPreference(AUDIO, "Output Starve Detection Period (ms)", getter, setter); preference->setMin(1); preference->setMax((float)999999999); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return qApp->getMaxOctreePacketsPerSecond(); }; auto setter = [](float value) { qApp->setMaxOctreePacketsPerSecond(value); }; auto preference = new SpinnerPreference("Octree", "Max packets sent each second", getter, setter); preference->setMin(60); preference->setMax(6000); preference->setStep(10); preferences->addPreference(preference); } { auto getter = []()->float { return qApp->getApplicationCompositor().getHmdUIAngularSize(); }; auto setter = [](float value) { qApp->getApplicationCompositor().setHmdUIAngularSize(value); }; auto preference = new SpinnerPreference("HMD", "User Interface Horizontal Angular Size (degrees)", getter, setter); preference->setMin(30); preference->setMax(160); preference->setStep(1); preferences->addPreference(preference); } { auto getter = []()->float { return controller::InputDevice::getReticleMoveSpeed(); }; auto setter = [](float value) { controller::InputDevice::setReticleMoveSpeed(value); }; auto preference = new SpinnerPreference("Sixense Controllers", "Reticle Movement Speed", getter, setter); preference->setMin(0); preference->setMax(100); preference->setStep(1); preferences->addPreference(preference); } { static const QString RENDER("Graphics"); auto renderConfig = qApp->getRenderEngine()->getConfiguration(); auto ambientOcclusionConfig = renderConfig->getConfig(); { auto getter = [ambientOcclusionConfig]()->QString { return ambientOcclusionConfig->getPreset(); }; auto setter = [ambientOcclusionConfig](QString preset) { ambientOcclusionConfig->setPreset(preset); }; auto preference = new ComboBoxPreference(RENDER, "Ambient Occlusion", getter, setter); preference->setItems(ambientOcclusionConfig->getPresetList()); preferences->addPreference(preference); } auto antialiasingConfig = renderConfig->getConfig(); { auto getter = [antialiasingConfig]()->QString { return antialiasingConfig->getPreset(); }; auto setter = [antialiasingConfig](QString preset) { antialiasingConfig->setPreset(preset); }; auto preference = new ComboBoxPreference(RENDER, "Antialiasing", getter, setter); preference->setItems(antialiasingConfig->getPresetList()); preferences->addPreference(preference); } auto shadowConfig = renderConfig->getConfig(); { auto getter = [shadowConfig]()->QString { return shadowConfig->getPreset(); }; auto setter = [shadowConfig](QString preset) { shadowConfig->setPreset(preset); }; auto preference = new ComboBoxPreference(RENDER, "Shadows", getter, setter); preference->setItems(shadowConfig->getPresetList()); preferences->addPreference(preference); } } }