From d481edb3619e251285c238c05f47a121ecd96df7 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 12 Nov 2022 13:43:34 +0100 Subject: cmake: add targets for loader, serialize, draw --- CMakeLists.txt | 9 +- anim-crop-tool/CMakeLists.txt | 4 +- draw/CMakeLists.txt | 11 +++ draw/precomp.hpp | 2 + editor/CMakeLists.txt | 10 +-- editor/app.cpp | 2 +- editor/editor.cpp | 2 +- editor/precomp.hpp | 2 - editor/scenery-editor.cpp | 2 +- editor/tile-editor.cpp | 2 +- loader/CMakeLists.txt | 16 ++++ loader/impl.cpp | 203 ++++++++++++++++++++++++++++++++++++++++++ loader/loader-impl.cpp | 203 ------------------------------------------ loader/loader.cpp | 5 ++ loader/loader.hpp | 36 ++++++++ loader/precomp.hpp | 7 ++ main/CMakeLists.txt | 4 +- serialize/CMakeLists.txt | 13 +++ serialize/json-helper.cpp | 2 +- serialize/precomp.hpp | 4 + serialize/tile-atlas.cpp | 2 +- serialize/world-reader.cpp | 2 +- shaders/tile.cpp | 2 +- src/CMakeLists.txt | 5 +- src/loader.cpp | 6 -- src/loader.hpp | 36 -------- src/precomp.hpp | 15 ++-- test/CMakeLists.txt | 11 ++- test/json.cpp | 2 +- test/main.cpp | 3 +- test/precomp.hpp | 13 +++ test/serializer.cpp | 2 +- 32 files changed, 351 insertions(+), 287 deletions(-) create mode 100644 draw/CMakeLists.txt create mode 100644 draw/precomp.hpp create mode 100644 loader/CMakeLists.txt create mode 100644 loader/impl.cpp delete mode 100644 loader/loader-impl.cpp create mode 100644 loader/loader.cpp create mode 100644 loader/loader.hpp create mode 100644 loader/precomp.hpp create mode 100644 serialize/CMakeLists.txt create mode 100644 serialize/precomp.hpp delete mode 100644 src/loader.cpp delete mode 100644 src/loader.hpp create mode 100644 test/precomp.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c7da2617..bcefcd6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -172,12 +172,13 @@ include_directories(SYSTEM ) add_subdirectory(src) +add_subdirectory(serialize) +add_subdirectory(loader) +add_subdirectory(anim-crop-tool) +add_subdirectory(draw) add_subdirectory(main) add_subdirectory(editor) -add_subdirectory(anim-crop-tool) -if(WIN32) # TODO - add_subdirectory(test) -endif() +add_subdirectory(test) install(DIRECTORY images anim DESTINATION "share/floormat") diff --git a/anim-crop-tool/CMakeLists.txt b/anim-crop-tool/CMakeLists.txt index 2267a1db..b0fa0570 100644 --- a/anim-crop-tool/CMakeLists.txt +++ b/anim-crop-tool/CMakeLists.txt @@ -1,11 +1,11 @@ find_package(OpenCV QUIET) if(OpenCV_FOUND) - set(self "${PROJECT_NAME}-anim-crop-tool") + set(self "floormat-anim-crop-tool") include_directories(SYSTEM PRIVATE ${OpenCV_INCLUDE_DIRS}) link_libraries(Corrade::Utility Magnum::Magnum) link_libraries(opencv_imgproc opencv_imgcodecs opencv_core) - link_libraries(${PROJECT_NAME}) + link_libraries(floormat-serialize floormat) file(GLOB sources "*.cpp" CONFIGURE_ARGS) add_executable(${self} ${sources}) diff --git a/draw/CMakeLists.txt b/draw/CMakeLists.txt new file mode 100644 index 00000000..ded948b8 --- /dev/null +++ b/draw/CMakeLists.txt @@ -0,0 +1,11 @@ +set(self floormat-draw) +file(GLOB sources "*.cpp" CONFIGURE_ARGS) +add_library(${self} STATIC "${sources}") +target_link_libraries( + ${self} PUBLIC + floormat + Magnum::GL +) +if(FLOORMAT_PRECOMPILED-HEADERS) + target_precompile_headers(${self} PRIVATE precomp.hpp) +endif() diff --git a/draw/precomp.hpp b/draw/precomp.hpp new file mode 100644 index 00000000..0b357722 --- /dev/null +++ b/draw/precomp.hpp @@ -0,0 +1,2 @@ +#pragma once +#include "../src/precomp.hpp" diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt index b420aa9c..2b42e15d 100644 --- a/editor/CMakeLists.txt +++ b/editor/CMakeLists.txt @@ -1,6 +1,6 @@ -set(self ${PROJECT_NAME}-editor) +set(self floormat-editor) -file(GLOB sources "*.cpp" "../loader/*.cpp" CONFIGURE_ARGS) +file(GLOB sources "*.cpp" CONFIGURE_ARGS) corrade_add_resource(res "../resources.conf") if(MSVC) @@ -9,14 +9,10 @@ else() set_property(SOURCE "${res}" APPEND PROPERTY COMPILE_OPTIONS "-w") endif() -if(WIN32) - link_libraries(ntdll) -endif() - link_libraries(MagnumIntegration::ImGui fmt::fmt) +link_libraries(floormat-main floormat-loader floormat-serialize) add_executable(${self} "${sources}" "${res}") -target_link_libraries(${self} ${PROJECT_NAME}-main) if(FLOORMAT_PRECOMPILED-HEADERS) target_precompile_headers(${self} PRIVATE precomp.hpp) diff --git a/editor/app.cpp b/editor/app.cpp index e9497520..986f6102 100644 --- a/editor/app.cpp +++ b/editor/app.cpp @@ -2,7 +2,7 @@ #include "compat/assert.hpp" #include "floormat/main.hpp" #include "floormat/settings.hpp" -#include "src/loader.hpp" +#include "loader/loader.hpp" #include "world.hpp" #include "src/anim-atlas.hpp" #include diff --git a/editor/editor.cpp b/editor/editor.cpp index e2690101..1ac4a887 100644 --- a/editor/editor.cpp +++ b/editor/editor.cpp @@ -1,5 +1,5 @@ #include "editor.hpp" -#include "src/loader.hpp" +#include "loader/loader.hpp" #include "tile-atlas.hpp" #include "src/world.hpp" #include "keys.hpp" diff --git a/editor/precomp.hpp b/editor/precomp.hpp index 27d0f317..775f59e7 100644 --- a/editor/precomp.hpp +++ b/editor/precomp.hpp @@ -9,8 +9,6 @@ #include #include - -#include #include #if __has_include() diff --git a/editor/scenery-editor.cpp b/editor/scenery-editor.cpp index a3560d2f..1f2fabf3 100644 --- a/editor/scenery-editor.cpp +++ b/editor/scenery-editor.cpp @@ -1,6 +1,6 @@ #include "scenery-editor.hpp" #include "src/anim-atlas.hpp" -#include "src/loader.hpp" +#include "loader/loader.hpp" #include "compat/assert.hpp" namespace floormat { diff --git a/editor/tile-editor.cpp b/editor/tile-editor.cpp index 506cf9f3..e1661c64 100644 --- a/editor/tile-editor.cpp +++ b/editor/tile-editor.cpp @@ -2,7 +2,7 @@ #include "tile-atlas.hpp" #include "world.hpp" #include "keys.hpp" -#include "loader.hpp" +#include "loader/loader.hpp" #include "random.hpp" #include "serialize/json-helper.hpp" #include "serialize/tile-atlas.hpp" diff --git a/loader/CMakeLists.txt b/loader/CMakeLists.txt new file mode 100644 index 00000000..9c0b6ee7 --- /dev/null +++ b/loader/CMakeLists.txt @@ -0,0 +1,16 @@ +set(self floormat-loader) +file(GLOB sources "*.cpp" CONFIGURE_ARGS) +add_library(${self} STATIC "${sources}") +target_link_libraries( + ${self} PUBLIC + floormat-serialize + floormat + Magnum::Magnum + Magnum::Trade +) +if(WIN32) + target_link_libraries(${self} PUBLIC ntdll) +endif() +if(FLOORMAT_PRECOMPILED-HEADERS) + target_precompile_headers(${self} PRIVATE precomp.hpp) +endif() diff --git a/loader/impl.cpp b/loader/impl.cpp new file mode 100644 index 00000000..99be0be6 --- /dev/null +++ b/loader/impl.cpp @@ -0,0 +1,203 @@ +#include "impl.hpp" +#include "loader/loader.hpp" +#include "src/tile-atlas.hpp" +#include "compat/assert.hpp" +#include "compat/alloca.hpp" +#include "src/anim-atlas.hpp" +#include "src/emplacer.hpp" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __GNUG__ +#pragma GCC diagnostic ignored "-Walloca" +#endif + +namespace floormat { + +struct loader_impl final : loader_ +{ + Optional shader_res; + PluginManager::Manager importer_plugins; + Containers::Pointer image_importer = + importer_plugins.loadAndInstantiate("StbImageImporter"); + + Containers::Pointer tga_importer = + importer_plugins.loadAndInstantiate("TgaImporter"); + + std::unordered_map> tile_atlas_map; + std::unordered_map> anim_atlas_map; + std::vector anim_atlases; + + StringView shader(StringView filename) override; + template Trade::ImageData2D texture(const char(&prefix)[N], StringView filename); + std::shared_ptr tile_atlas(StringView filename, Vector2ub size) override; + ArrayView anim_atlas_list() override; + std::shared_ptr anim_atlas(StringView name) override; + + void get_anim_atlas_list(); + + static void set_application_working_directory(); + + explicit loader_impl(); + ~loader_impl() override; +}; + +StringView loader_impl::shader(StringView filename) +{ + if (!shader_res) + shader_res = Optional(InPlaceInit, "floormat/shaders"); + auto ret = shader_res->getString(filename); + if (ret.isEmpty()) + fm_abort("can't find shader resource '%s'", filename.cbegin()); + return ret; +} + +std::shared_ptr loader_impl::tile_atlas(StringView name, Vector2ub size) +{ + const emplacer e{[&] { return std::make_shared(name, texture(FM_IMAGE_PATH, name), size); }}; + auto atlas = tile_atlas_map.try_emplace(name, e).first->second; + return atlas; +} + +template +fm_noinline +Trade::ImageData2D loader_impl::texture(const char(&prefix)[N], StringView filename_) +{ + if constexpr(N > 1) + fm_assert(prefix[N-2] == '/'); + fm_assert(filename_.size() < 4096); + fm_assert(filename_.find('\\') == filename_.end()); + fm_assert(filename_.find('\0') == filename_.end()); + fm_assert(tga_importer); + constexpr std::size_t max_extension_length = 16; + + char* const filename = (char*)alloca(filename_.size() + N + max_extension_length); + const std::size_t len = fm_begin( + std::size_t off = N-1; + if constexpr(N > 1) + std::memcpy(filename, prefix, off); + std::memcpy(filename + off, filename_.cbegin(), filename_.size()); + return off + filename_.size(); + ); + + for (const auto& extension : std::initializer_list{ ".tga", ".png", ".webp", }) + { + std::memcpy(filename + len, extension.data(), extension.size()); + filename[len + extension.size()] = '\0'; + auto& importer = extension == StringView(".tga") ? tga_importer : image_importer; + if (Path::exists(filename) && importer->openFile(filename)) + { + auto img = importer->image2D(0); + if (!img) + fm_abort("can't allocate image for '%s'", filename); + auto ret = std::move(*img); + return ret; + } + } + const auto path = Path::currentDirectory(); + filename[len] = '\0'; + fm_abort("can't open image '%s' (cwd '%s')", filename, path ? path->data() : "(null)"); +} + +ArrayView loader_impl::anim_atlas_list() +{ + if (anim_atlases.empty()) + get_anim_atlas_list(); + return anim_atlases; +} + +std::shared_ptr loader_impl::anim_atlas(StringView name) +{ + if (auto it = anim_atlas_map.find(name); it != anim_atlas_map.end()) + return it->second; + else + { + const auto path = Path::join(FM_ANIM_PATH, Path::splitExtension(name).first()); + auto anim_info = loader_detail::deserialize_anim(path + ".json"); + auto tex = texture("", path); + + fm_assert(!anim_info.anim_name.isEmpty() && !anim_info.object_name.isEmpty()); + fm_assert(anim_info.pixel_size.product() > 0); + fm_assert(!anim_info.groups.empty()); + fm_assert(anim_info.nframes > 0); + fm_assert(anim_info.nframes == 1 || anim_info.fps > 0); + + auto atlas = std::make_shared(path, tex, std::move(anim_info)); + return anim_atlas_map[atlas->name()] = atlas; + } +} + +void loader_impl::get_anim_atlas_list() +{ + anim_atlases.clear(); + anim_atlases.reserve(64); + using f = Path::ListFlag; + constexpr auto flags = f::SkipDirectories | f::SkipDotAndDotDot | f::SkipSpecial | f::SortAscending; + if (const auto list = Path::list(FM_ANIM_PATH, flags); list) + for (StringView str : *list) + if (str.hasSuffix(".json")) + anim_atlases.emplace_back(str.exceptSuffix(std::size(".json")-1)); +} + +void loader_::destroy() +{ + loader.~loader_(); + new (&loader) loader_impl(); +} + +void loader_impl::set_application_working_directory() +{ + static bool once = false; + if (once) + return; + once = true; + if (const auto loc = Path::executableLocation()) + { + StringView path = *loc; + path = Path::split(path).first(); + path = Path::split(path).first(); +#ifdef _WIN32 + String p = "\\\\?\\" + path; + for (char& c : p) + if (c == '/') + c = '\\'; + path = p; +#endif + loader_detail::chdir(path); + } + else + fm_warn("can't find install prefix!"); +} + +loader_impl::loader_impl() +{ + loader_detail::system_init(); + set_application_working_directory(); +} + +loader_impl::~loader_impl() = default; + +loader_& loader_::default_loader() noexcept +{ + static loader_impl loader_singleton{}; + return loader_singleton; +} + +// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) +loader_& loader = loader_::default_loader(); + +} // namespace floormat diff --git a/loader/loader-impl.cpp b/loader/loader-impl.cpp deleted file mode 100644 index 955ccf03..00000000 --- a/loader/loader-impl.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "impl.hpp" -#include "src/loader.hpp" -#include "src/tile-atlas.hpp" -#include "compat/assert.hpp" -#include "compat/alloca.hpp" -#include "src/anim-atlas.hpp" -#include "src/emplacer.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __GNUG__ -#pragma GCC diagnostic ignored "-Walloca" -#endif - -namespace floormat { - -struct loader_impl final : loader_ -{ - Optional shader_res; - PluginManager::Manager importer_plugins; - Containers::Pointer image_importer = - importer_plugins.loadAndInstantiate("StbImageImporter"); - - Containers::Pointer tga_importer = - importer_plugins.loadAndInstantiate("TgaImporter"); - - std::unordered_map> tile_atlas_map; - std::unordered_map> anim_atlas_map; - std::vector anim_atlases; - - StringView shader(StringView filename) override; - template Trade::ImageData2D texture(const char(&prefix)[N], StringView filename); - std::shared_ptr tile_atlas(StringView filename, Vector2ub size) override; - ArrayView anim_atlas_list() override; - std::shared_ptr anim_atlas(StringView name) override; - - void get_anim_atlas_list(); - - static void set_application_working_directory(); - - explicit loader_impl(); - ~loader_impl() override; -}; - -StringView loader_impl::shader(StringView filename) -{ - if (!shader_res) - shader_res = Optional(InPlaceInit, "floormat/shaders"); - auto ret = shader_res->getString(filename); - if (ret.isEmpty()) - fm_abort("can't find shader resource '%s'", filename.cbegin()); - return ret; -} - -std::shared_ptr loader_impl::tile_atlas(StringView name, Vector2ub size) -{ - const emplacer e{[&] { return std::make_shared(name, texture(FM_IMAGE_PATH, name), size); }}; - auto atlas = tile_atlas_map.try_emplace(name, e).first->second; - return atlas; -} - -template -fm_noinline -Trade::ImageData2D loader_impl::texture(const char(&prefix)[N], StringView filename_) -{ - if constexpr(N > 1) - fm_assert(prefix[N-2] == '/'); - fm_assert(filename_.size() < 4096); - fm_assert(filename_.find('\\') == filename_.end()); - fm_assert(filename_.find('\0') == filename_.end()); - fm_assert(tga_importer); - constexpr std::size_t max_extension_length = 16; - - char* const filename = (char*)alloca(filename_.size() + N + max_extension_length); - const std::size_t len = fm_begin( - std::size_t off = N-1; - if constexpr(N > 1) - std::memcpy(filename, prefix, off); - std::memcpy(filename + off, filename_.cbegin(), filename_.size()); - return off + filename_.size(); - ); - - for (const auto& extension : std::initializer_list{ ".tga", ".png", ".webp", }) - { - std::memcpy(filename + len, extension.data(), extension.size()); - filename[len + extension.size()] = '\0'; - auto& importer = extension == StringView(".tga") ? tga_importer : image_importer; - if (Path::exists(filename) && importer->openFile(filename)) - { - auto img = importer->image2D(0); - if (!img) - fm_abort("can't allocate image for '%s'", filename); - auto ret = std::move(*img); - return ret; - } - } - const auto path = Path::currentDirectory(); - filename[len] = '\0'; - fm_abort("can't open image '%s' (cwd '%s')", filename, path ? path->data() : "(null)"); -} - -ArrayView loader_impl::anim_atlas_list() -{ - if (anim_atlases.empty()) - get_anim_atlas_list(); - return anim_atlases; -} - -std::shared_ptr loader_impl::anim_atlas(StringView name) -{ - if (auto it = anim_atlas_map.find(name); it != anim_atlas_map.end()) - return it->second; - else - { - const auto path = Path::join(FM_ANIM_PATH, Path::splitExtension(name).first()); - auto anim_info = loader_detail::deserialize_anim(path + ".json"); - auto tex = texture("", path); - - fm_assert(!anim_info.anim_name.isEmpty() && !anim_info.object_name.isEmpty()); - fm_assert(anim_info.pixel_size.product() > 0); - fm_assert(!anim_info.groups.empty()); - fm_assert(anim_info.nframes > 0); - fm_assert(anim_info.nframes == 1 || anim_info.fps > 0); - - auto atlas = std::make_shared(path, tex, std::move(anim_info)); - return anim_atlas_map[atlas->name()] = atlas; - } -} - -void loader_impl::get_anim_atlas_list() -{ - anim_atlases.clear(); - anim_atlases.reserve(64); - using f = Path::ListFlag; - constexpr auto flags = f::SkipDirectories | f::SkipDotAndDotDot | f::SkipSpecial | f::SortAscending; - if (const auto list = Path::list(FM_ANIM_PATH, flags); list) - for (StringView str : *list) - if (str.hasSuffix(".json")) - anim_atlases.emplace_back(str.exceptSuffix(std::size(".json")-1)); -} - -void loader_::destroy() -{ - loader.~loader_(); - new (&loader) loader_impl(); -} - -void loader_impl::set_application_working_directory() -{ - static bool once = false; - if (once) - return; - once = true; - if (const auto loc = Path::executableLocation()) - { - StringView path = *loc; - path = Path::split(path).first(); - path = Path::split(path).first(); -#ifdef _WIN32 - String p = "\\\\?\\" + path; - for (char& c : p) - if (c == '/') - c = '\\'; - path = p; -#endif - loader_detail::chdir(path); - } - else - fm_warn("can't find install prefix!"); -} - -loader_impl::loader_impl() -{ - loader_detail::system_init(); - set_application_working_directory(); -} - -loader_impl::~loader_impl() = default; - -loader_& loader_::default_loader() noexcept -{ - static loader_impl loader_singleton{}; - return loader_singleton; -} - -// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) -loader_& loader = loader_::default_loader(); - -} // namespace floormat diff --git a/loader/loader.cpp b/loader/loader.cpp new file mode 100644 index 00000000..83c3eed2 --- /dev/null +++ b/loader/loader.cpp @@ -0,0 +1,5 @@ +#include "loader.hpp" +namespace floormat { +loader_::loader_() = default; +loader_::~loader_() = default; +} // namespace floormat diff --git a/loader/loader.hpp b/loader/loader.hpp new file mode 100644 index 00000000..32158675 --- /dev/null +++ b/loader/loader.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include +#include + +#define FM_IMAGE_PATH "share/floormat/images/" +#define FM_ANIM_PATH "share/floormat/anim/" + +namespace floormat { + +struct tile_atlas; +struct anim_atlas; + +struct loader_ +{ + virtual StringView shader(StringView filename) = 0; + virtual std::shared_ptr tile_atlas(StringView filename, Vector2ub size) = 0; + virtual ArrayView anim_atlas_list() = 0; + virtual std::shared_ptr anim_atlas(StringView name) = 0; + static void destroy(); + static loader_& default_loader() noexcept; + + loader_(const loader_&) = delete; + loader_& operator=(const loader_&) = delete; + + virtual ~loader_(); + +protected: + loader_(); +}; + +extern loader_& loader; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) + +} // namespace floormat diff --git a/loader/precomp.hpp b/loader/precomp.hpp new file mode 100644 index 00000000..4ebd56b2 --- /dev/null +++ b/loader/precomp.hpp @@ -0,0 +1,7 @@ +#pragma once +#include "../src/precomp.hpp" +#include +#include +#include +#include +#include diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 1ad37734..a84337cc 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,7 +1,7 @@ -set(self ${PROJECT_NAME}-main) +set(self floormat-main) file(GLOB sources "*.cpp" CONFIGURE_ARGS) -link_libraries(${PROJECT_NAME}) +link_libraries(floormat-draw floormat) link_libraries(Magnum::Sdl2Application Corrade::Containers Magnum::GL Magnum::Trade fmt::fmt) add_library(${self} STATIC "${sources}") diff --git a/serialize/CMakeLists.txt b/serialize/CMakeLists.txt new file mode 100644 index 00000000..65b63174 --- /dev/null +++ b/serialize/CMakeLists.txt @@ -0,0 +1,13 @@ +set(self floormat-serialize) +file(GLOB sources "*.cpp" CONFIGURE_ARGS) +add_library(${self} STATIC "${sources}") +target_link_libraries( + ${self} PUBLIC + floormat-loader + floormat + Magnum::Magnum + nlohmann_json::nlohmann_json +) +if(FLOORMAT_PRECOMPILED-HEADERS) + target_precompile_headers(${self} PRIVATE precomp.hpp) +endif() diff --git a/serialize/json-helper.cpp b/serialize/json-helper.cpp index d21d48f4..eda628de 100644 --- a/serialize/json-helper.cpp +++ b/serialize/json-helper.cpp @@ -11,7 +11,7 @@ static T open_stream(StringView filename) { T s; s.open(filename.data(), mode); - if (!s.good()) + if (!s) { char errbuf[128]; constexpr auto get_error_string = [] (char (&buf)[N]) diff --git a/serialize/precomp.hpp b/serialize/precomp.hpp new file mode 100644 index 00000000..23c79b16 --- /dev/null +++ b/serialize/precomp.hpp @@ -0,0 +1,4 @@ +#pragma once +#include "../src/precomp.hpp" +#include +#include diff --git a/serialize/tile-atlas.cpp b/serialize/tile-atlas.cpp index 451fb48c..a92dfc28 100644 --- a/serialize/tile-atlas.cpp +++ b/serialize/tile-atlas.cpp @@ -2,7 +2,7 @@ #include "serialize/tile-atlas.hpp" #include "serialize/corrade-string.hpp" #include "serialize/magnum-vector2i.hpp" -#include "loader.hpp" +#include "loader/loader.hpp" #include #include diff --git a/serialize/world-reader.cpp b/serialize/world-reader.cpp index 602eabf5..2ec62015 100644 --- a/serialize/world-reader.cpp +++ b/serialize/world-reader.cpp @@ -2,7 +2,7 @@ #include "world-impl.hpp" #include "binary-reader.inl" #include "src/world.hpp" -#include "src/loader.hpp" +#include "loader/loader.hpp" #include "src/tile-atlas.hpp" #include diff --git a/shaders/tile.cpp b/shaders/tile.cpp index 859ba4aa..ade9b5a1 100644 --- a/shaders/tile.cpp +++ b/shaders/tile.cpp @@ -1,5 +1,5 @@ #include "shaders/tile.hpp" -#include "loader.hpp" +#include "loader/loader.hpp" #include "compat/assert.hpp" #include "local-coords.hpp" #include diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ae5bfd02..5f73bfad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,12 +1,11 @@ -set(self ${PROJECT_NAME}) -file(GLOB sources "*.cpp" "../shaders/*.cpp" "../serialize/*.cpp" "../draw/*.cpp" CONFIGURE_ARGS) +set(self floormat) +file(GLOB sources "*.cpp" "../shaders/*.cpp" CONFIGURE_ARGS) add_library(${self} STATIC "${sources}") target_link_libraries( ${self} PUBLIC Magnum::GL Magnum::Magnum Magnum::Shaders - nlohmann_json::nlohmann_json ) if(FLOORMAT_PRECOMPILED-HEADERS) target_precompile_headers(${self} PRIVATE precomp.hpp) diff --git a/src/loader.cpp b/src/loader.cpp deleted file mode 100644 index c4329de3..00000000 --- a/src/loader.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "loader.hpp" - -namespace floormat { -loader_::loader_() = default; -loader_::~loader_() = default; -} // namespace floormat diff --git a/src/loader.hpp b/src/loader.hpp deleted file mode 100644 index 32158675..00000000 --- a/src/loader.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -#define FM_IMAGE_PATH "share/floormat/images/" -#define FM_ANIM_PATH "share/floormat/anim/" - -namespace floormat { - -struct tile_atlas; -struct anim_atlas; - -struct loader_ -{ - virtual StringView shader(StringView filename) = 0; - virtual std::shared_ptr tile_atlas(StringView filename, Vector2ub size) = 0; - virtual ArrayView anim_atlas_list() = 0; - virtual std::shared_ptr anim_atlas(StringView name) = 0; - static void destroy(); - static loader_& default_loader() noexcept; - - loader_(const loader_&) = delete; - loader_& operator=(const loader_&) = delete; - - virtual ~loader_(); - -protected: - loader_(); -}; - -extern loader_& loader; // NOLINT(cppcoreguidelines-avoid-non-const-global-variables) - -} // namespace floormat diff --git a/src/precomp.hpp b/src/precomp.hpp index 9cdc85d6..5ec01fe0 100644 --- a/src/precomp.hpp +++ b/src/precomp.hpp @@ -10,10 +10,12 @@ #endif #include +#include #include #include -#include +#include #include +#include #include #include @@ -31,13 +33,16 @@ #include #include -#include -#include +#include +#include #include #include -#include // TODO maybe remove stl +#include #include + #include +#include +#include #include #include @@ -50,5 +55,3 @@ #include #include #include - -#include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 71b9ed93..d7d202dc 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,10 +1,10 @@ -set(self "${PROJECT_NAME}-test") -file(GLOB sources "*.cpp" "../loader/*.cpp" CONFIGURE_ARGS) +set(self floormat-test) +file(GLOB sources "*.cpp" CONFIGURE_ARGS) file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/test") -link_libraries(${PROJECT_NAME}) -link_libraries(Magnum::Trade) +link_libraries(Magnum::GL Magnum::Trade) +link_libraries(floormat-loader floormat-serialize floormat) if(APPLE) link_libraries(Magnum::WindowlessCglApplication) @@ -16,4 +16,7 @@ else() endif() add_executable(${self} "${sources}") +if(FLOORMAT_PRECOMPILED-HEADERS) + target_precompile_headers(${self} PRIVATE precomp.hpp) +endif() install(TARGETS ${self} RUNTIME DESTINATION bin) diff --git a/test/json.cpp b/test/json.cpp index fa4564fd..b5caf145 100644 --- a/test/json.cpp +++ b/test/json.cpp @@ -7,7 +7,7 @@ #include "tile-atlas.hpp" #include "tile.hpp" #include "chunk.hpp" -#include "loader.hpp" +#include "loader/loader.hpp" #include #include diff --git a/test/main.cpp b/test/main.cpp index f09768a9..d20d5d26 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -1,5 +1,5 @@ #include "app.hpp" -#include "loader.hpp" +#include "loader/loader.hpp" namespace floormat { @@ -33,4 +33,3 @@ int main(int argc, char** argv) floormat::floormat application{{argc, argv}}; return application.exec(); } - diff --git a/test/precomp.hpp b/test/precomp.hpp new file mode 100644 index 00000000..c183dcc0 --- /dev/null +++ b/test/precomp.hpp @@ -0,0 +1,13 @@ +#pragma once +#include "../src/precomp.hpp" + +#if 0 +#ifdef __APPLE__ +#include +#elif defined _WIN32 +#include +#else +#include +#endif +#endif +#include diff --git a/test/serializer.cpp b/test/serializer.cpp index c1ab5fef..0625f294 100644 --- a/test/serializer.cpp +++ b/test/serializer.cpp @@ -1,6 +1,6 @@ #include "app.hpp" #include "src/world.hpp" -#include "src/loader.hpp" +#include "loader/loader.hpp" #include "src/tile-atlas.hpp" #include -- cgit v1.2.3