From bc67dcce17dbda6c73986b31d2e29b66eece97be Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 21 Feb 2022 17:17:55 -0500 Subject: [PATCH] Make most render options accessible from console --- engine/core/include/console.hpp | 17 +++++++++++++++-- engine/core/src/console.cpp | 17 ++++++++++++++++- engine/core/src/engine.cpp | 23 +++++++++++++++++++++-- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/engine/core/include/console.hpp b/engine/core/include/console.hpp index 0eb80f0..b108b35 100755 --- a/engine/core/include/console.hpp +++ b/engine/core/include/console.hpp @@ -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(data)) return argument_type::String; @@ -27,11 +33,15 @@ namespace prism::console { return argument_type::Integer; else if (std::holds_alternative(data)) return argument_type::Boolean; + else if (std::holds_alternative(data)) + return argument_type::Float; + else if (std::holds_alternative(data)) + return argument_type::Double; return argument_type::String; // fallback?? } - std::variant data; + std::variant data; }; using arguments = std::vector; @@ -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); } \ No newline at end of file diff --git a/engine/core/src/console.cpp b/engine/core/src/console.cpp index b562bd6..1403951 100644 --- a/engine/core/src/console.cpp +++ b/engine/core/src/console.cpp @@ -18,10 +18,13 @@ static std::unordered_map 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 data; + std::variant data; }; static std::unordered_map 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)); +} \ No newline at end of file diff --git a/engine/core/src/engine.cpp b/engine/core/src/engine.cpp index b32658f..8769595 100755 --- a/engine/core/src/engine.cpp +++ b/engine/core/src/engine.cpp @@ -42,9 +42,28 @@ engine::engine(const int argc, char* argv[]) { log("Platform: {}", platform::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_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->capture_pipeline = nullptr; + material->skinned_pipeline = nullptr; + material->static_pipeline = nullptr; + } + }); + console::register_command("quit", console::argument_format(0), [this](const console::arguments&) { quit(); });