#include <string>
#include <msp/graphics/image.h>
-#include "resource.h"
#include "texture.h"
namespace Msp {
void raw_data(const std::string &);
void storage(PixelFormat, unsigned, unsigned);
- void storage_b(PixelFormat, unsigned, unsigned, unsigned);
+ void storage_levels(PixelFormat, unsigned, unsigned, unsigned);
};
private:
class AsyncLoader;
- PixelFormat ifmt;
unsigned width;
unsigned height;
+ unsigned levels;
unsigned allocated;
public:
Texture2D(ResourceManager * = 0);
virtual ~Texture2D();
- /** Defines storage structure for the texture. Must be called before an
- image can be uploaded. Once storage is defined, it can't be changed. */
- void storage(PixelFormat fmt, unsigned wd, unsigned ht);
+ /** Defines storage structure for the texture. If lv is zero, the number
+ of mipmap levels is automatically determined from storage dimensions.
+
+ Must be called before an image can be uploaded. Once storage is defined,
+ it can't be changed. */
+ void storage(PixelFormat fmt, unsigned wd, unsigned ht, unsigned lv = 0);
/** Allocates storage for the texture. The contents are initially
undefined. If storage has already been allocated, does nothing. */
If srgb is true and storage is determined by this call, then an sRGB pixel
format will be used. */
- virtual void image(const Graphics::Image &, bool srgb = false);
+ virtual void image(const Graphics::Image &, unsigned lv, bool srgb = false);
+
+ using Texture::image;
private:
- void image(const Graphics::Image &, bool, bool);
+ void image(const Graphics::Image &, unsigned, bool, bool);
public:
unsigned get_width() const { return width; }
unsigned get_height() const { return height; }
private:
- void get_level_size(unsigned, unsigned &, unsigned &);
+ unsigned get_n_levels() const;
+ void get_level_size(unsigned, unsigned &, unsigned &) const;
public:
virtual Resource::AsyncLoader *load(IO::Seekable &, const Resources * = 0);