]> git.tdb.fi Git - libs/gl.git/blobdiff - source/resources/resources.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / resources / resources.h
index 3036c2f463ef44425d0a4f48939a84fb363aae37..0743f763f306406920f175d541d1714429e09990 100644 (file)
@@ -12,42 +12,100 @@ class Mesh;
 class Module;
 class Program;
 class ResourceManager;
+class Scene;
 class Texture2D;
 
 /**
-A collection class for GL resources.  Most useful as a base class for an
-application-specific collection.
+A collection class for GL resources.
+
+The following types of objects can be loaded:
+Animation                          .anim
+Armature                           .arma
+BasicMaterial (Material)           .mat
+Camera                             .camera
+DirectionalLight (Light)           .light
+Font                               .font
+KeyFrame                           .kframe
+Lighting                           .lightn
+Mesh                               .mesh
+Module                             .glsl .spv
+Object (Renderable)                .object
+OccludedScene (Scene, Renderable)  .scene
+OrderedScene (Scene, Renderable)   .scene
+PbrMaterial (Material)             .mat
+PointLight (Light)                 .light
+SequenceTemplate                   .seq
+Pose                               .pose
+Program                            .shader
+Sampler                            .samp
+SimpleScene (Scene, Renderable)    .scene
+Technique                          .tech
+Texture1D (Texture)                .tex
+Texture2D (Texture)                .tex .png .jpg
+Texture3D (Texture)                .tex
+TextureCube (Texture)              .tex
+Texture2DArray (Texture)           .tex
+UnlitMaterial (Material)           .mat
+ZSortedScene (Scene, Renderable)   .scene
+
+This class is normally used by deriving from it and adding any necessary data
+sources in the derived class.
+
+A ResourceManager can be set to manage objects derived from Resource.  Bulk
+data for those objects will then be loaded in the background, without blocking
+the main thread.
 */
 class Resources: virtual public DataFile::Collection
 {
+public:
+       class Loader: public DataFile::DerivedObjectLoader<Resources, Collection::Loader>
+       {
+       public:
+               Loader(Resources &);
+
+       private:
+               template<typename T, typename L = typename T::GenericLoader>
+               void generic(const std::string &);
+       };
+
 private:
-       TextureFilter default_tex_filter;
-       float default_tex_anisotropy;
-       bool srgb_conversion;
-       ResourceManager *resource_manager;
+       template<typename T>
+       class GenericResourceLoader: public T::GenericLoader
+       {
+       private:
+               Resources &resources;
 
-public:
-       Resources();
+       public:
+               GenericResourceLoader(Resources &r): T::GenericLoader(r), resources(r) { }
 
-       static const DataFile::CollectionSource &get_builtins();
+       protected:
+               virtual void type(const DataFile::Symbol &);
+       };
 
-       void set_default_texture_filter(TextureFilter);
-       void set_default_texture_anisotropy(float);
+       ResourceManager *resource_manager;
 
-       /** Enables or disables sRGB conversion.  If enabled, textures and material
-       colors are converted from sRGB to linear color space when loaded. */
-       DEPRECATED void set_srgb_conversion(bool);
+       static Resources *global_resources;
 
-       DEPRECATED bool get_srgb_conversion() const { return srgb_conversion; }
+public:
+       Resources(bool = true);
+       virtual ~Resources();
+
+       static Resources &get_global();
+       static const DataFile::CollectionSource &get_builtins();
 
        void set_resource_manager(ResourceManager *);
 
 protected:
-       Material *create_material(const std::string &);
+       template<typename T, typename L = typename T::GenericLoader>
+       T *create_generic(const std::string &);
+
        Mesh *create_mesh(const std::string &);
-       Texture2D *create_texture2d(const std::string &);
+       Texture *create_texture(const std::string &);
        Module *create_module(const std::string &);
        Program *create_program(const std::string &);
+
+       template<typename T>
+       static void set_debug_name(const std::string &, T &);
 };
 
 } // namespace GL