diff --git a/demo/data/res/.gitignore b/demo/data/res/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2cd840c26bf49f670a80a514d50bda5991eb8f9d --- /dev/null +++ b/demo/data/res/.gitignore @@ -0,0 +1,2 @@ +# non-free (non-CC) assets for testing +nonfree/ diff --git a/demo/data/res/demo/manifest.yml b/demo/data/res/demo/manifest.yml new file mode 100644 index 0000000000000000000000000000000000000000..acfdedbeddeca11639912a1d27b1e7cb3e11114c --- /dev/null +++ b/demo/data/res/demo/manifest.yml @@ -0,0 +1,3 @@ +--- +id: "com.fossgalaxy.games.demo" +name: "Demo Content Pack" diff --git a/demo/main.cpp b/demo/main.cpp index cece5848aa81f22adf6ab4e95f41324658e5b3f9..4c73b345916ca4b1fefad552308b26fce82784ae 100644 --- a/demo/main.cpp +++ b/demo/main.cpp @@ -1,6 +1,6 @@ +#include <filesystem> #include <iostream> - #include <fggl/gfx/window.hpp> #include <fggl/gfx/ogl.hpp> #include <fggl/gfx/renderer.hpp> @@ -10,6 +10,30 @@ #include <fggl/debug/debug.h> #include <fggl/data/storage.hpp> +// prototype of resource discovery +void discover(std::filesystem::path base) { + + std::vector< std::filesystem::path > contentPacks; + for ( auto& item : std::filesystem::directory_iterator(base) ) { + + // content pack detection + if ( std::filesystem::is_directory( item ) ) { + auto manifest = item.path() / "manifest.yml"; + if ( std::filesystem::exists( manifest ) ) { + contentPacks.push_back( item.path() ); + } + } + + } + + // what did we find? + std::cerr << "found pack(s): " << std::endl; + for ( auto& pack : contentPacks ) { + std::cerr << pack << std::endl; + } + +} + int main(int argc, char* argv[]) { fggl::gfx::Context ctx; @@ -21,10 +45,14 @@ int main(int argc, char* argv[]) { fggl::gfx::Graphics ogl(win); fggl::gfx::MeshRenderer meshRenderer; + // debug layer fggl::debug::DebugUI debug(win); debug.visible(false); + // storage API fggl::data::Storage storage; + discover( storage.resolvePath(fggl::data::Data, "res") ); + fggl::gfx::ShaderCache cache(storage); fggl::gfx::ShaderConfig config;