#include "object.h"
#include "pose.h"
#include "program.h"
+#include "resourcemanager.h"
#include "resources.h"
#include "technique.h"
#include "texture2d.h"
Resources::Resources():
default_tex_filter(LINEAR_MIPMAP_LINEAR),
- srgb_conversion(false)
+ srgb_conversion(false),
+ resource_manager(0)
{
add_type<Animation>().suffix(".anim").keyword("animation");
add_type<Armature>().suffix(".arma").keyword("armature");
add_type<Font>().keyword("font");
add_type<KeyFrame>().suffix(".kframe").keyword("keyframe");
add_type<Material>().suffix(".mat").keyword("material");
- add_type<Mesh>().keyword("mesh");
+ add_type<Mesh>().keyword("mesh").creator(&Resources::create_mesh);
add_type<Object>().keyword("object");
add_type<Pose>().keyword("pose");
add_type<Program>().keyword("shader");
srgb_conversion = c;
}
+void Resources::set_resource_manager(ResourceManager *m)
+{
+ resource_manager = m;
+}
+
+Mesh *Resources::create_mesh(const string &name)
+{
+ if(!resource_manager)
+ return 0;
+
+ if(RefPtr<IO::Seekable> io = open_from_sources(name))
+ {
+ RefPtr<GL::Mesh> mesh = new GL::Mesh(resource_manager);
+ resource_manager->set_resource_location(*mesh, *this, name);
+ return mesh.release();
+ }
+
+ return 0;
+}
+
Texture2D *Resources::create_texture2d(const string &name)
{
string ext = FS::extpart(name);
if(RefPtr<IO::Seekable> io = open_from_sources(name))
{
Graphics::Image image;
- image.load_io(*io);
+ if(!resource_manager)
+ image.load_io(*io);
- RefPtr<GL::Texture2D> tex = new GL::Texture2D;
+ RefPtr<GL::Texture2D> tex = new GL::Texture2D(resource_manager);
if(default_tex_filter==NEAREST_MIPMAP_NEAREST || default_tex_filter==NEAREST_MIPMAP_LINEAR ||
default_tex_filter==LINEAR_MIPMAP_NEAREST || default_tex_filter==LINEAR_MIPMAP_LINEAR)
tex->set_mag_filter(default_tex_filter);
tex->set_min_filter(default_tex_filter);
- tex->image(image);
+ // TODO Somehow pass the srgb flag if a resource manager is in use
+ if(resource_manager)
+ resource_manager->set_resource_location(*tex, *this, name);
+ else
+ tex->image(image, srgb_conversion);
return tex.release();
}