#ifndef YAZE_APP_GFX_BITMAP_H #define YAZE_APP_GFX_BITMAP_H #include #include #include "absl/status/statusor.h" #include "app/core/constants.h" #include "app/gfx/snes_palette.h" namespace yaze { namespace app { namespace gfx { class Bitmap { public: Bitmap() = default; Bitmap(int width, int height, int depth, uchar *data); Bitmap(int width, int height, int depth, int data_size); void Create(int width, int height, int depth, uchar *data); void Create(int width, int height, int depth, int data_size); void Create(int width, int height, int depth, uchar *data, int size, SNESPalette &palette); void CreateTexture(std::shared_ptr renderer); void ApplyPalette(const SNESPalette &palette); absl::StatusOr> CreateTiles(); absl::Status CreateFromTiles(const std::vector &tiles); int GetWidth() const { return width_; } int GetHeight() const { return height_; } auto GetData() const { return pixel_data_; } auto GetTexture() const { return texture_.get(); } auto GetSurface() const { return surface_.get(); } private: struct sdl_deleter { void operator()(SDL_Texture *p) const { SDL_DestroyTexture(p); } void operator()(SDL_Surface *p) const { SDL_FreeSurface(p); } }; int width_ = 0; int height_ = 0; int depth_ = 0; int data_size_ = 0; uchar *pixel_data_; std::shared_ptr texture_; std::shared_ptr surface_; SNESPalette palette_; }; } // namespace gfx } // namespace app } // namespace yaze #endif // YAZE_APP_GFX_BITMAP_H