#include <msp/fs/utils.h>
+#include <msp/gl/extensions/sgis_generate_mipmap.h>
#include "animation.h"
#include "armature.h"
#include "font.h"
#include "object.h"
#include "pose.h"
#include "program.h"
+#include "resourcemanager.h"
#include "resources.h"
#include "technique.h"
#include "texture2d.h"
namespace GL {
Resources::Resources():
- default_tex_filter(LINEAR_MIPMAP_LINEAR)
+ default_tex_filter(SGIS_generate_mipmap ? LINEAR_MIPMAP_LINEAR : LINEAR),
+ 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");
default_tex_filter = tf;
}
+void Resources::set_srgb_conversion(bool c)
+{
+ 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);
+ if(resource_manager)
+ resource_manager->set_resource_location(*tex, *this, name);
+ else
+ tex->image(image, srgb_conversion);
return tex.release();
}