#pragma once #include #include "thin3d/thin3d.h" #include "Core/Config.h" enum ImageFileType { PNG, JPEG, ZIM, DETECT, TYPE_UNKNOWN, }; class ManagedTexture { public: ManagedTexture(Draw::DrawContext *draw) : draw_(draw) { } ~ManagedTexture() { if (texture_) texture_->Release(); } bool LoadFromFile(const std::string &filename, ImageFileType type = ImageFileType::DETECT, bool generateMips = false); bool LoadFromFileData(const uint8_t *data, size_t dataSize, ImageFileType type = ImageFileType::DETECT, bool generateMips = false); Draw::Texture *GetTexture() { return texture_; } // For immediate use, don't store. int Width() const { return texture_->Width(); } int Height() const { return texture_->Height(); } private: Draw::Texture *texture_ = nullptr; Draw::DrawContext *draw_; std::string filename_; // Textures that are loaded from files can reload themselves automatically. }; std::unique_ptr CreateTextureFromFile(Draw::DrawContext *draw, const char *filename, ImageFileType fileType, bool generateMips = false); std::unique_ptr CreateTextureFromFileData(Draw::DrawContext *draw, const uint8_t *data, int size, ImageFileType fileType, bool generateMips = false);