X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresources%2Fresources.h;h=0743f763f306406920f175d541d1714429e09990;hb=HEAD;hp=3036c2f463ef44425d0a4f48939a84fb363aae37;hpb=dccad64b2ec82249d850b9745614042171499972;p=libs%2Fgl.git diff --git a/source/resources/resources.h b/source/resources/resources.h index 3036c2f4..0743f763 100644 --- a/source/resources/resources.h +++ b/source/resources/resources.h @@ -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 + { + public: + Loader(Resources &); + + private: + template + void generic(const std::string &); + }; + private: - TextureFilter default_tex_filter; - float default_tex_anisotropy; - bool srgb_conversion; - ResourceManager *resource_manager; + template + 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 + 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 + static void set_debug_name(const std::string &, T &); }; } // namespace GL