Addressing the initialization bug not applying REnderMethod properly, Adjusting RefrehRateProfile to Realtime in High performancePreset

This commit is contained in:
Sam Gateau 2019-06-03 18:06:28 -07:00
parent db04f61c5b
commit 2a4d0cfaec
16 changed files with 232 additions and 137 deletions

View file

@ -5375,6 +5375,10 @@ void Application::loadSettings() {
}
}
// Load settings of the RenderScritpingInterface
// Do that explicitely before being used
RenderScriptingInterface::getInstance()->loadSettings();
// Setup the PerformanceManager which will enforce the several settings to match the Preset
// On the first run, the Preset is evaluated from the
getPerformanceManager().setupPerformancePresetSettings(_firstRun.get());

View file

@ -66,7 +66,7 @@ void PerformanceManager::applyPerformancePreset(PerformanceManager::PerformanceP
case PerformancePreset::HIGH:
RenderScriptingInterface::getInstance()->setRenderMethod(RenderScriptingInterface::RenderMethod::DEFERRED);
RenderScriptingInterface::getInstance()->setShadowsEnabled(true);
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::INTERACTIVE);
qApp->getRefreshRateManager().setRefreshRateProfile(RefreshRateManager::RefreshRateProfile::REALTIME);
break;
case PerformancePreset::MID:

View file

@ -21,6 +21,7 @@ PerformanceScriptingInterface::PerformanceScriptingInterface() {
void PerformanceScriptingInterface::setPerformancePreset(PerformancePreset performancePreset) {
qApp->getPerformanceManager().setPerformancePreset((PerformanceManager::PerformancePreset)performancePreset);
emit settingsChanged();
}
PerformanceScriptingInterface::PerformancePreset PerformanceScriptingInterface::getPerformancePreset() const {
@ -34,6 +35,7 @@ QStringList PerformanceScriptingInterface::getPerformancePresetNames() const {
void PerformanceScriptingInterface::setRefreshRateProfile(RefreshRateProfile refreshRateProfile) {
qApp->getRefreshRateManager().setRefreshRateProfile((RefreshRateManager::RefreshRateProfile)refreshRateProfile);
emit settingsChanged();
}
PerformanceScriptingInterface::RefreshRateProfile PerformanceScriptingInterface::getRefreshRateProfile() const {

View file

@ -20,6 +20,9 @@
class PerformanceScriptingInterface : public QObject {
Q_OBJECT
Q_PROPERTY(PerformancePreset performancePreset READ getPerformancePreset WRITE setPerformancePreset NOTIFY settingsChanged)
Q_PROPERTY(RefreshRateProfile refreshRateProfile READ getRefreshRateProfile WRITE setRefreshRateProfile NOTIFY settingsChanged)
public:
// PerformanceManager PerformancePreset tri state level enums
@ -56,6 +59,9 @@ public slots:
RefreshRateManager::UXMode getUXMode() const;
RefreshRateManager::RefreshRateRegime getRefreshRateRegime() const;
signals:
void settingsChanged();
private:
static std::once_flag registry_flag;
};

View file

@ -21,34 +21,43 @@ RenderScriptingInterface::RenderScriptingInterface() {
std::call_once(registry_flag, [] {
qmlRegisterType<RenderScriptingInterface>("RenderEnums", 1, 0, "RenderEnums");
});
}
setRenderMethod((RenderMethod)_renderMethodSettingLock.resultWithReadLock<int>([&] {
return _renderMethodSetting.get();
}));
setShadowsEnabled(_shadowsEnabledSetting.get());
setAmbientOcclusionEnabled(_ambientOcclusionEnabledSetting.get());
setAntialiasingEnabled(_antialiasingEnabledSetting.get());
void RenderScriptingInterface::loadSettings() {
_renderSettingLock.withReadLock([&] {
_renderMethod.store(_renderMethodSetting.get());
_shadowsEnabled.store(_shadowsEnabledSetting.get());
_ambientOcclusionEnabled.store(_ambientOcclusionEnabledSetting.get());
_antialiasingEnabled.store(_antialiasingEnabledSetting.get());
});
forceRenderMethod((RenderMethod)_renderMethod.load());
forceShadowsEnabled(_shadowsEnabled.load());
forceAmbientOcclusionEnabled(_ambientOcclusionEnabled.load());
forceAntialiasingEnabled(_antialiasingEnabled.load());
}
RenderScriptingInterface::RenderMethod RenderScriptingInterface::getRenderMethod() {
return (RenderMethod) _renderMethod;
return (RenderMethod) _renderMethod.load();
}
void RenderScriptingInterface::setRenderMethod(RenderMethod renderMethod) {
if (_renderMethod != (int) renderMethod) {
_renderMethodSettingLock.withWriteLock([&] {
_renderMethod = (int)renderMethod;
_renderMethodSetting.set((int)renderMethod);
auto config = dynamic_cast<task::SwitchConfig*>(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch"));
if (config) {
_renderMethodSetting.set((int)renderMethod);
config->setBranch((int)renderMethod);
}
});
forceRenderMethod(renderMethod);
emit settingsChanged();
}
}
void RenderScriptingInterface::forceRenderMethod(RenderMethod renderMethod) {
_renderSettingLock.withWriteLock([&] {
_renderMethod = (int)renderMethod;
_renderMethodSetting.set((int)renderMethod);
auto config = dynamic_cast<task::SwitchConfig*>(qApp->getRenderEngine()->getConfiguration()->getConfig("RenderMainView.DeferredForwardSwitch"));
if (config) {
_renderMethodSetting.set((int)renderMethod);
config->setBranch((int)renderMethod);
}
});
}
QStringList RenderScriptingInterface::getRenderMethodNames() const {
static const QStringList refrenderMethodNames = { "DEFERRED", "FORWARD" };
@ -56,78 +65,83 @@ QStringList RenderScriptingInterface::getRenderMethodNames() const {
}
bool RenderScriptingInterface::getShadowsEnabled() {
return _shadowsEnabledSetting.get();
return _shadowsEnabled.load();
}
void RenderScriptingInterface::setShadowsEnabled(bool enabled) {
if (_shadowsEnabledSetting.get() == enabled) {
return;
}
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setShadowsEnabled", Q_ARG(bool, enabled));
return;
}
auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<MakeLightingModel>("RenderMainView.LightingModel");
if (lightingModelConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::Shadows, enabled);
_shadowsEnabledSetting.set(enabled);
lightingModelConfig->setShadow(enabled);
if (_shadowsEnabled != enabled) {
forceShadowsEnabled(enabled);
emit settingsChanged();
}
}
void RenderScriptingInterface::forceShadowsEnabled(bool enabled) {
_renderSettingLock.withWriteLock([&] {
_shadowsEnabled.store(enabled);
_shadowsEnabledSetting.set(enabled);
auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<MakeLightingModel>("RenderMainView.LightingModel");
if (lightingModelConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::Shadows, enabled);
lightingModelConfig->setShadow(enabled);
}
});
}
bool RenderScriptingInterface::getAmbientOcclusionEnabled() {
return _ambientOcclusionEnabledSetting.get();
return _ambientOcclusionEnabled.load();
}
void RenderScriptingInterface::setAmbientOcclusionEnabled(bool enabled) {
if (_ambientOcclusionEnabledSetting.get() == enabled) {
return;
}
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setAmbientOcclusionEnabled", Q_ARG(bool, enabled));
return;
}
auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<MakeLightingModel>("RenderMainView.LightingModel");
if (lightingModelConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::AmbientOcclusion, enabled);
_ambientOcclusionEnabledSetting.set(enabled);
lightingModelConfig->setAmbientOcclusion(enabled);
if (_ambientOcclusionEnabled.load() != enabled) {
forceAmbientOcclusionEnabled(enabled);
emit settingsChanged();
}
}
void RenderScriptingInterface::forceAmbientOcclusionEnabled(bool enabled) {
_renderSettingLock.withWriteLock([&] {
_ambientOcclusionEnabled.store(enabled);
_ambientOcclusionEnabledSetting.set(enabled);
auto lightingModelConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<MakeLightingModel>("RenderMainView.LightingModel");
if (lightingModelConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::AmbientOcclusion, enabled);
lightingModelConfig->setAmbientOcclusion(enabled);
}
});
}
bool RenderScriptingInterface::getAntialiasingEnabled() {
return _antialiasingEnabledSetting.get();
return _antialiasingEnabled.load();
}
void RenderScriptingInterface::setAntialiasingEnabled(bool enabled) {
if (_antialiasingEnabledSetting.get() == enabled) {
return;
}
if (QThread::currentThread() != thread()) {
QMetaObject::invokeMethod(this, "setAntialiasingEnabled", Q_ARG(bool, enabled));
return;
}
auto mainViewJitterCamConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<JitterSample>("RenderMainView.JitterCam");
auto mainViewAntialiasingConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<Antialiasing>("RenderMainView.Antialiasing");
if (mainViewJitterCamConfig && mainViewAntialiasingConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::AntiAliasing, enabled);
_antialiasingEnabledSetting.set(enabled);
if (enabled) {
mainViewJitterCamConfig->play();
mainViewAntialiasingConfig->setDebugFXAA(false);
} else {
mainViewJitterCamConfig->none();
mainViewAntialiasingConfig->setDebugFXAA(true);
}
if (_antialiasingEnabled.load() != enabled) {
forceAntialiasingEnabled(enabled);
emit settingsChanged();
}
}
void RenderScriptingInterface::forceAntialiasingEnabled(bool enabled) {
_renderSettingLock.withWriteLock([&] {
_antialiasingEnabled.store(enabled);
_antialiasingEnabledSetting.set(enabled);
auto mainViewJitterCamConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<JitterSample>("RenderMainView.JitterCam");
auto mainViewAntialiasingConfig = qApp->getRenderEngine()->getConfiguration()->getConfig<Antialiasing>("RenderMainView.Antialiasing");
if (mainViewJitterCamConfig && mainViewAntialiasingConfig) {
Menu::getInstance()->setIsOptionChecked(MenuOption::AntiAliasing, enabled);
if (enabled) {
mainViewJitterCamConfig->play();
mainViewAntialiasingConfig->setDebugFXAA(false);
}
else {
mainViewJitterCamConfig->none();
mainViewAntialiasingConfig->setDebugFXAA(true);
}
}
});
}

View file

@ -25,10 +25,10 @@
*/
class RenderScriptingInterface : public QObject {
Q_OBJECT
// Q_PROPERTY(RenderMethod renderMethod READ getRenderMethod WRITE setRenderMethod NOTIFY settingsChanged)
// Q_PROPERTY(bool shadowsEnabled READ getShadowsEnabled WRITE setShadowsEnabled NOTIFY settingsChanged)
// Q_PROPERTY(bool ambientOcclusionEnabled READ getAmbientOcclusionEnabled WRITE setAmbientOcclusionEnabled NOTIFY settingsChanged)
// Q_PROPERTY(bool antialiasingEnabled READ getAntialiasingEnabled WRITE setAntialiasingEnabled NOTIFY settingsChanged)
Q_PROPERTY(RenderMethod renderMethod READ getRenderMethod WRITE setRenderMethod NOTIFY settingsChanged)
Q_PROPERTY(bool shadowsEnabled READ getShadowsEnabled WRITE setShadowsEnabled NOTIFY settingsChanged)
Q_PROPERTY(bool ambientOcclusionEnabled READ getAmbientOcclusionEnabled WRITE setAmbientOcclusionEnabled NOTIFY settingsChanged)
Q_PROPERTY(bool antialiasingEnabled READ getAntialiasingEnabled WRITE setAntialiasingEnabled NOTIFY settingsChanged)
public:
RenderScriptingInterface();
@ -42,6 +42,12 @@ public:
};
Q_ENUM(RenderMethod)
// Load Settings
// Synchronize the runtime value to the actual setting
// Need to be called on start up to re-initialize the runtime to the saved setting states
void loadSettings();
public slots:
/**jsdoc
* Get a config for a job by name
@ -136,14 +142,26 @@ signals:
void settingsChanged();
private:
int _renderMethod { -1 };
mutable ReadWriteLockable _renderMethodSettingLock;
Setting::Handle<int> _renderMethodSetting { "renderMethod", RENDER_FORWARD ? render::Args::RenderMethod::FORWARD : render::Args::RenderMethod::DEFERRED };
// One lock to serialize and access safely all the settings
mutable ReadWriteLockable _renderSettingLock;
// Runtime atomic value of each settings
std::atomic_int _renderMethod{ render::Args::RenderMethod::DEFERRED };
std::atomic_bool _shadowsEnabled{ true };
std::atomic_bool _ambientOcclusionEnabled{ false };
std::atomic_bool _antialiasingEnabled { true };
// Actual settings saved on disk
Setting::Handle<int> _renderMethodSetting { "renderMethod", RENDER_FORWARD ? render::Args::RenderMethod::FORWARD : render::Args::RenderMethod::DEFERRED };
Setting::Handle<bool> _shadowsEnabledSetting { "shadowsEnabled", true };
Setting::Handle<bool> _ambientOcclusionEnabledSetting { "ambientOcclusionEnabled", false };
Setting::Handle<bool> _antialiasingEnabledSetting { "antialiasingEnabled", true };
Setting::Handle<float> _viewportResolutionScaleSetting{ "viewportResolutionScale", 1.0f };
// Force assign both setting AND runtime value to the parameter value
void forceRenderMethod(RenderMethod renderMethod);
void forceShadowsEnabled(bool enabled);
void forceAmbientOcclusionEnabled(bool enabled);
void forceAntialiasingEnabled(bool enabled);
static std::once_flag registry_flag;
};

View file

@ -75,7 +75,12 @@ Prop.PropGroup {
filled: root.jobEnabled
fillColor: (root.jobEnabled ? global.colorGreenHighlight : global.colorOrangeAccent)
icon: 5
iconMouseArea.onClicked: { toggleJobActivation() }
MouseArea{
id: mousearea
anchors.fill: parent
onClicked: { root.toggleJobActivation() }
}
}
}

View file

@ -19,7 +19,7 @@ PropItem {
property alias enums : valueCombo.model
Component.onCompleted: {
// valueVar = root.valueVarGetter();
valueVar = root.valueVarGetter();
}
PropComboBox {

View file

@ -29,6 +29,7 @@ Item {
readonly property color colorBackHighlight: hifi.colors.baseGrayHighlight
readonly property color colorBorderLight: hifi.colors.lightGray
readonly property color colorBorderHighight: hifi.colors.blueHighlight
readonly property color colorBorderLighter: hifi.colors.faintGray
readonly property color colorOrangeAccent: "#FF6309"
readonly property color colorRedAccent: "#C62147"

View file

@ -29,11 +29,19 @@ Canvas {
}
property var fillColor: global.colorBorderHighight
onFillColorChanged: function () { //console.log("fillColor changed to: " + filled );
onFillColorChanged: function () { //console.log("fillColor changed to: " + fillColor );
requestPaint()
}
property alias iconMouseArea: mousearea
property var stroked: true
onStrokedChanged: function () { //console.log("Stroked changed to: " + stroked );
requestPaint()
}
property var strokeColor: global.colorBorderLight
onStrokeColorChanged: function () { //console.log("strokeColor changed to: " + strokeColor );
requestPaint()
}
contextType: "2d"
onPaint: {
@ -86,14 +94,10 @@ Canvas {
if (filled) {
context.fillStyle = fillColor;
context.fill();
} else {
context.strokeStyle = fillColor;
}
if (stroked) {
context.strokeStyle = strokeColor;
context.stroke();
}
}
MouseArea{
id: mousearea
anchors.fill: parent
}
}

View file

@ -9,15 +9,47 @@
//
import QtQuick 2.7
import controlsUit 1.0 as HifiControls
import QtQuick.Controls 2.2
HifiControls.CheckBox {
CheckBox {
Global { id: global }
color: global.fontColor
id: control
text: ""
checked: true
spacing: 0
//anchors.left: root.splitter.right
//anchors.verticalCenter: root.verticalCenter
//width: root.width * global.valueAreaWidthScale
indicator: Rectangle {
color: global.colorBack
border.color: control.down ? global.colorBorderLighter : global.colorBorderLight
border.width: global.valueBorderWidth
radius: global.valueBorderRadius / 2
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
implicitWidth: global.iconWidth
implicitHeight: global.iconWidth
Rectangle {
visible: control.checked
color: global.colorBorderHighight
radius: global.valueBorderRadius / 4
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
implicitWidth: global.iconWidth - 2
implicitHeight: global.iconHeight - 2
}
}
contentItem: PiText {
text: control.text
anchors.verticalCenter: parent.verticalCenter
horizontalAlignment: Text.AlignHLeft
anchors.left: control.indicator.right
leftPadding: global.horizontalMargin
}
height: global.slimHeight
}

View file

@ -28,7 +28,7 @@ ComboBox {
horizontalAlignment: global.valueTextAlign
}
background: Rectangle {
color:highlighted?global.colorBackHighlight:global.color;
color:highlighted ? global.colorBackHighlight : global.colorBack;
}
highlighted: valueCombo.highlightedIndex === index
}
@ -38,11 +38,8 @@ ComboBox {
x: valueCombo.width - width - valueCombo.rightPadding
y: valueCombo.topPadding + (valueCombo.availableHeight - height) / 2
icon: 1
/*Connections {
target: valueCombo
onPressedChanged: { canvas.icon = control.down + 1 }
}*/
strokeColor: (valueCombo.down ? global.colorBorderLighter : global.colorBorderLight )
icon: 1 + valueCombo.down
}
contentItem: PiText {
@ -56,8 +53,8 @@ ComboBox {
background: Rectangle {
implicitWidth: 120
implicitHeight: 40
color: global.color
border.color: valueCombo.popup.visible ? global.colorBorderHighight : global.colorBorderLight
color: global.colorBack
border.color: valueCombo.popup.visible ? global.colorBorderLighter : global.colorBorderLight
border.width: global.valueBorderWidth
radius: global.valueBorderRadius
}
@ -78,7 +75,7 @@ ComboBox {
}
background: Rectangle {
color: global.color
color: global.colorBack
border.color: global.colorBorderHighight
radius: global.valueBorderRadius
}

View file

@ -72,7 +72,12 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
fillColor: global.colorOrangeAccent
iconMouseArea.onClicked: { root.isUnfold = !root.isUnfold }
MouseArea{
id: mousearea
anchors.fill: parent
onClicked: { root.isUnfold = !root.isUnfold }
}
}
}

View file

@ -19,7 +19,6 @@ Column {
Prop.PropString {
label: "Platform Tier"
//object: Performance
valueVarSetter: function (v) {}
valueVarGetter: function () {
return PlatformInfo.getPlatformTierNames()[PlatformInfo.getTierProfiled()]; }
@ -27,17 +26,15 @@ Column {
Prop.PropEnum {
label: "Performance Preset"
//object: Performance
valueVarSetter: Performance.setPerformancePreset
valueVarGetter: Performance.getPerformancePreset
object: Performance
property: "performancePreset"
enums: Performance.getPerformancePresetNames()
}
Prop.PropEnum {
label: "Refresh Rate Profile"
//object: Performance
valueVarSetter: Performance.setRefreshRateProfile
valueVarGetter: Performance.getRefreshRateProfile
object: Performance
property: "refreshRateProfile"
enums: Performance.getRefreshRateProfileNames()
}
}

View file

@ -16,7 +16,8 @@ import controlsUit 1.0 as HifiControls
import "../../lib/prop" as Prop
Column {
width: parent.width
anchors.left: parent.left
anchors.right: parent.right
Prop.PropGroup {
id: computer

View file

@ -24,33 +24,42 @@ Rectangle {
color: global.colorBack
ScrollView {
anchors.fill: parent
anchors.fill: parent
clip: true
Column {
anchors.left: parent.left
anchors.right: parent.right
Column {
anchors.left: parent.left
anchors.right: parent.right
Prop.PropFolderPanel {
label: "Performance Settings"
isUnfold: true
panelFrameData: Component {
PerformanceSettings {}
Prop.PropFolderPanel {
label: "Performance Settings"
isUnfold: true
panelFrameData: Component {
PerformanceSettings {
anchors.left: parent.left
anchors.right: parent.right
}
}
}
}
Prop.PropFolderPanel {
label: "Render Settings"
isUnfold: true
panelFrameData: Component {
RenderSettings {}
Prop.PropFolderPanel {
label: "Render Settings"
isUnfold: true
panelFrameData: Component {
RenderSettings {
anchors.left: parent.left
anchors.right: parent.right
}
}
}
/* Prop.PropFolderPanel {
label: "Platform"
panelFrameData: Component {
Platform {
anchors.left: parent.left
anchors.right: parent.right
}
}
}*/
}
Prop.PropFolderPanel {
label: "Platform"
panelFrameData: Component {
Platform {}
}
}
}
}
}