Archived
1
Fork 0

Make most render options accessible from console

This commit is contained in:
Joshua Goins 2022-02-21 17:17:55 -05:00
parent bbff84eb61
commit bc67dcce17
3 changed files with 52 additions and 5 deletions

View file

@ -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);
} }

View file

@ -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));
}

View file

@ -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();