#ifndef _TEXTURE_H #define _TEXTURE_H #include "gl.h" #include "assets.h" namespace Mauri { enum TextureVersion { TEXB0001 = 0, TEXB0002, TEXB0003 }; enum TextureFormat { RGBA8888 = 0, DXT5 = 4, DXT3 = 6, DXT1 = 7, RG88 = 8, R8 = 9 }; struct TextureFlags { bool NO_INTERPOLATION : 1; bool CLAMP_UV : 1; bool IS_GIF : 1; u32 UNKNOWN : 29; }; struct TextureFrame { u32 id; f32 frame_time; f32 x; f32 y; f32 width; f32 unknown0; f32 unknown1; f32 height; }; class Texture { public: Texture(Asset *asset); Texture(RenderFramebuffer *buffer); ~Texture(); bool wrapped; RenderTexture *texture; u32 width; u32 height; union { u32 i; TextureFlags m; } flags = { 0 }; auto is_gif() const -> bool { return this->flags.m.IS_GIF == 1; } u32 gif_width; u32 gif_height; u32 gif_index = 0; f32 gif_update = 0.f; vec4 *texture_resolution; vec2 texture_translation = vec2(0.f); vec4 texture_rotation = vec4(0.f); auto bind(s32 index) -> void; auto update(f32 time) -> void; auto save_to_file(const std::string &filename) -> void; private: std::vector textures; std::vector texture_resolutions; std::vector frames; }; class Framebuffer { public: Framebuffer(std::string name, s32 width, s32 height, f32 scale); ~Framebuffer(); std::string name; RenderFramebuffer *buffer; Texture *texture; }; } // namespace Mauri #endif // _TEXTURE_H