mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-29 21:00:06 +00:00
92 lines
2.1 KiB
C++
92 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include <scwx/qt/gl/gl.hpp>
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include <boost/gil/point.hpp>
|
|
#include <boost/gil/typedefs.hpp>
|
|
|
|
namespace scwx
|
|
{
|
|
namespace qt
|
|
{
|
|
namespace util
|
|
{
|
|
|
|
struct TextureAttributes
|
|
{
|
|
TextureAttributes() :
|
|
valid_ {false},
|
|
layerId_ {},
|
|
position_ {},
|
|
size_ {},
|
|
sLeft_ {},
|
|
sRight_ {},
|
|
tTop_ {},
|
|
tBottom_ {}
|
|
{
|
|
}
|
|
|
|
TextureAttributes(std::size_t layerId,
|
|
boost::gil::point_t position,
|
|
boost::gil::point_t size,
|
|
float sLeft,
|
|
float sRight,
|
|
float tTop,
|
|
float tBottom) :
|
|
valid_ {true},
|
|
layerId_ {layerId},
|
|
position_ {position},
|
|
size_ {size},
|
|
sLeft_ {sLeft},
|
|
sRight_ {sRight},
|
|
tTop_ {tTop},
|
|
tBottom_ {tBottom}
|
|
{
|
|
}
|
|
|
|
bool valid_;
|
|
std::size_t layerId_;
|
|
boost::gil::point_t position_;
|
|
boost::gil::point_t size_;
|
|
float sLeft_;
|
|
float sRight_;
|
|
float tTop_;
|
|
float tBottom_;
|
|
};
|
|
|
|
class TextureAtlas
|
|
{
|
|
public:
|
|
explicit TextureAtlas();
|
|
~TextureAtlas();
|
|
|
|
TextureAtlas(const TextureAtlas&) = delete;
|
|
TextureAtlas& operator=(const TextureAtlas&) = delete;
|
|
|
|
TextureAtlas(TextureAtlas&&) noexcept;
|
|
TextureAtlas& operator=(TextureAtlas&&) noexcept;
|
|
|
|
static TextureAtlas& Instance();
|
|
|
|
std::uint64_t BuildCount() const;
|
|
|
|
void RegisterTexture(const std::string& name, const std::string& path);
|
|
std::shared_ptr<boost::gil::rgba8_image_t> CacheTexture(
|
|
const std::string& name, const std::string& path, double scale = 1);
|
|
void BuildAtlas(std::size_t width, std::size_t height);
|
|
void BufferAtlas(gl::OpenGLFunctions& gl, GLuint texture);
|
|
|
|
TextureAttributes GetTextureAttributes(const std::string& name);
|
|
|
|
private:
|
|
class Impl;
|
|
|
|
std::unique_ptr<Impl> p;
|
|
};
|
|
|
|
} // namespace util
|
|
} // namespace qt
|
|
} // namespace scwx
|