mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 09:09:56 +02:00
Merge pull request #15918 from zfox23/newGraphicsSettings
New Settings -> Graphics... dialog for Classic UI users
This commit is contained in:
commit
09729fb430
6 changed files with 397 additions and 6 deletions
|
@ -22,6 +22,7 @@ FocusScope {
|
||||||
property alias editable: comboBox.editable
|
property alias editable: comboBox.editable
|
||||||
property alias comboBox: comboBox
|
property alias comboBox: comboBox
|
||||||
readonly property alias currentText: comboBox.currentText;
|
readonly property alias currentText: comboBox.currentText;
|
||||||
|
property alias displayText: comboBox.displayText;
|
||||||
property alias currentIndex: comboBox.currentIndex;
|
property alias currentIndex: comboBox.currentIndex;
|
||||||
property int currentHighLightedIndex: comboBox.currentIndex;
|
property int currentHighLightedIndex: comboBox.currentIndex;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,378 @@
|
||||||
|
//
|
||||||
|
// GraphicsSettings.qml
|
||||||
|
// qml\hifi\dialogs\graphics
|
||||||
|
//
|
||||||
|
// Created by Zach Fox on 2019-07-10
|
||||||
|
// Copyright 2019 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
|
||||||
|
//
|
||||||
|
|
||||||
|
import Hifi 1.0 as Hifi
|
||||||
|
import QtQuick 2.10
|
||||||
|
import QtQuick.Controls 2.3
|
||||||
|
import QtQuick.Layouts 1.12
|
||||||
|
import stylesUit 1.0 as HifiStylesUit
|
||||||
|
import controlsUit 1.0 as HifiControlsUit
|
||||||
|
import "qrc:////qml//controls" as HifiControls
|
||||||
|
import PerformanceEnums 1.0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
HifiStylesUit.HifiConstants { id: hifi; }
|
||||||
|
|
||||||
|
id: root;
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
id: graphicsSettingsColumnLayout
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.leftMargin: 26
|
||||||
|
anchors.right: parent.right
|
||||||
|
anchors.rightMargin: 26
|
||||||
|
anchors.top: parent.top
|
||||||
|
spacing: 8
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
Layout.topMargin: 18
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
HifiStylesUit.RalewayRegular {
|
||||||
|
text: "GRAPHICS SETTINGS"
|
||||||
|
Layout.maximumWidth: parent.width
|
||||||
|
height: 30
|
||||||
|
size: 16
|
||||||
|
color: "#FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.topMargin: 10
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
HifiControlsUit.RadioButton {
|
||||||
|
id: performanceLow
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
height: 18
|
||||||
|
fontSize: 16
|
||||||
|
leftPadding: 0
|
||||||
|
text: "Low"
|
||||||
|
checked: Performance.getPerformancePreset() === PerformanceEnums.LOW
|
||||||
|
onClicked: {
|
||||||
|
Performance.setPerformancePreset(PerformanceEnums.LOW);
|
||||||
|
root.refreshAllDropdowns();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.RadioButton {
|
||||||
|
id: performanceMedium
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
height: 18
|
||||||
|
fontSize: 16
|
||||||
|
leftPadding: 0
|
||||||
|
text: "Medium"
|
||||||
|
checked: Performance.getPerformancePreset() === PerformanceEnums.MID
|
||||||
|
onClicked: {
|
||||||
|
Performance.setPerformancePreset(PerformanceEnums.MID);
|
||||||
|
root.refreshAllDropdowns();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.RadioButton {
|
||||||
|
id: performanceHigh
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
height: 18
|
||||||
|
fontSize: 16
|
||||||
|
leftPadding: 0
|
||||||
|
text: "High"
|
||||||
|
checked: Performance.getPerformancePreset() === PerformanceEnums.HIGH
|
||||||
|
onClicked: {
|
||||||
|
Performance.setPerformancePreset(PerformanceEnums.HIGH);
|
||||||
|
root.refreshAllDropdowns();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.RadioButton {
|
||||||
|
id: performanceCustom
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
height: 18
|
||||||
|
fontSize: 16
|
||||||
|
leftPadding: 0
|
||||||
|
text: "Custom"
|
||||||
|
checked: Performance.getPerformancePreset() === PerformanceEnums.UNKNOWN
|
||||||
|
onClicked: {
|
||||||
|
Performance.setPerformancePreset(PerformanceEnums.UNKNOWN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.topMargin: 10
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
Layout.preferredHeight: 35
|
||||||
|
|
||||||
|
HifiStylesUit.RalewayRegular {
|
||||||
|
id: worldDetailHeader
|
||||||
|
text: "World Detail"
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 130
|
||||||
|
height: parent.height
|
||||||
|
size: 16
|
||||||
|
color: "#FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: worldDetailModel
|
||||||
|
|
||||||
|
ListElement {
|
||||||
|
text: "Low World Detail"
|
||||||
|
worldDetailQualityValue: 0.25
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Medium World Detail"
|
||||||
|
worldDetailQualityValue: 0.5
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Full World Detail"
|
||||||
|
worldDetailQualityValue: 0.75
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.ComboBox {
|
||||||
|
id: worldDetailDropdown
|
||||||
|
enabled: performanceCustom.checked
|
||||||
|
anchors.left: worldDetailHeader.right
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 280
|
||||||
|
height: parent.height
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
model: worldDetailModel
|
||||||
|
currentIndex: -1
|
||||||
|
|
||||||
|
function refreshWorldDetailDropdown() {
|
||||||
|
var currentWorldDetailQuality = LODManager.worldDetailQuality;
|
||||||
|
if (currentWorldDetailQuality <= 0.25) {
|
||||||
|
worldDetailDropdown.currentIndex = 0;
|
||||||
|
} else if (currentWorldDetailQuality <= 0.5) {
|
||||||
|
worldDetailDropdown.currentIndex = 1;
|
||||||
|
} else {
|
||||||
|
worldDetailDropdown.currentIndex = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
worldDetailDropdown.refreshWorldDetailDropdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
onCurrentIndexChanged: {
|
||||||
|
LODManager.worldDetailQuality = model.get(currentIndex).worldDetailQualityValue;
|
||||||
|
worldDetailDropdown.displayText = model.get(currentIndex).text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
Layout.preferredHeight: 35
|
||||||
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
HifiStylesUit.RalewayRegular {
|
||||||
|
id: renderingEffectsHeader
|
||||||
|
text: "Rendering Effects"
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 130
|
||||||
|
height: parent.height
|
||||||
|
size: 16
|
||||||
|
color: "#FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: renderingEffectsModel
|
||||||
|
|
||||||
|
ListElement {
|
||||||
|
text: "No Rendering Effects"
|
||||||
|
preferredRenderMethod: 1 // "FORWARD"
|
||||||
|
shadowsEnabled: false
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Local Lights, Fog, Bloom"
|
||||||
|
preferredRenderMethod: 0 // "DEFERRED"
|
||||||
|
shadowsEnabled: false
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Local Lights, Fog, Bloom, Shadows"
|
||||||
|
preferredRenderMethod: 0 // "DEFERRED"
|
||||||
|
shadowsEnabled: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.ComboBox {
|
||||||
|
id: renderingEffectsDropdown
|
||||||
|
enabled: performanceCustom.checked
|
||||||
|
anchors.left: renderingEffectsHeader.right
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 280
|
||||||
|
height: parent.height
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
model: renderingEffectsModel
|
||||||
|
currentIndex: -1
|
||||||
|
|
||||||
|
function refreshRenderingEffectsDropdownDisplay() {
|
||||||
|
if (Render.shadowsEnabled) {
|
||||||
|
renderingEffectsDropdown.currentIndex = 2;
|
||||||
|
} else if (Render.renderMethod === 0) {
|
||||||
|
renderingEffectsDropdown.currentIndex = 1;
|
||||||
|
} else {
|
||||||
|
renderingEffectsDropdown.currentIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
renderingEffectsDropdown.refreshRenderingEffectsDropdownDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
onCurrentIndexChanged: {
|
||||||
|
var renderMethodToSet = 1;
|
||||||
|
if (model.get(currentIndex).preferredRenderMethod === 0 &&
|
||||||
|
PlatformInfo.isRenderMethodDeferredCapable()) {
|
||||||
|
renderMethodToSet = 0;
|
||||||
|
}
|
||||||
|
Render.renderMethod = renderMethodToSet;
|
||||||
|
Render.shadowsEnabled = model.get(currentIndex).shadowsEnabled;
|
||||||
|
renderingEffectsDropdown.displayText = model.get(currentIndex).text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
Layout.preferredHeight: 35
|
||||||
|
Layout.topMargin: 20
|
||||||
|
|
||||||
|
HifiStylesUit.RalewayRegular {
|
||||||
|
id: refreshRateHeader
|
||||||
|
text: "Refresh Rate"
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 130
|
||||||
|
height: parent.height
|
||||||
|
size: 16
|
||||||
|
color: "#FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
ListModel {
|
||||||
|
id: refreshRateModel
|
||||||
|
|
||||||
|
ListElement {
|
||||||
|
text: "Economical"
|
||||||
|
refreshRatePreset: 0 // RefreshRateProfile::ECO
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Interactive"
|
||||||
|
refreshRatePreset: 1 // RefreshRateProfile::INTERACTIVE
|
||||||
|
}
|
||||||
|
ListElement {
|
||||||
|
text: "Real-Time"
|
||||||
|
refreshRatePreset: 2 // RefreshRateProfile::REALTIME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.ComboBox {
|
||||||
|
id: refreshRateDropdown
|
||||||
|
enabled: performanceCustom.checked
|
||||||
|
anchors.left: refreshRateHeader.right
|
||||||
|
anchors.leftMargin: 20
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 280
|
||||||
|
height: parent.height
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
model: refreshRateModel
|
||||||
|
currentIndex: -1
|
||||||
|
|
||||||
|
function refreshRefreshRateDropdownDisplay() {
|
||||||
|
if (Performance.getRefreshRateProfile() === 0) {
|
||||||
|
refreshRateDropdown.currentIndex = 0;
|
||||||
|
} else if (Performance.getRefreshRateProfile() === 1) {
|
||||||
|
refreshRateDropdown.currentIndex = 1;
|
||||||
|
} else {
|
||||||
|
refreshRateDropdown.currentIndex = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
refreshRateDropdown.refreshRefreshRateDropdownDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
onCurrentIndexChanged: {
|
||||||
|
Performance.setRefreshRateProfile(model.get(currentIndex).refreshRatePreset);
|
||||||
|
refreshRateDropdown.displayText = model.get(currentIndex).text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.preferredWidth: parent.width
|
||||||
|
Layout.preferredHeight: 35
|
||||||
|
Layout.topMargin: 16
|
||||||
|
|
||||||
|
HifiStylesUit.RalewayRegular {
|
||||||
|
id: resolutionHeader
|
||||||
|
text: "Resolution Scale (" + Number.parseFloat(Render.viewportResolutionScale).toPrecision(3) + ")"
|
||||||
|
anchors.left: parent.left
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 130
|
||||||
|
height: parent.height
|
||||||
|
size: 16
|
||||||
|
color: "#FFFFFF"
|
||||||
|
}
|
||||||
|
|
||||||
|
HifiControlsUit.Slider {
|
||||||
|
id: resolutionScaleSlider
|
||||||
|
enabled: performanceCustom.checked
|
||||||
|
anchors.left: resolutionHeader.right
|
||||||
|
anchors.leftMargin: 57
|
||||||
|
anchors.top: parent.top
|
||||||
|
width: 150
|
||||||
|
height: parent.height
|
||||||
|
colorScheme: hifi.colorSchemes.dark
|
||||||
|
minimumValue: 0.25
|
||||||
|
maximumValue: 1.0
|
||||||
|
stepSize: 0.02
|
||||||
|
value: Render.viewportResolutionScale
|
||||||
|
live: true
|
||||||
|
|
||||||
|
function updateResolutionScale(sliderValue) {
|
||||||
|
if (Render.viewportResolutionScale !== sliderValue) {
|
||||||
|
Render.viewportResolutionScale = sliderValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onValueChanged: {
|
||||||
|
updateResolutionScale(value);
|
||||||
|
}
|
||||||
|
onPressedChanged: {
|
||||||
|
if (!pressed) {
|
||||||
|
updateResolutionScale(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function refreshAllDropdowns() {
|
||||||
|
worldDetailDropdown.refreshWorldDetailDropdown();
|
||||||
|
renderingEffectsDropdown.refreshRenderingEffectsDropdownDisplay();
|
||||||
|
refreshRateDropdown.refreshRefreshRateDropdownDisplay();
|
||||||
|
}
|
||||||
|
}
|
|
@ -266,8 +266,13 @@ Menu::Menu() {
|
||||||
// Settings > Graphics...
|
// Settings > Graphics...
|
||||||
action = addActionToQMenuAndActionHash(settingsMenu, "Graphics...");
|
action = addActionToQMenuAndActionHash(settingsMenu, "Graphics...");
|
||||||
connect(action, &QAction::triggered, [] {
|
connect(action, &QAction::triggered, [] {
|
||||||
qApp->showDialog(QString("hifi/dialogs/GraphicsPreferencesDialog.qml"),
|
auto tablet = DependencyManager::get<TabletScriptingInterface>()->getTablet("com.highfidelity.interface.tablet.system");
|
||||||
QString("hifi/tablet/TabletGraphicsPreferences.qml"), "GraphicsPreferencesDialog");
|
auto hmd = DependencyManager::get<HMDScriptingInterface>();
|
||||||
|
tablet->pushOntoStack("hifi/dialogs/graphics/GraphicsSettings.qml");
|
||||||
|
|
||||||
|
if (!hmd->getShouldShowTablet()) {
|
||||||
|
hmd->toggleShouldShowTablet();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Settings > Security...
|
// Settings > Security...
|
||||||
|
|
|
@ -92,7 +92,7 @@ void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformanceP
|
||||||
RenderScriptingInterface::getInstance()->setShadowsEnabled(true);
|
RenderScriptingInterface::getInstance()->setShadowsEnabled(true);
|
||||||
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::REALTIME);
|
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::REALTIME);
|
||||||
|
|
||||||
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.5f);
|
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.75f);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case PerformancePreset::MID:
|
case PerformancePreset::MID:
|
||||||
|
@ -114,7 +114,7 @@ void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformanceP
|
||||||
|
|
||||||
RenderScriptingInterface::getInstance()->setViewportResolutionScale(recommandedPpiScale);
|
RenderScriptingInterface::getInstance()->setViewportResolutionScale(recommandedPpiScale);
|
||||||
|
|
||||||
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.75f);
|
DependencyManager::get<LODManager>()->setWorldDetailQuality(0.25f);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case PerformancePreset::UNKNOWN:
|
case PerformancePreset::UNKNOWN:
|
||||||
|
|
|
@ -221,4 +221,6 @@ QStringList PlatformInfoScriptingInterface::getPlatformTierNames() {
|
||||||
return platformTierNames;
|
return platformTierNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PlatformInfoScriptingInterface::isRenderMethodDeferredCapable() {
|
||||||
|
return platform::Profiler::isRenderMethodDeferredCapable();
|
||||||
|
}
|
||||||
|
|
|
@ -245,7 +245,12 @@ public slots:
|
||||||
*/
|
*/
|
||||||
QStringList getPlatformTierNames();
|
QStringList getPlatformTierNames();
|
||||||
|
|
||||||
|
/**jsdoc
|
||||||
|
* Gets whether the current hardware can render using the Deferred method.
|
||||||
|
* @function PlatformInfo.isRenderMethodDeferredCapable
|
||||||
|
* @returns {bool} <code>true</code> if the current hardware can render using the Deferred method; <code>false</code> otherwise.
|
||||||
|
*/
|
||||||
|
bool isRenderMethodDeferredCapable();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_PlatformInfoScriptingInterface_h
|
#endif // hifi_PlatformInfoScriptingInterface_h
|
||||||
|
|
Loading…
Reference in a new issue