diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-06 18:16:36 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2023-03-06 18:16:36 +0100 |
commit | 8009972ccbb68a252050a353aada458e9e05b893 (patch) | |
tree | c83f688a909f5637484273987a342e0030ad551d | |
parent | 8f275a126f56f4d1cb54c99a467ce8a29de0f6ea (diff) |
main: don't override magnum's cmdline options
-rw-r--r-- | editor/app.cpp | 58 | ||||
-rw-r--r-- | floormat/settings.hpp | 1 | ||||
-rw-r--r-- | main/debug.cpp | 15 | ||||
-rw-r--r-- | main/main-impl.hpp | 3 | ||||
-rw-r--r-- | main/setup.cpp | 10 |
5 files changed, 41 insertions, 46 deletions
diff --git a/editor/app.cpp b/editor/app.cpp index ac456c22..ce86712f 100644 --- a/editor/app.cpp +++ b/editor/app.cpp @@ -1,11 +1,18 @@ #include "app.hpp" #include "compat/assert.hpp" +#include "compat/setenv.hpp" #include "floormat/main.hpp" #include "floormat/settings.hpp" #include "loader/loader.hpp" #include "world.hpp" #include "src/anim-atlas.hpp" +#include <cerrno> +#include <cstdlib> +#include <cstring> +#include <array> +#include <utility> #include <algorithm> +#include <Corrade/Containers/StringIterable.h> #include <Corrade/Utility/Arguments.h> namespace floormat { @@ -45,15 +52,15 @@ static inline bool find_arg(const T& list, const U& value) { return std::find_if(std::cbegin(list), std::cend(list), [&](const auto& x) { return x == value; }) != std::cend(list); } -static bool parse_bool(StringView name, const Corrade::Utility::Arguments& args, bool def) +static bool parse_bool(StringView name, const Corrade::Utility::Arguments& args, bool fallback) { StringView str = args.value<StringView>(name); if (find_arg(true_values, str)) return true; else if (find_arg(false_values, str)) return false; - fm_warn("invalid '--%s' argument '%s': should be true or false", name.data(), str.data()); - return def; + Warning{Warning::Flag::NoSpace} << "invalid '--" << name << "' argument '" << str << "': should be 'true' or 'false'"; + return fallback; } [[maybe_unused]] @@ -82,38 +89,49 @@ fm_settings app::parse_cmdline(int argc, const char* const* const argv) { fm_settings opts; Corrade::Utility::Arguments args{}; - args.addOption("vsync", "1").setFromEnvironment("vsync", "FLOORMAT_VSYNC").setHelp("vsync", "", "true|false") - .addOption("gpu-debug", "1").setFromEnvironment("gpu-debug", "FLOORMAT_GPU_DEBUG").setHelp("gpu-debug", "", "robust|on|off|no-error") - .addOption("geometry", "").setHelp("geometry", "width x height, e.g. 1024x768", "WxH") - .addSkippedPrefix("magnum") + args.addSkippedPrefix("magnum") + .addOption("vsync", "1").setFromEnvironment("vsync", "FLOORMAT_VSYNC").setHelp("vsync", "", "true|false") + .addOption('g', "geometry", "").setHelp("geometry", "width x height, e.g. 1024x768", "WxH") .parse(argc, argv); - opts.vsync = parse_bool("vsync", args, opts.vsync); - if (auto str = args.value<StringView>("gpu-debug"); str == "no-error"_s) - opts.gpu_debug = fm_gpu_debug::no_error; - else if (str == "robust"_s || str == "full"_s) - opts.gpu_debug = fm_gpu_debug::robust; - else - opts.gpu_debug = parse_bool("gpu-debug", args, opts.gpu_debug > fm_gpu_debug::off) - ? fm_gpu_debug::on - : fm_gpu_debug::off; - if (auto str = args.value<StringView>("geometry"); !str.isEmpty()) + opts.vsync = parse_bool("vsync", args, true); + if (auto str = args.value<StringView>("geometry")) { Vector2us size; int n = 0, ret = std::sscanf(str.data(), "%hux%hu%n", &size.x(), &size.y(), &n); if (ret != 2 || (std::size_t)n != str.size() || Vector2ui(size).product() == 0) - fm_warn("invalid --geometry argument '%s'", str.data()); + Warning{} << "invalid --geometry argument '%s'" << str; else opts.resolution = Vector2i(size); } - opts.argc = argc; - opts.argv = argv; return opts; } +#if 0 +static auto make_argv_for_magnum(const fm_settings& opts, const char* const argv0) +{ + const char* argv[] = { + argv0, + "--magnum-dpi-scaling", opts.dpi_scaling.data(), + "--magnum-disable-workarounds", opts.disabled_workarounds.data(), + "--magnum-disable-extensions", opts.disabled_extensions.data(), + "--magnum-log", opts.log.data(), + }; + constexpr auto size = sizeof(argv)/sizeof(*argv); + std::pair<std::array<const char*, size>, int> ret = {{}, (int)size}; + for (std::size_t i = 0; i < size; i++) + ret.first[i] = argv[i]; + return ret; +} +#endif + int app::run_from_argv(const int argc, const char* const* const argv) { auto opts = parse_cmdline(argc, argv); int ret; + //auto [argv2, argc2] = make_argv_for_magnum(opts, argv ? argv[0] : "floormat"); + opts.argv = argv; + opts.argc = argc; + Pointer<floormat_main> ptr; { app application{std::move(opts)}; diff --git a/floormat/settings.hpp b/floormat/settings.hpp index aa0b71c8..871ea685 100644 --- a/floormat/settings.hpp +++ b/floormat/settings.hpp @@ -18,7 +18,6 @@ struct fm_settings String title = "floormat editor"_s; const char* const* argv = nullptr; int argc = 0; Magnum::Math::Vector2<int> resolution{1024, 720}; - fm_gpu_debug gpu_debug = fm_gpu_debug::on; bool vsync = true; bool resizable : 1 = true, fullscreen : 1 = false, diff --git a/main/debug.cpp b/main/debug.cpp index 2d320a3b..eaac17b7 100644 --- a/main/debug.cpp +++ b/main/debug.cpp @@ -65,19 +65,4 @@ void main_impl::register_debug_callback() GL::DebugOutput::setCallback(_debug_callback, this); } -char main_impl::maybe_register_debug_callback(fm_gpu_debug flag) -{ - using enum fm_gpu_debug; - switch (flag) - { - default: - register_debug_callback(); - break; - case off: - case no_error: - break; - } - return '\0'; -} - } // namespace floormat diff --git a/main/main-impl.hpp b/main/main-impl.hpp index 997b4980..ca3e9ad3 100644 --- a/main/main-impl.hpp +++ b/main/main-impl.hpp @@ -74,7 +74,7 @@ struct main_impl final : Platform::Sdl2Application, floormat_main private: fm_settings s; - [[maybe_unused]] char _dummy = maybe_register_debug_callback(s.gpu_debug); + [[maybe_unused]] char _dummy = (register_debug_callback(), '\0'); floormat_app& app; // NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members) tile_shader _shader; std::vector<clickable> _clickable_scenery; @@ -95,7 +95,6 @@ private: draw_bounds get_draw_bounds() const noexcept override; - char maybe_register_debug_callback(fm_gpu_debug flag); void register_debug_callback(); static Configuration make_conf(const fm_settings& s); diff --git a/main/setup.cpp b/main/setup.cpp index 9030eaf7..8e0e36b9 100644 --- a/main/setup.cpp +++ b/main/setup.cpp @@ -45,22 +45,16 @@ auto main_impl::make_window_flags(const fm_settings& s) -> Configuration::Window auto main_impl::make_conf(const fm_settings& s) -> Configuration { return Configuration{} - .setTitle(s.title) + .setTitle(s.title ? (StringView)s.title : "floormat editor"_s) .setSize(s.resolution) .setWindowFlags(make_window_flags(s)); } -auto main_impl::make_gl_conf(const fm_settings& s) -> GLConfiguration +auto main_impl::make_gl_conf(const fm_settings&) -> GLConfiguration { GLConfiguration::Flags flags{}; using f = GLConfiguration::Flag; flags |= f::ForwardCompatible; - if (s.gpu_debug >= fm_gpu_debug::on) - flags |= f::Debug | f::GpuValidation; - if (s.gpu_debug >= fm_gpu_debug::robust) - flags |= f::RobustAccess | f::ResetIsolation; - else if (s.gpu_debug <= fm_gpu_debug::no_error) - flags |= f::NoError; return GLConfiguration{}.setFlags(flags); } |