summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2023-03-06 18:16:36 +0100
committerStanislaw Halik <sthalik@misaki.pl>2023-03-06 18:16:36 +0100
commit8009972ccbb68a252050a353aada458e9e05b893 (patch)
treec83f688a909f5637484273987a342e0030ad551d
parent8f275a126f56f4d1cb54c99a467ce8a29de0f6ea (diff)
main: don't override magnum's cmdline options
-rw-r--r--editor/app.cpp58
-rw-r--r--floormat/settings.hpp1
-rw-r--r--main/debug.cpp15
-rw-r--r--main/main-impl.hpp3
-rw-r--r--main/setup.cpp10
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);
}