-#include <msp/io/memory.h>
#include "bindable.h"
#include "buffer.h"
#include "error.h"
allocated(0)
{ }
+Texture2D::~Texture2D()
+{
+ set_manager(0);
+}
+
void Texture2D::storage(PixelFormat fmt, unsigned wd, unsigned ht)
{
if(width>0)
if(allocated&(1<<level))
return;
- image(level, get_base_pixelformat(ifmt), UNSIGNED_BYTE, 0);
+ PixelFormat base_fmt = get_base_pixelformat(ifmt);
+ image(level, base_fmt, get_alloc_type(base_fmt), 0);
}
void Texture2D::image(unsigned level, PixelFormat fmt, DataType type, const void *data)
glTexSubImage2D(target, level, x, y, wd, ht, fmt, type, data);
}
-void Texture2D::load_image(const string &fn, bool srgb)
-{
- Graphics::Image img;
- img.load_file(fn);
-
- image(img, srgb);
-}
-
void Texture2D::image(const Graphics::Image &img, bool srgb)
{
image(img, srgb, false);
unsigned h = img.get_height();
PixelFormat fmt = pixelformat_from_graphics(img.get_format());
if(width==0)
- {
- PixelFormat f = storage_pixelformat_from_graphics(img.get_format());
- if(srgb)
- f = get_srgb_pixelformat(f);
- storage(f, w, h);
- }
+ storage(storage_pixelformat_from_graphics(img.get_format(), srgb), w, h);
else if(w!=width || h!=height)
throw incompatible_data("Texture2D::image");
void Texture2D::Loader::init()
{
- add("image_data", &Loader::image_data);
add("raw_data", &Loader::raw_data);
add("storage", &Loader::storage);
add("storage", &Loader::storage_b);
}
-void Texture2D::Loader::image_data(const string &data)
-{
- Graphics::Image img;
- IO::Memory mem(data.data(), data.size());
- img.load_io(mem);
-
- obj.image(img, srgb);
-}
-
void Texture2D::Loader::raw_data(const string &data)
{
obj.image(0, get_base_pixelformat(obj.ifmt), UNSIGNED_BYTE, data.data());