tex->set_mag_filter(default_tex_filter);
tex->set_min_filter(default_tex_filter);
- // 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
private:
Texture2D &texture;
IO::Seekable &io;
+ bool srgb_conversion;
Buffer pixel_buffer;
char *mapped_address;
Graphics::Image image;
public:
AsyncLoader(Texture2D &, IO::Seekable &);
+ void set_srgb_conversion(bool);
virtual bool needs_sync() const;
virtual bool process();
};
h = 1;
}
-Resource::AsyncLoader *Texture2D::load(IO::Seekable &io, const Resources *)
+Resource::AsyncLoader *Texture2D::load(IO::Seekable &io, const Resources *res)
{
- return new AsyncLoader(*this, io);
+ AsyncLoader *ldr = new AsyncLoader(*this, io);
+ if(res)
+ ldr->set_srgb_conversion(res->get_srgb_conversion());
+ return ldr;
}
UInt64 Texture2D::get_data_size() const
Texture2D::AsyncLoader::AsyncLoader(Texture2D &t, IO::Seekable &i):
texture(t),
io(i),
+ srgb_conversion(false),
pixel_buffer(PIXEL_UNPACK_BUFFER),
mapped_address(0),
phase(0)
{ }
+void Texture2D::AsyncLoader::set_srgb_conversion(bool c)
+{
+ srgb_conversion = c;
+}
+
bool Texture2D::AsyncLoader::needs_sync() const
{
return phase%2;
if(!texture.id)
glGenTextures(1, &texture.id);
- texture.image(image, false, true);
+ texture.image(image, srgb_conversion, true);
}
++phase;