Merge pull request #6579 from ameerj/float-settings

settings: Eliminate usage of float-point setting values
This commit is contained in:
bunnei 2021-07-15 18:03:11 -04:00 committed by GitHub
commit 3cd3230295
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 39 additions and 69 deletions

View file

@ -103,7 +103,7 @@ float Volume() {
if (values.audio_muted) { if (values.audio_muted) {
return 0.0f; return 0.0f;
} }
return values.volume.GetValue(); return values.volume.GetValue() / 100.0f;
} }
void RestoreGlobalState(bool is_powered_on) { void RestoreGlobalState(bool is_powered_on) {

View file

@ -278,7 +278,7 @@ struct Values {
BasicSetting<std::string> sink_id{"auto", "output_engine"}; BasicSetting<std::string> sink_id{"auto", "output_engine"};
BasicSetting<bool> audio_muted{false, "audio_muted"}; BasicSetting<bool> audio_muted{false, "audio_muted"};
Setting<bool> enable_audio_stretching{true, "enable_audio_stretching"}; Setting<bool> enable_audio_stretching{true, "enable_audio_stretching"};
Setting<float> volume{1.0f, "volume"}; Setting<u8> volume{100, "volume"};
// Core // Core
Setting<bool> use_multi_core{true, "use_multi_core"}; Setting<bool> use_multi_core{true, "use_multi_core"};
@ -336,9 +336,9 @@ struct Values {
Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"}; Setting<bool> use_fast_gpu_time{true, "use_fast_gpu_time"};
Setting<bool> use_caches_gc{false, "use_caches_gc"}; Setting<bool> use_caches_gc{false, "use_caches_gc"};
Setting<float> bg_red{0.0f, "bg_red"}; Setting<u8> bg_red{0, "bg_red"};
Setting<float> bg_green{0.0f, "bg_green"}; Setting<u8> bg_green{0, "bg_green"};
Setting<float> bg_blue{0.0f, "bg_blue"}; Setting<u8> bg_blue{0, "bg_blue"};
// System // System
Setting<std::optional<u32>> rng_seed{std::optional<u32>(), "rng_seed"}; Setting<std::optional<u32>> rng_seed{std::optional<u32>(), "rng_seed"};
@ -368,7 +368,7 @@ struct Values {
"udp_input_servers"}; "udp_input_servers"};
BasicSetting<bool> mouse_panning{false, "mouse_panning"}; BasicSetting<bool> mouse_panning{false, "mouse_panning"};
BasicSetting<float> mouse_panning_sensitivity{1.0f, "mouse_panning_sensitivity"}; BasicSetting<u8> mouse_panning_sensitivity{1, "mouse_panning_sensitivity"};
BasicSetting<bool> mouse_enabled{false, "mouse_enabled"}; BasicSetting<bool> mouse_enabled{false, "mouse_enabled"};
std::string mouse_device; std::string mouse_device;
MouseButtonsRaw mouse_buttons; MouseButtonsRaw mouse_buttons;

View file

@ -84,7 +84,7 @@ public:
std::lock_guard lock{mutex}; std::lock_guard lock{mutex};
const auto axis_value = const auto axis_value =
static_cast<float>(mouse_input->GetMouseState(button).axis.at(axis)); static_cast<float>(mouse_input->GetMouseState(button).axis.at(axis));
const float sensitivity = Settings::values.mouse_panning_sensitivity.GetValue(); const float sensitivity = Settings::values.mouse_panning_sensitivity.GetValue() * 0.15f;
return axis_value * sensitivity / (100.0f * range); return axis_value * sensitivity / (100.0f * range);
} }

View file

@ -229,9 +229,6 @@ void RendererOpenGL::LoadColorToActiveGLTexture(u8 color_r, u8 color_g, u8 color
} }
void RendererOpenGL::InitOpenGLObjects() { void RendererOpenGL::InitOpenGLObjects() {
glClearColor(Settings::values.bg_red.GetValue(), Settings::values.bg_green.GetValue(),
Settings::values.bg_blue.GetValue(), 0.0f);
// Create shader programs // Create shader programs
OGLShader vertex_shader; OGLShader vertex_shader;
vertex_shader.Create(HostShaders::OPENGL_PRESENT_VERT, GL_VERTEX_SHADER); vertex_shader.Create(HostShaders::OPENGL_PRESENT_VERT, GL_VERTEX_SHADER);
@ -337,8 +334,9 @@ void RendererOpenGL::ConfigureFramebufferTexture(TextureInfo& texture,
void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) { void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
if (renderer_settings.set_background_color) { if (renderer_settings.set_background_color) {
// Update background color before drawing // Update background color before drawing
glClearColor(Settings::values.bg_red.GetValue(), Settings::values.bg_green.GetValue(), glClearColor(Settings::values.bg_red.GetValue() / 255.0f,
Settings::values.bg_blue.GetValue(), 0.0f); Settings::values.bg_green.GetValue() / 255.0f,
Settings::values.bg_blue.GetValue() / 255.0f, 1.0f);
} }
// Set projection matrix // Set projection matrix

View file

@ -225,8 +225,11 @@ VkSemaphore VKBlitScreen::Draw(const Tegra::FramebufferConfig& framebuffer, bool
descriptor_set = descriptor_sets[image_index], buffer = *buffer, descriptor_set = descriptor_sets[image_index], buffer = *buffer,
size = swapchain.GetSize(), pipeline = *pipeline, size = swapchain.GetSize(), pipeline = *pipeline,
layout = *pipeline_layout](vk::CommandBuffer cmdbuf) { layout = *pipeline_layout](vk::CommandBuffer cmdbuf) {
const f32 bg_red = Settings::values.bg_red.GetValue() / 255.0f;
const f32 bg_green = Settings::values.bg_green.GetValue() / 255.0f;
const f32 bg_blue = Settings::values.bg_blue.GetValue() / 255.0f;
const VkClearValue clear_color{ const VkClearValue clear_color{
.color = {.float32 = {0.0f, 0.0f, 0.0f, 0.0f}}, .color = {.float32 = {bg_red, bg_green, bg_blue, 1.0f}},
}; };
const VkRenderPassBeginInfo renderpass_bi{ const VkRenderPassBeginInfo renderpass_bi{
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,

View file

@ -311,16 +311,6 @@ void Config::WriteBasicSetting(const Settings::BasicSetting<std::string>& settin
qt_config->setValue(name, QString::fromStdString(value)); qt_config->setValue(name, QString::fromStdString(value));
} }
// Explicit float definition: use a double as Qt doesn't write legible floats to config files
template <>
void Config::WriteBasicSetting(const Settings::BasicSetting<float>& setting) {
const QString name = QString::fromStdString(setting.GetLabel());
const double value = setting.GetValue();
qt_config->setValue(name + QStringLiteral("/default"),
setting.GetValue() == setting.GetDefault());
qt_config->setValue(name, value);
}
template <typename Type> template <typename Type>
void Config::WriteBasicSetting(const Settings::BasicSetting<Type>& setting) { void Config::WriteBasicSetting(const Settings::BasicSetting<Type>& setting) {
const QString name = QString::fromStdString(setting.GetLabel()); const QString name = QString::fromStdString(setting.GetLabel());
@ -329,21 +319,6 @@ void Config::WriteBasicSetting(const Settings::BasicSetting<Type>& setting) {
qt_config->setValue(name, value); qt_config->setValue(name, value);
} }
// Explicit float definition: use a double as Qt doesn't write legible floats to config files
template <>
void Config::WriteGlobalSetting(const Settings::Setting<float>& setting) {
const QString name = QString::fromStdString(setting.GetLabel());
const double value = setting.GetValue(global);
if (!global) {
qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal());
}
if (global || !setting.UsingGlobal()) {
qt_config->setValue(name + QStringLiteral("/default"),
setting.GetValue(global) == setting.GetDefault());
qt_config->setValue(name, value);
}
}
template <typename Type> template <typename Type>
void Config::WriteGlobalSetting(const Settings::Setting<Type>& setting) { void Config::WriteGlobalSetting(const Settings::Setting<Type>& setting) {
const QString name = QString::fromStdString(setting.GetLabel()); const QString name = QString::fromStdString(setting.GetLabel());

View file

@ -47,7 +47,8 @@ void ConfigureAudio::SetConfiguration() {
SetAudioDeviceFromDeviceID(); SetAudioDeviceFromDeviceID();
ui->volume_slider->setValue(Settings::values.volume.GetValue() * ui->volume_slider->maximum()); const auto volume_value = Settings::values.volume.GetValue() * ui->volume_slider->maximum();
ui->volume_slider->setValue(volume_value / 100);
ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching.GetValue()); ui->toggle_audio_stretching->setChecked(Settings::values.enable_audio_stretching.GetValue());
@ -112,18 +113,16 @@ void ConfigureAudio::ApplyConfiguration() {
// Guard if during game and set to game-specific value // Guard if during game and set to game-specific value
if (Settings::values.volume.UsingGlobal()) { if (Settings::values.volume.UsingGlobal()) {
Settings::values.volume.SetValue( const s32 volume = ui->volume_slider->sliderPosition() / ui->volume_slider->maximum();
static_cast<float>(ui->volume_slider->sliderPosition()) / Settings::values.volume.SetValue(static_cast<u8>(100 * volume));
ui->volume_slider->maximum());
} }
} else { } else {
if (ui->volume_combo_box->currentIndex() == 0) { if (ui->volume_combo_box->currentIndex() == 0) {
Settings::values.volume.SetGlobal(true); Settings::values.volume.SetGlobal(true);
} else { } else {
Settings::values.volume.SetGlobal(false); Settings::values.volume.SetGlobal(false);
Settings::values.volume.SetValue( const s32 volume = ui->volume_slider->sliderPosition() / ui->volume_slider->maximum();
static_cast<float>(ui->volume_slider->sliderPosition()) / Settings::values.volume.SetValue(static_cast<u8>(100 * volume));
ui->volume_slider->maximum());
} }
} }
} }

View file

@ -101,7 +101,7 @@ void ConfigureGraphics::SetConfiguration() {
ConfigurationShared::SetHighlight(ui->bg_layout, !Settings::values.bg_red.UsingGlobal()); ConfigurationShared::SetHighlight(ui->bg_layout, !Settings::values.bg_red.UsingGlobal());
} }
UpdateBackgroundColorButton(QColor::fromRgbF(Settings::values.bg_red.GetValue(), UpdateBackgroundColorButton(QColor::fromRgb(Settings::values.bg_red.GetValue(),
Settings::values.bg_green.GetValue(), Settings::values.bg_green.GetValue(),
Settings::values.bg_blue.GetValue())); Settings::values.bg_blue.GetValue()));
UpdateDeviceComboBox(); UpdateDeviceComboBox();
@ -132,9 +132,9 @@ void ConfigureGraphics::ApplyConfiguration() {
Settings::values.vulkan_device.SetValue(vulkan_device); Settings::values.vulkan_device.SetValue(vulkan_device);
} }
if (Settings::values.bg_red.UsingGlobal()) { if (Settings::values.bg_red.UsingGlobal()) {
Settings::values.bg_red.SetValue(static_cast<float>(bg_color.redF())); Settings::values.bg_red.SetValue(static_cast<u8>(bg_color.red()));
Settings::values.bg_green.SetValue(static_cast<float>(bg_color.greenF())); Settings::values.bg_green.SetValue(static_cast<u8>(bg_color.green()));
Settings::values.bg_blue.SetValue(static_cast<float>(bg_color.blueF())); Settings::values.bg_blue.SetValue(static_cast<u8>(bg_color.blue()));
} }
} else { } else {
if (ui->api->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { if (ui->api->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) {
@ -159,9 +159,9 @@ void ConfigureGraphics::ApplyConfiguration() {
Settings::values.bg_red.SetGlobal(false); Settings::values.bg_red.SetGlobal(false);
Settings::values.bg_green.SetGlobal(false); Settings::values.bg_green.SetGlobal(false);
Settings::values.bg_blue.SetGlobal(false); Settings::values.bg_blue.SetGlobal(false);
Settings::values.bg_red.SetValue(static_cast<float>(bg_color.redF())); Settings::values.bg_red.SetValue(static_cast<u8>(bg_color.red()));
Settings::values.bg_green.SetValue(static_cast<float>(bg_color.greenF())); Settings::values.bg_green.SetValue(static_cast<u8>(bg_color.green()));
Settings::values.bg_blue.SetValue(static_cast<float>(bg_color.blueF())); Settings::values.bg_blue.SetValue(static_cast<u8>(bg_color.blue()));
} }
} }
} }

View file

@ -2573,27 +2573,24 @@
</widget> </widget>
</item> </item>
<item row="2" column="2"> <item row="2" column="2">
<widget class="QDoubleSpinBox" name="mouse_panning_sensitivity"> <widget class="QSpinBox" name="mouse_panning_sensitivity">
<property name="toolTip"> <property name="toolTip">
<string>Mouse sensitivity</string> <string>Mouse sensitivity</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
</property> </property>
<property name="decimals"> <property name="suffix">
<number>2</number> <string>%</string>
</property> </property>
<property name="minimum"> <property name="minimum">
<double>0.100000000000000</double> <number>1</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<double>16.000000000000000</double> <number>100</number>
</property>
<property name="singleStep">
<double>0.010000000000000</double>
</property> </property>
<property name="value"> <property name="value">
<double>1.000000000000000</double> <number>100</number>
</property> </property>
</widget> </widget>
</item> </item>

View file

@ -241,18 +241,16 @@ static const std::array<int, 8> keyboard_mods{
SDL_SCANCODE_RCTRL, SDL_SCANCODE_RSHIFT, SDL_SCANCODE_RALT, SDL_SCANCODE_RGUI, SDL_SCANCODE_RCTRL, SDL_SCANCODE_RSHIFT, SDL_SCANCODE_RALT, SDL_SCANCODE_RGUI,
}; };
template <>
void Config::ReadSetting(const std::string& group, Settings::BasicSetting<float>& setting) {
setting = sdl2_config->GetReal(group, setting.GetLabel(), setting.GetDefault());
}
template <> template <>
void Config::ReadSetting(const std::string& group, Settings::BasicSetting<std::string>& setting) { void Config::ReadSetting(const std::string& group, Settings::BasicSetting<std::string>& setting) {
setting = sdl2_config->Get(group, setting.GetLabel(), setting.GetDefault()); setting = sdl2_config->Get(group, setting.GetLabel(), setting.GetDefault());
} }
template <> template <>
void Config::ReadSetting(const std::string& group, Settings::BasicSetting<bool>& setting) { void Config::ReadSetting(const std::string& group, Settings::BasicSetting<bool>& setting) {
setting = sdl2_config->GetBoolean(group, setting.GetLabel(), setting.GetDefault()); setting = sdl2_config->GetBoolean(group, setting.GetLabel(), setting.GetDefault());
} }
template <typename Type> template <typename Type>
void Config::ReadSetting(const std::string& group, Settings::BasicSetting<Type>& setting) { void Config::ReadSetting(const std::string& group, Settings::BasicSetting<Type>& setting) {
setting = static_cast<Type>(sdl2_config->GetInteger(group, setting.GetLabel(), setting = static_cast<Type>(sdl2_config->GetInteger(group, setting.GetLabel(),

View file

@ -232,7 +232,7 @@ use_vsync =
use_caches_gc = use_caches_gc =
# The clear color for the renderer. What shows up on the sides of the bottom screen. # The clear color for the renderer. What shows up on the sides of the bottom screen.
# Must be in range of 0.0-1.0. Defaults to 1.0 for all. # Must be in range of 0-255. Defaults to 0 for all.
bg_red = bg_red =
bg_blue = bg_blue =
bg_green = bg_green =
@ -281,7 +281,7 @@ enable_audio_stretching =
output_device = output_device =
# Output volume. # Output volume.
# 1.0 (default): 100%, 0.0; mute # 100 (default): 100%, 0; mute
volume = volume =
[Data Storage] [Data Storage]