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 {
|
||||
String,
|
||||
Integer,
|
||||
Boolean
|
||||
Boolean,
|
||||
Float,
|
||||
Double
|
||||
};
|
||||
|
||||
struct console_argument {
|
||||
|
@ -20,6 +22,10 @@ namespace prism::console {
|
|||
|
||||
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 {
|
||||
if (std::holds_alternative<std::string>(data))
|
||||
return argument_type::String;
|
||||
|
@ -27,11 +33,15 @@ namespace prism::console {
|
|||
return argument_type::Integer;
|
||||
else if (std::holds_alternative<bool>(data))
|
||||
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??
|
||||
}
|
||||
|
||||
std::variant<std::string, int, bool> data;
|
||||
std::variant<std::string, int, bool, double, float> data;
|
||||
};
|
||||
|
||||
using arguments = std::vector<console_argument>;
|
||||
|
@ -53,4 +63,7 @@ namespace prism::console {
|
|||
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, 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 {
|
||||
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;
|
||||
|
||||
std::variant<bool*> data;
|
||||
std::variant<bool*, float*, int*, double*> data;
|
||||
};
|
||||
|
||||
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) {
|
||||
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());
|
||||
});
|
||||
|
||||
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_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&) {
|
||||
quit();
|
||||
|
|
Reference in a new issue