summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/settings.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/common/settings.h b/src/common/settings.h
index 8f02fa9af..69777421e 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -191,6 +191,7 @@ public:
virtual bool IsEnum() const = 0;
virtual bool RuntimeModfiable() const = 0;
virtual void SetGlobal(bool global) {}
+ virtual u32 Id() const = 0;
virtual bool UsingGlobal() const {
return false;
}
@@ -200,6 +201,7 @@ class Linkage {
public:
std::map<Category, std::forward_list<BasicSetting*>> by_category;
std::vector<std::function<void()>> restore_functions;
+ u32 count;
};
/** The Setting class is a simple resource manager. It defines a label and default value
@@ -232,8 +234,10 @@ public:
explicit Setting(Linkage& linkage, const Type& default_val, const std::string& name,
enum Category category_)
requires(!ranged)
- : value{default_val}, default_value{default_val}, label{name}, category{category_} {
+ : value{default_val},
+ default_value{default_val}, label{name}, category{category_}, id{linkage.count} {
linkage.by_category[category].push_front(this);
+ linkage.count++;
}
virtual ~Setting() = default;
@@ -251,8 +255,9 @@ public:
const Type& max_val, const std::string& name, enum Category category_)
requires(ranged)
: value{default_val}, default_value{default_val}, maximum{max_val}, minimum{min_val},
- label{name}, category{category_} {
+ label{name}, category{category_}, id{linkage.count} {
linkage.by_category[category].push_front(this);
+ linkage.count++;
}
/**
@@ -418,6 +423,10 @@ public:
return std::type_index(typeid(Type));
}
+ virtual u32 Id() const override {
+ return id;
+ }
+
protected:
Type value{}; ///< The setting
const Type default_value{}; ///< The default value
@@ -425,6 +434,7 @@ protected:
const Type minimum{}; ///< Minimum allowed value of the setting
const std::string label{}; ///< The setting's label
const enum Category category; ///< The setting's category AKA INI group
+ const u32 id;
};
/**
@@ -728,7 +738,7 @@ struct Values {
linkage, VSyncMode::FIFO, VSyncMode::Immediate, VSyncMode::FIFORelaxed,
"use_vsync", Category::Renderer};
SwitchableSetting<bool> use_reactive_flushing{linkage, true, "use_reactive_flushing",
- Category::Renderer};
+ Category::RendererAdvanced};
SwitchableSetting<ShaderBackend, true> shader_backend{
linkage, ShaderBackend::GLSL, ShaderBackend::GLSL, ShaderBackend::SPIRV,
"shader_backend", Category::Renderer};