19 #ifndef TEXTURE_H_INCLUDED
20 #define TEXTURE_H_INCLUDED
23 #include "assets/texture_flags.h"
24 #include "generic/identifiable.h"
25 #include "generic/managed.h"
26 #include "interfaces.h"
58 TEXTURE_FORMAT_INVALID = 0,
61 TEXTURE_FORMAT_R_1UB_8,
62 TEXTURE_FORMAT_RGB_3UB_888,
63 TEXTURE_FORMAT_RGBA_4UB_8888,
66 TEXTURE_FORMAT_RGB_1US_565,
67 TEXTURE_FORMAT_RGBA_1US_4444,
68 TEXTURE_FORMAT_RGBA_1US_5551,
69 TEXTURE_FORMAT_ARGB_1US_1555,
70 TEXTURE_FORMAT_ARGB_1US_4444,
71 TEXTURE_FORMAT_RGB_1US_565_TWID,
72 TEXTURE_FORMAT_ARGB_1US_4444_TWID,
73 TEXTURE_FORMAT_ARGB_1US_1555_TWID,
76 TEXTURE_FORMAT_RGB8_PALETTED4,
77 TEXTURE_FORMAT_RGBA8_PALETTED4,
78 TEXTURE_FORMAT_RGB565_PALETTED4,
79 TEXTURE_FORMAT_RGB8_PALETTED8,
80 TEXTURE_FORMAT_RGBA8_PALETTED8,
81 TEXTURE_FORMAT_RGB565_PALETTED8,
84 TEXTURE_FORMAT_RGB_1US_565_VQ_TWID,
85 TEXTURE_FORMAT_ARGB_1US_4444_VQ_TWID,
86 TEXTURE_FORMAT_ARGB_1US_1555_VQ_TWID,
89 TEXTURE_FORMAT_RGB_1US_565_VQ_TWID_MIP,
90 TEXTURE_FORMAT_ARGB_1US_4444_VQ_TWID_MIP,
91 TEXTURE_FORMAT_ARGB_1US_1555_VQ_TWID_MIP
94 std::size_t texture_format_stride(TextureFormat format);
95 std::size_t texture_format_channels(TextureFormat format);
103 enum TextureChannel {
105 TEXTURE_CHANNEL_GREEN,
106 TEXTURE_CHANNEL_BLUE,
107 TEXTURE_CHANNEL_ALPHA,
108 TEXTURE_CHANNEL_ZERO,
110 TEXTURE_CHANNEL_INVERSE_RED,
115 Pixel(uint8_t r, uint8_t g, uint8_t b, uint8_t a) :
123 std::vector<uint8_t>
to_format(TextureFormat fmt);
126 typedef std::array<TextureChannel, 4> TextureChannelSet;
137 static const TextureChannelSet DEFAULT_SOURCE_CHANNELS;
140 static const std::string CHECKERBOARD;
141 static const std::string BUTTON;
144 typedef std::shared_ptr<Texture> ptr;
145 typedef std::vector<uint8_t> Data;
149 TextureFormat format = TEXTURE_FORMAT_RGBA_4UB_8888);
152 TextureFormat format()
const;
153 void set_format(TextureFormat format);
176 bool blur(BlurType blur_type, std::size_t radius);
185 TextureFormat new_format,
186 const TextureChannelSet&
channels = Texture::DEFAULT_SOURCE_CHANNELS);
198 void resize(uint16_t width, uint16_t height);
219 void set_texture_wrap_u(TextureWrap wrap_u);
220 void set_texture_wrap_v(TextureWrap wrap_v);
221 void set_texture_wrap_w(TextureWrap wrap_w);
228 void set_mipmap_generation(MipmapGenerate type);
235 const uint8_t*
data()
const;
252 void set_data(
const uint8_t* data, std::size_t size);
253 void set_data(
const std::vector<uint8_t>& data);
268 typedef std::function<void(uint8_t*, uint16_t, uint16_t, TextureFormat)>
274 uint16_t width()
const override;
275 uint16_t height()
const override;
276 Vec2 dimensions()
const {
277 return Vec2(width(), height());
297 TextureFilter texture_filter()
const;
298 TextureWrap wrap_u()
const;
299 TextureWrap wrap_v()
const;
300 TextureWrap wrap_w()
const;
301 MipmapGenerate mipmap_generation()
const;
302 TextureFreeData free_data_mode()
const;
306 void on_clean_up()
override;
312 bool auto_upload()
const;
316 uint32_t _renderer_specific_id()
const;
329 void _set_has_mipmaps(
bool v);
338 uint16_t height_ = 0;
340 TextureFormat format_ = TEXTURE_FORMAT_RGBA_4UB_8888;
347 void resize_data(uint32_t byte_size);
349 bool data_dirty_ =
true;
350 uint8_t* data_ =
nullptr;
351 uint32_t data_size_ = 0;
361 uint8_t* paletted_data_ =
nullptr;
363 TextureFreeData free_data_mode_ = TEXTURE_FREE_DATA_AFTER_UPLOAD;
365 MipmapGenerate mipmap_generation_ = MIPMAP_GENERATE_COMPLETE;
366 bool has_mipmaps_ =
false;
368 bool params_dirty_ =
true;
369 TextureFilter filter_ = TEXTURE_FILTER_POINT;
370 TextureWrap wrap_u_ = TEXTURE_WRAP_REPEAT;
371 TextureWrap wrap_v_ = TEXTURE_WRAP_REPEAT;
372 TextureWrap wrap_w_ = TEXTURE_WRAP_REPEAT;
374 uint32_t renderer_id_ = 0;
379 #endif // TEXTURE_H_INCLUDED