Make most render options accessible from console
This commit is contained in:
parent
bbff84eb61
commit
bc67dcce17
3 changed files with 52 additions and 5 deletions
|
@ -10,7 +10,9 @@ namespace prism::console {
|
||||||
enum class argument_type {
|
enum class argument_type {
|
||||||
String,
|
String,
|
||||||
Integer,
|
Integer,
|
||||||
Boolean
|
Boolean,
|
||||||
|
Float,
|
||||||
|
Double
|
||||||
};
|
};
|
||||||
|
|
||||||
struct console_argument {
|
struct console_argument {
|
||||||
|
@ -20,6 +22,10 @@ namespace prism::console {
|
||||||
|
|
||||||
explicit console_argument(int data) : data(data) {}
|
explicit console_argument(int data) : data(data) {}
|
||||||
|
|
||||||
|
explicit console_argument(float data) : data(data) {}
|
||||||
|
|
||||||
|
explicit console_argument(double data) : data(data) {}
|
||||||
|
|
||||||
[[nodiscard]] argument_type query_type() const {
|
[[nodiscard]] argument_type query_type() const {
|
||||||
if (std::holds_alternative<std::string>(data))
|
if (std::holds_alternative<std::string>(data))
|
||||||
return argument_type::String;
|
return argument_type::String;
|
||||||
|
@ -27,11 +33,15 @@ namespace prism::console {
|
||||||
return argument_type::Integer;
|
return argument_type::Integer;
|
||||||
else if (std::holds_alternative<bool>(data))
|
else if (std::holds_alternative<bool>(data))
|
||||||
return argument_type::Boolean;
|
return argument_type::Boolean;
|
||||||
|
else if (std::holds_alternative<float>(data))
|
||||||
|
return argument_type::Float;
|
||||||
|
else if (std::holds_alternative<double>(data))
|
||||||
|
return argument_type::Double;
|
||||||
|
|
||||||
return argument_type::String; // fallback??
|
return argument_type::String; // fallback??
|
||||||
}
|
}
|
||||||
|
|
||||||
std::variant<std::string, int, bool> data;
|
std::variant<std::string, int, bool, double, float> data;
|
||||||
};
|
};
|
||||||
|
|
||||||
using arguments = std::vector<console_argument>;
|
using arguments = std::vector<console_argument>;
|
||||||
|
@ -53,4 +63,7 @@ namespace prism::console {
|
||||||
void parse_and_invoke_command(std::string_view command);
|
void parse_and_invoke_command(std::string_view command);
|
||||||
|
|
||||||
void register_variable(std::string_view name, bool &variable);
|
void register_variable(std::string_view name, bool &variable);
|
||||||
|
void register_variable(std::string_view name, float& variable);
|
||||||
|
void register_variable(std::string_view name, int& variable);
|
||||||
|
void register_variable(std::string_view name, double& variable);
|
||||||
}
|
}
|
|
@ -18,10 +18,13 @@ static std::unordered_map<std::string, registered_command> registered_commands;
|
||||||
|
|
||||||
struct RegisteredVariable {
|
struct RegisteredVariable {
|
||||||
RegisteredVariable(bool& data) : type(prism::console::argument_type::Boolean), data(&data) {}
|
RegisteredVariable(bool& data) : type(prism::console::argument_type::Boolean), data(&data) {}
|
||||||
|
RegisteredVariable(float& data) : type(prism::console::argument_type::Float), data(&data) {}
|
||||||
|
RegisteredVariable(int& data) : type(prism::console::argument_type::Integer), data(&data) {}
|
||||||
|
RegisteredVariable(double& data) : type(prism::console::argument_type::Double), data(&data) {}
|
||||||
|
|
||||||
prism::console::argument_type type;
|
prism::console::argument_type type;
|
||||||
|
|
||||||
std::variant<bool*> data;
|
std::variant<bool*, float*, int*, double*> data;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::unordered_map<std::string, RegisteredVariable> registered_variables;
|
static std::unordered_map<std::string, RegisteredVariable> registered_variables;
|
||||||
|
@ -108,3 +111,15 @@ void prism::console::parse_and_invoke_command(const std::string_view command) {
|
||||||
void prism::console::register_variable(const std::string_view name, bool& variable) {
|
void prism::console::register_variable(const std::string_view name, bool& variable) {
|
||||||
registered_variables.try_emplace(name.data(), RegisteredVariable(variable));
|
registered_variables.try_emplace(name.data(), RegisteredVariable(variable));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void prism::console::register_variable(std::string_view name, float& variable) {
|
||||||
|
registered_variables.try_emplace(name.data(), RegisteredVariable(variable));
|
||||||
|
}
|
||||||
|
|
||||||
|
void prism::console::register_variable(std::string_view name, int& variable) {
|
||||||
|
registered_variables.try_emplace(name.data(), RegisteredVariable(variable));
|
||||||
|
}
|
||||||
|
|
||||||
|
void prism::console::register_variable(std::string_view name, double& variable) {
|
||||||
|
registered_variables.try_emplace(name.data(), RegisteredVariable(variable));
|
||||||
|
}
|
|
@ -43,7 +43,26 @@ engine::engine(const int argc, char* argv[]) {
|
||||||
log("GFX: {}", gfx->get_name());
|
log("GFX: {}", gfx->get_name());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console::register_variable("rs_exposure", render_options.exposure);
|
||||||
|
console::register_variable("rs_dof", render_options.enable_depth_of_field);
|
||||||
console::register_variable("rs_dynamic_resolution", render_options.dynamic_resolution);
|
console::register_variable("rs_dynamic_resolution", render_options.dynamic_resolution);
|
||||||
|
console::register_variable("rs_render_scale", render_options.render_scale);
|
||||||
|
console::register_variable("rs_shadow_resolution", render_options.shadow_resolution);
|
||||||
|
console::register_variable("rs_aa", render_options.enable_aa);
|
||||||
|
console::register_variable("rs_ibl", render_options.enable_ibl);
|
||||||
|
console::register_variable("rs_normal_mapping", render_options.enable_normal_mapping);
|
||||||
|
console::register_variable("rs_normal_shadowing", render_options.enable_normal_shadowing);
|
||||||
|
console::register_variable("rs_point_shadows", render_options.enable_point_shadows);
|
||||||
|
console::register_variable("rs_extra_passes", render_options.enable_extra_passes);
|
||||||
|
console::register_variable("rs_frustum_culling", render_options.enable_frustum_culling);
|
||||||
|
|
||||||
|
console::register_command("rebuild_mat", console::argument_format(0), [this](const console::arguments&) {
|
||||||
|
for(auto material : assetm->get_all<Material>()) {
|
||||||
|
material->capture_pipeline = nullptr;
|
||||||
|
material->skinned_pipeline = nullptr;
|
||||||
|
material->static_pipeline = nullptr;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
console::register_command("quit", console::argument_format(0), [this](const console::arguments&) {
|
console::register_command("quit", console::argument_format(0), [this](const console::arguments&) {
|
||||||
quit();
|
quit();
|
||||||
|
|
Reference in a new issue