#define MSP_GL_TEXTURE2D_H_
#include <string>
-#include <msp/graphics/image.h>
#include <msp/linal/vector.h>
-#include "texture.h"
+#include "texture2d_backend.h"
namespace Msp {
namespace GL {
rectangle. Texture coordinate have a range of [0, 1]. Coordinates outside of
this range are subject to wrapping. This is the most common type of texture.
*/
-class Texture2D: public Texture
+class Texture2D: public Texture2DBackend
{
+ friend Texture2DBackend;
+
public:
class Loader: public Msp::DataFile::DerivedObjectLoader<Texture2D, Texture::Loader>
{
};
private:
- class AsyncLoader;
-
- unsigned width;
- unsigned height;
- unsigned levels;
- unsigned allocated;
+ unsigned width = 0;
+ unsigned height = 0;
+ unsigned levels = 0;
public:
- Texture2D(ResourceManager * = 0);
virtual ~Texture2D();
/** Defines storage structure for the texture. If lv is zero, the number
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. */
- void allocate(unsigned level);
-
/** Updates the contents of the entire texture. Storage must be defined
beforehand. The image data must have dimensions and format matching the
defined storage. */
using Texture::image;
-private:
- void image(const Graphics::Image &, unsigned, bool);
-
-public:
unsigned get_width() const { return width; }
unsigned get_height() const { return height; }
public:
virtual Resource::AsyncLoader *load(IO::Seekable &, const Resources * = 0);
virtual std::uint64_t get_data_size() const;
- virtual void unload();
+ using Texture2DBackend::unload;
};
} // namespace GL