X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresources%2Fresources.cpp;h=ab4b0a8dd52d560282ef7ca11d1afcd41c1c6cda;hb=HEAD;hp=a37496b93771190add82369f87cea33fa6b0ce2c;hpb=be92396630a2065e43c21d9d1904e97014844cff;p=libs%2Fgl.git diff --git a/source/resources/resources.cpp b/source/resources/resources.cpp index a37496b9..ab4b0a8d 100644 --- a/source/resources/resources.cpp +++ b/source/resources/resources.cpp @@ -2,6 +2,7 @@ #include #include "animation.h" #include "armature.h" +#include "backend.h" #include "basicmaterial.h" #include "camera.h" #include "directionallight.h" @@ -43,7 +44,6 @@ void init_builtin_data(DataFile::BuiltinSource &); Resources *Resources::global_resources = 0; Resources::Resources(bool set_as_global): - srgb_conversion(false), resource_manager(0) { add_type().suffix(".anim").keyword("animation"); @@ -63,11 +63,12 @@ Resources::Resources(bool set_as_global): .creator([this](const string &n){ return create_mesh(n); }) .notify(&set_debug_name); add_type().suffix(".glsl").suffix(".spv") - .creator([this](const string &n){ return create_module(n); }); - add_type().keyword("object"); - add_type().base().suffix(".scene") + .creator([this](const string &n){ return create_module(n); }) + .notify(&set_debug_name); + add_type().base().keyword("object"); + add_type().base().base().suffix(".scene") .creator([this](const string &n) -> OccludedScene * { create_generic(n); return 0; }); - add_type().base().suffix(".scene") + add_type().base().base().suffix(".scene") .creator([this](const string &n) -> OrderedScene * { create_generic(n); return 0; }); add_type().base().suffix(".mat") .creator([this](const string &n) -> PbrMaterial * { create_generic(n); return 0; }) @@ -81,7 +82,7 @@ Resources::Resources(bool set_as_global): .notify(&set_debug_name); add_type().suffix(".samp").keyword("sampler") .notify(&set_debug_name); - add_type().base().suffix(".scene") + add_type().base().base().suffix(".scene") .creator([this](const string &n) -> SimpleScene * { create_generic(n); return 0; }); add_type().suffix(".tech").keyword("technique") .notify(&set_debug_name); @@ -103,7 +104,7 @@ Resources::Resources(bool set_as_global): add_type().base().suffix(".mat") .creator([this](const string &n) -> UnlitMaterial * { create_generic(n); return 0; }) .notify(&set_debug_name); - add_type().base().suffix(".scene") + add_type().base().base().suffix(".scene") .creator([this](const string &n) -> ZSortedScene * { create_generic(n); return 0; }); add_source(get_builtins()); @@ -140,11 +141,6 @@ const DataFile::CollectionSource &Resources::get_builtins() return builtins; } -void Resources::set_srgb_conversion(bool c) -{ - srgb_conversion = c; -} - void Resources::set_resource_manager(ResourceManager *m) { resource_manager = m; @@ -166,7 +162,7 @@ T *Resources::create_generic(const string &name) Mesh *Resources::create_mesh(const string &name) { - if(!resource_manager) + if(!resource_manager || name[0]=='_') return 0; if(RefPtr io = open_raw(name)) @@ -182,9 +178,16 @@ Mesh *Resources::create_mesh(const string &name) Texture *Resources::create_texture(const string &name) { + bool managed = (resource_manager && name[0]!='_'); + string ext = FS::extpart(name); if(ext==".tex") - return create_generic>(name); + { + if(managed) + return create_generic>(name); + else + return create_generic(name); + } if(RefPtr io = open_raw(name)) { @@ -192,14 +195,16 @@ Texture *Resources::create_texture(const string &name) // Verify that the image is loadable Graphics::Image image; - if(!resource_manager) + if(!managed) image.load_io(*io); tex = new Texture2D; - tex->set_manager(resource_manager); - if(resource_manager) + if(managed) + { + tex->set_manager(resource_manager); resource_manager->set_resource_location(*tex, *this, name); + } else tex->image(image); @@ -220,7 +225,11 @@ Module *Resources::create_module(const string &name) { if(ext==".glsl") { - RefPtr module = new GlslModule; + RefPtr module; + if(get_backend_api()==VULKAN) + module = new SpirVModule; + else + module = new GlslModule; module->load_source(*io, this, name); return module.release(); }