Qt: add high resolution settings to gui tab

This commit is contained in:
Megamouse 2017-09-30 03:31:31 +02:00 committed by kd-11
parent fc0f98b5db
commit 20ad9a13b8
5 changed files with 450 additions and 115 deletions

View File

@ -66,10 +66,15 @@
"gpu": { "gpu": {
"comboboxes": { "comboboxes": {
"renderBox": "Vulkan is the fastest renderer. OpenGL is the most accurate renderer.\nIf unsure, use Vulkan. Should you have any compatibility issues, fall back to OpenGL.\nDirectX 12 is deprecated and should never be used.", "renderBox": "Vulkan is the fastest renderer. OpenGL is the most accurate renderer.\nIf unsure, use Vulkan. Should you have any compatibility issues, fall back to OpenGL.\nDirectX 12 is deprecated and should never be used.",
"resBox": "Leave this on 1280x720; every PS3 game is compatible with this resolution.\nSet it to 1920x1080 only if supported by the game. Lower resolutions may work but are not practical.\nHowever, due to emulation bugs, some games will only render at low resolutions like 480p.", "resBox": "This setting will be ignored if the Resolution Scale is set to anything other than 100%!\nLeave this on 1280x720, every PS3 game is compatible with this resolution.\nSet it to 1920x1080 only if supported by the game. Lower resolutions may work but are not practical.\nHowever rarely due to emulation bugs some games will only render at low resolutions like 480p.",
"graphicsAdapterBox": "On multi GPU systems select which GPU to use in RPCS3 when using Vulkan or DirectX 12.\nThis is not needed when using OpenGL.", "graphicsAdapterBox": "On multi GPU systems select which GPU to use in RPCS3 when using Vulkan or DirectX 12.\nThis is not needed when using OpenGL.",
"aspectBox": "Leave this on 16:9 unless you have a 4:3 monitor.\nAuto also works well, especially if you use a resolution that is not 720p.", "aspectBox": "Leave this on 16:9 unless you have a 4:3 monitor.\nAuto also works well especially if you use a resolution that is not 720p.",
"frameLimitBox": "Off is the best option as it performs faster.\nUsing the frame limiter will add extra overhead and slow down the game.\nHowever, some games will crash if the framerate is too high.\nIf that happens, set value to anything other than Off." "frameLimitBox": "Off is the best option as it performs faster.\nUsing the frame limiter will add extra overhead and slow down the game.\nHowever, some games will crash if the framerate is too high.\nIf that happens, set value to anything other than Off.",
"anisotropicFilterOverride": "Higher values increase sharpness of textures on sloped surfaces at the cost of GPU resources.\nModern GPUs can handle this setting just fine even at 16x.\nKeep this on Automatic if you want to use the original setting used by a real PS3."
},
"sliders": {
"resolutionScale": "Scales the game's resolution by the given percentage.\nThe base resolution is always 1280x720.\nSet this value to 100% if you want to use the normal Resolution options.",
"minimumScalableDimension": "Only framebuffers greater than this size will be upscaled.\nIncreasing this value might fix problems with missing graphics when upscaling, especially when Write Color Buffers is enabled.\nDo not touch this setting if you are unsure."
}, },
"main": { "main": {
"dumpColor": "Enable this option if you get missing graphics or broken lighting ingame.\nMight degrade performance and introduce stuttering in some cases.\nRequired for Demon's Souls.", "dumpColor": "Enable this option if you get missing graphics or broken lighting ingame.\nMight degrade performance and introduce stuttering in some cases.\nRequired for Demon's Souls.",

View File

@ -191,6 +191,7 @@ void emu_settings::LoadSettings(const std::string& path)
fs::create_path(fs::get_config_dir() + path); fs::create_path(fs::get_config_dir() + path);
// Load default config // Load default config
m_defaultSettings = YAML::Load(g_cfg_defaults);
m_currentSettings = YAML::Load(g_cfg_defaults); m_currentSettings = YAML::Load(g_cfg_defaults);
// Add global config // Add global config
@ -259,9 +260,6 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, SettingsType type, bool
void emu_settings::EnhanceCheckBox(QCheckBox* checkbox, SettingsType type) void emu_settings::EnhanceCheckBox(QCheckBox* checkbox, SettingsType type)
{ {
cfg_location loc = SettingsLoc[type];
std::string name = loc[loc.size() - 1];
std::string currSet = GetSetting(type); std::string currSet = GetSetting(type);
if (currSet == "true") if (currSet == "true")
{ {
@ -279,6 +277,39 @@ void emu_settings::EnhanceCheckBox(QCheckBox* checkbox, SettingsType type)
}); });
} }
void emu_settings::EnhanceSlider(QSlider* slider, SettingsType type, bool is_ranged)
{
QString selected = qstr(GetSetting(type));
if (is_ranged)
{
QStringList range = GetSettingOptions(type);
int min = range.first().toInt();
int max = range.last().toInt();
int val = selected.toInt();
if (val < min || val > max)
{
LOG_ERROR(GENERAL, "Passed in an invalid setting for creating enhanced slider");
val = min;
}
slider->setMinimum(min);
slider->setMaximum(max);
slider->setValue(val);
}
else
{
//TODO ?
LOG_ERROR(GENERAL, "TODO: implement unranged enhanced slider");
}
connect(slider, &QSlider::valueChanged, [=](int value)
{
SetSetting(type, sstr(slider->value()));
});
}
std::vector<std::string> emu_settings::GetLoadedLibraries() std::vector<std::string> emu_settings::GetLoadedLibraries()
{ {
return m_currentSettings["Core"]["Load libraries"].as<std::vector<std::string>, std::initializer_list<std::string>>({}); return m_currentSettings["Core"]["Load libraries"].as<std::vector<std::string>, std::initializer_list<std::string>>({});
@ -294,6 +325,17 @@ QStringList emu_settings::GetSettingOptions(SettingsType type) const
return getOptions(const_cast<cfg_location&&>(SettingsLoc[type])); return getOptions(const_cast<cfg_location&&>(SettingsLoc[type]));
} }
std::string emu_settings::GetSettingName(SettingsType type) const
{
cfg_location loc = SettingsLoc[type];
return loc[loc.size() - 1];
}
std::string emu_settings::GetSettingDefault(SettingsType type) const
{
return cfg_adapter::get_node(m_defaultSettings, SettingsLoc[type]).Scalar();
}
std::string emu_settings::GetSetting(SettingsType type) const std::string emu_settings::GetSetting(SettingsType type) const
{ {
return cfg_adapter::get_node(m_currentSettings, SettingsLoc[type]).Scalar(); return cfg_adapter::get_node(m_currentSettings, SettingsLoc[type]).Scalar();

View File

@ -60,6 +60,9 @@ public:
StrictRenderingMode, StrictRenderingMode,
DisableVertexCache, DisableVertexCache,
DisableOcclusionQueries, DisableOcclusionQueries,
AnisotropicFilterOverride,
ResolutionScale,
MinimumScalableDimension,
// Audio // Audio
AudioRenderer, AudioRenderer,
@ -142,12 +145,21 @@ public:
/** Connects a check box with the target settings type*/ /** Connects a check box with the target settings type*/
void EnhanceCheckBox(QCheckBox* checkbox, SettingsType type); void EnhanceCheckBox(QCheckBox* checkbox, SettingsType type);
/** Connects a slider with the target settings type*/
void EnhanceSlider(QSlider* slider, SettingsType type, bool is_ranged = false);
std::vector<std::string> GetLoadedLibraries(); std::vector<std::string> GetLoadedLibraries();
void SaveSelectedLibraries(const std::vector<std::string>& libs); void SaveSelectedLibraries(const std::vector<std::string>& libs);
/** Returns the valid options for a given setting.*/ /** Returns the valid options for a given setting.*/
QStringList GetSettingOptions(SettingsType type) const; QStringList GetSettingOptions(SettingsType type) const;
/** Returns the string for a given setting.*/
std::string GetSettingName(SettingsType type) const;
/** Returns the default value of the setting type.*/
std::string GetSettingDefault(SettingsType type) const;
/** Returns the value of the setting type.*/ /** Returns the value of the setting type.*/
std::string GetSetting(SettingsType type) const; std::string GetSetting(SettingsType type) const;
@ -184,22 +196,25 @@ private:
{ Resolution, { "Video", "Resolution"}}, { Resolution, { "Video", "Resolution"}},
{ AspectRatio, { "Video", "Aspect ratio"}}, { AspectRatio, { "Video", "Aspect ratio"}},
{ FrameLimit, { "Video", "Frame limit"}}, { FrameLimit, { "Video", "Frame limit"}},
{ LogShaderPrograms,{ "Video", "Log shader programs"}}, { LogShaderPrograms, { "Video", "Log shader programs"}},
{ WriteDepthBuffer, { "Video", "Write Depth Buffer"}}, { WriteDepthBuffer, { "Video", "Write Depth Buffer"}},
{ WriteColorBuffers,{ "Video", "Write Color Buffers"}}, { WriteColorBuffers, { "Video", "Write Color Buffers"}},
{ ReadColorBuffers, { "Video", "Read Color Buffers"}}, { ReadColorBuffers, { "Video", "Read Color Buffers"}},
{ ReadDepthBuffer, { "Video", "Read Depth Buffer"}}, { ReadDepthBuffer, { "Video", "Read Depth Buffer"}},
{ VSync, { "Video", "VSync"}}, { VSync, { "Video", "VSync"}},
{ DebugOutput, { "Video", "Debug output"}}, { DebugOutput, { "Video", "Debug output"}},
{ DebugOverlay, { "Video", "Debug overlay"}}, { DebugOverlay, { "Video", "Debug overlay"}},
{ LegacyBuffers, { "Video", "Use Legacy OpenGL Buffers"}}, { LegacyBuffers, { "Video", "Use Legacy OpenGL Buffers"}},
{ GPUTextureScaling,{ "Video", "Use GPU texture scaling"}}, { GPUTextureScaling, { "Video", "Use GPU texture scaling"}},
{ StretchToDisplayArea, { "Video", "Stretch To Display Area"}}, { StretchToDisplayArea, { "Video", "Stretch To Display Area"}},
{ ForceHighpZ, { "Video", "Force High Precision Z buffer"}}, { ForceHighpZ, { "Video", "Force High Precision Z buffer"}},
{ AutoInvalidateCache, { "Video", "Invalidate Cache Every Frame"}}, { AutoInvalidateCache, { "Video", "Invalidate Cache Every Frame"}},
{ StrictRenderingMode, { "Video", "Strict Rendering Mode"}}, { StrictRenderingMode, { "Video", "Strict Rendering Mode"}},
{ DisableVertexCache, { "Video", "Disable Vertex Cache"}}, { DisableVertexCache, { "Video", "Disable Vertex Cache"}},
{ DisableOcclusionQueries,{ "Video", "Disable ZCull Occlusion Queries" }}, { DisableOcclusionQueries, { "Video", "Disable ZCull Occlusion Queries" }},
{ AnisotropicFilterOverride,{ "Video", "Anisotropic Filter Override" }},
{ ResolutionScale, { "Video", "Resolution Scale" }},
{ MinimumScalableDimension, { "Video", "Minimum Scalable Dimension" }},
{ D3D12Adapter, { "Video", "D3D12", "Adapter"}}, { D3D12Adapter, { "Video", "D3D12", "Adapter"}},
{ VulkanAdapter, { "Video", "Vulkan", "Adapter"}}, { VulkanAdapter, { "Video", "Vulkan", "Adapter"}},
@ -238,6 +253,7 @@ private:
{ dev_usb000Location, { "VFS", "/dev_usb000/"}}, { dev_usb000Location, { "VFS", "/dev_usb000/"}},
}; };
YAML::Node m_defaultSettings; // The default settings as a YAML node.
YAML::Node m_currentSettings; // The current settings as a YAML node. YAML::Node m_currentSettings; // The current settings as a YAML node.
fs::file m_config; //! File to read/write the config settings. fs::file m_config; //! File to read/write the config settings.
std::string m_path; std::string m_path;

View File

@ -57,6 +57,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
QJsonObject json_gpu_cbo = json_gpu.value("comboboxes").toObject(); QJsonObject json_gpu_cbo = json_gpu.value("comboboxes").toObject();
QJsonObject json_gpu_main = json_gpu.value("main").toObject(); QJsonObject json_gpu_main = json_gpu.value("main").toObject();
QJsonObject json_gpu_deb = json_gpu.value("debug").toObject(); QJsonObject json_gpu_deb = json_gpu.value("debug").toObject();
QJsonObject json_gpu_slid = json_gpu.value("sliders").toObject();
QJsonObject json_audio = json_obj.value("audio").toObject(); QJsonObject json_audio = json_obj.value("audio").toObject();
QJsonObject json_input = json_obj.value("input").toObject(); QJsonObject json_input = json_obj.value("input").toObject();
@ -365,6 +366,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
xemu_settings->EnhanceComboBox(ui->resBox, emu_settings::Resolution); xemu_settings->EnhanceComboBox(ui->resBox, emu_settings::Resolution);
ui->resBox->setToolTip(json_gpu_cbo["resBox"].toString()); ui->resBox->setToolTip(json_gpu_cbo["resBox"].toString());
ui->resBox->setItemText(ui->resBox->findData("1280x720"), "1280x720 (Recommended)");
xemu_settings->EnhanceComboBox(ui->aspectBox, emu_settings::AspectRatio); xemu_settings->EnhanceComboBox(ui->aspectBox, emu_settings::AspectRatio);
ui->aspectBox->setToolTip(json_gpu_cbo["aspectBox"].toString()); ui->aspectBox->setToolTip(json_gpu_cbo["aspectBox"].toString());
@ -372,6 +374,31 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
xemu_settings->EnhanceComboBox(ui->frameLimitBox, emu_settings::FrameLimit); xemu_settings->EnhanceComboBox(ui->frameLimitBox, emu_settings::FrameLimit);
ui->frameLimitBox->setToolTip(json_gpu_cbo["frameLimitBox"].toString()); ui->frameLimitBox->setToolTip(json_gpu_cbo["frameLimitBox"].toString());
xemu_settings->EnhanceComboBox(ui->anisotropicFilterOverride, emu_settings::AnisotropicFilterOverride, true);
ui->anisotropicFilterOverride->setToolTip(json_gpu_cbo["anisotropicFilterOverride"].toString());
// only allow values 0,2,4,8,16
for (int i = ui->anisotropicFilterOverride->count() - 1; i >= 0; i--)
{
switch (int val = ui->anisotropicFilterOverride->itemData(i).toInt())
{
case 0:
ui->anisotropicFilterOverride->setItemText(i, tr("Automatic"));
break;
case 1:
ui->anisotropicFilterOverride->setItemText(i, tr("Disabled"));
break;
case 2:
case 4:
case 8:
case 16:
ui->anisotropicFilterOverride->setItemText(i, tr("%1x").arg(val));
break;
default:
ui->anisotropicFilterOverride->removeItem(i);
break;
}
}
// Checkboxes: main options // Checkboxes: main options
xemu_settings->EnhanceCheckBox(ui->dumpColor, emu_settings::WriteColorBuffers); xemu_settings->EnhanceCheckBox(ui->dumpColor, emu_settings::WriteColorBuffers);
ui->dumpColor->setToolTip(json_gpu_main["dumpColor"].toString()); ui->dumpColor->setToolTip(json_gpu_main["dumpColor"].toString());
@ -391,6 +418,60 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
xemu_settings->EnhanceCheckBox(ui->scrictModeRendering, emu_settings::StrictRenderingMode); xemu_settings->EnhanceCheckBox(ui->scrictModeRendering, emu_settings::StrictRenderingMode);
ui->scrictModeRendering->setToolTip(json_gpu_main["scrictModeRendering"].toString()); ui->scrictModeRendering->setToolTip(json_gpu_main["scrictModeRendering"].toString());
// Sliders
static const auto& minmaxLabelWidth = [](const QString& sizer)
{
return QLabel(sizer).sizeHint().width();
};
xemu_settings->EnhanceSlider(ui->resolutionScale, emu_settings::ResolutionScale, true);
ui->gb_resolutionScale->setToolTip(json_gpu_slid["resolutionScale"].toString());
// rename label texts to fit current state of Resolution Scale
int resolutionScaleDef = stoi(xemu_settings->GetSettingDefault(emu_settings::ResolutionScale));
auto ScaledResolution = [resolutionScaleDef](int percentage)
{
if (percentage == resolutionScaleDef) return QString("100% (Automatic)");
return QString("%1% (%2x%3)").arg(percentage).arg(1280 * percentage / 100).arg(720 * percentage / 100);
};
ui->resolutionScale->setPageStep(50);
ui->resolutionScaleMin->setText(QString::number(ui->resolutionScale->minimum()));
ui->resolutionScaleMin->setFixedWidth(minmaxLabelWidth("00"));
ui->resolutionScaleMax->setText(QString::number(ui->resolutionScale->maximum()));
ui->resolutionScaleMax->setFixedWidth(minmaxLabelWidth("0000"));
ui->resolutionScaleVal->setText(ScaledResolution(ui->resolutionScale->value()));
connect(ui->resolutionScale, &QSlider::valueChanged, [=](int value)
{
ui->resolutionScaleVal->setText(ScaledResolution(value));
});
connect(ui->resolutionScaleReset, &QAbstractButton::clicked, [=]()
{
ui->resolutionScale->setValue(resolutionScaleDef);
});
xemu_settings->EnhanceSlider(ui->minimumScalableDimension, emu_settings::MinimumScalableDimension, true);
ui->gb_minimumScalableDimension->setToolTip(json_gpu_slid["minimumScalableDimension"].toString());
// rename label texts to fit current state of Minimum Scalable Dimension
int minimumScalableDimensionDef = stoi(xemu_settings->GetSettingDefault(emu_settings::MinimumScalableDimension));
auto MinScalableDimension = [minimumScalableDimensionDef](int dim)
{
if (dim == minimumScalableDimensionDef) return QString("%1x%1 (Default)").arg(dim);
return QString("%1x%1").arg(dim);
};
ui->minimumScalableDimension->setPageStep(64);
ui->minimumScalableDimensionMin->setText(QString::number(ui->minimumScalableDimension->minimum()));
ui->minimumScalableDimensionMin->setFixedWidth(minmaxLabelWidth("00"));
ui->minimumScalableDimensionMax->setText(QString::number(ui->minimumScalableDimension->maximum()));
ui->minimumScalableDimensionMax->setFixedWidth(minmaxLabelWidth("0000"));
ui->minimumScalableDimensionVal->setText(MinScalableDimension(ui->minimumScalableDimension->value()));
connect(ui->minimumScalableDimension, &QSlider::valueChanged, [=](int value)
{
ui->minimumScalableDimensionVal->setText(MinScalableDimension(value));
});
connect(ui->minimumScalableDimensionReset, &QAbstractButton::clicked, [=]()
{
ui->minimumScalableDimension->setValue(minimumScalableDimensionDef);
});
// Remove renderers from the renderer Combobox if not supported // Remove renderers from the renderer Combobox if not supported
for (const auto& renderer : render_creator.renderers) for (const auto& renderer : render_creator.renderers)
{ {

View File

@ -36,7 +36,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>7</number>
</property> </property>
<widget class="QWidget" name="coreTab"> <widget class="QWidget" name="coreTab">
<attribute name="title"> <attribute name="title">
@ -340,7 +340,7 @@
</attribute> </attribute>
<layout class="QVBoxLayout" name="verticalLayout_7"> <layout class="QVBoxLayout" name="verticalLayout_7">
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4" stretch="1,1">
<item> <item>
<widget class="QGroupBox" name="groupBox_26"> <widget class="QGroupBox" name="groupBox_26">
<property name="title"> <property name="title">
@ -354,58 +354,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="groupBox_29"> <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="1,1">
<property name="title">
<string>Resolution</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_22">
<item>
<widget class="QComboBox" name="resBox"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QGroupBox" name="groupBox_42">
<property name="title">
<string>Graphics Device</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">
<item>
<widget class="QComboBox" name="graphicsAdapterBox"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_43">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Enhancements</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_21">
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Advanced Settings</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item> <item>
<widget class="QGroupBox" name="groupBox_44"> <widget class="QGroupBox" name="groupBox_44">
<property name="title"> <property name="title">
@ -432,23 +381,122 @@
</item> </item>
</layout> </layout>
</item> </item>
</layout>
</item>
<item> <item>
<widget class="QWidget" name="widget" native="true"/> <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,1">
<item>
<widget class="QGroupBox" name="groupBox_42">
<property name="title">
<string>Graphics Device</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_18">
<item>
<widget class="QComboBox" name="graphicsAdapterBox"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_22" stretch="1,1">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="gb_anisotropicFilter">
<property name="title">
<string>Anisotropic Filter</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_54">
<item>
<widget class="QComboBox" name="anisotropicFilterOverride"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_antiAliasing">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Anti-Aliasing</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_56">
<item>
<widget class="QComboBox" name="antiAliasing"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item> </item>
</layout> </layout>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_7"> <layout class="QHBoxLayout" name="horizontalLayout_8">
<item alignment="Qt::AlignTop"> <item>
<widget class="QGroupBox" name="groupBox_43">
<property name="enabled">
<bool>false</bool>
</property>
<property name="title">
<string>Enhancements</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_21">
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Advanced Settings</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_29">
<property name="title">
<string>Resolution</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_22">
<item>
<widget class="QComboBox" name="resBox"/>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_7" stretch="1,1">
<item>
<widget class="QGroupBox" name="groupBox_46"> <widget class="QGroupBox" name="groupBox_46">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title"> <property name="title">
<string>Additional Settings</string> <string>Additional Settings</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_16"> <layout class="QVBoxLayout" name="verticalLayout_16">
<item alignment="Qt::AlignTop"> <item>
<widget class="QCheckBox" name="dumpColor"> <widget class="QCheckBox" name="dumpColor">
<property name="text"> <property name="text">
<string>Write Color Buffers</string> <string>Write Color Buffers</string>
@ -494,7 +542,150 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QWidget" name="widget_8" native="true"/> <layout class="QVBoxLayout" name="verticalLayout_59">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="gb_resolutionScale">
<property name="title">
<string>Resolution Scale</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_29">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_25" stretch="1,0">
<item>
<widget class="QLabel" name="resolutionScaleVal">
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="resolutionScaleReset">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="widget_9" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_23" stretch="0,1,0">
<property name="spacing">
<number>12</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="resolutionScaleMin">
<property name="text">
<string>50</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="resolutionScale">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="resolutionScaleMax">
<property name="text">
<string>800</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_minimumScalableDimension">
<property name="title">
<string>Resolution Scale Threshold</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_57">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_26" stretch="1,0">
<item>
<widget class="QLabel" name="minimumScalableDimensionVal">
<property name="text">
<string>1x1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="minimumScalableDimensionReset">
<property name="text">
<string>Reset</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_24" stretch="0,1,0">
<property name="spacing">
<number>12</number>
</property>
<item>
<widget class="QLabel" name="minimumScalableDimensionMin">
<property name="text">
<string>1</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="minimumScalableDimension">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="minimumScalableDimensionMax">
<property name="text">
<string>1024</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</item> </item>