yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
tilemap.h
Go to the documentation of this file.
1#ifndef YAZE_GFX_TILEMAP_H
2#define YAZE_GFX_TILEMAP_H
3
4#include "absl/container/flat_hash_map.h"
6#include "app/gfx/bitmap.h"
7#include "app/gfx/snes_tile.h"
8
9#include <list>
10#include <unordered_map>
11
12namespace yaze {
13namespace gfx {
14
18struct Pair {
19 int x;
20 int y;
21};
22
32struct TileCache {
33 static constexpr size_t MAX_CACHE_SIZE = 1024;
34 std::unordered_map<int, Bitmap> cache_;
35 std::list<int> access_order_;
36
42 Bitmap* GetTile(int tile_id) {
43 auto it = cache_.find(tile_id);
44 if (it != cache_.end()) {
45 // Move to front of access order (most recently used)
46 access_order_.remove(tile_id);
47 access_order_.push_front(tile_id);
48 return &it->second;
49 }
50 return nullptr;
51 }
52
58 void CacheTile(int tile_id, Bitmap&& bitmap) {
59 if (cache_.size() >= MAX_CACHE_SIZE) {
60 // Remove least recently used tile
61 int lru_tile = access_order_.back();
62 access_order_.pop_back();
63 cache_.erase(lru_tile);
64 }
65
66 cache_[tile_id] = std::move(bitmap);
67 access_order_.push_front(tile_id);
68 }
69
73 void Clear() {
74 cache_.clear();
75 access_order_.clear();
76 }
77
82 size_t Size() const { return cache_.size(); }
83};
84
109struct Tilemap {
112 std::vector<std::array<gfx::TileInfo, 4>> tile_info;
115};
116
117std::vector<uint8_t> FetchTileDataFromGraphicsBuffer(
118 const std::vector<uint8_t> &data, int tile_id, int sheet_offset);
119
120Tilemap CreateTilemap(IRenderer* renderer, std::vector<uint8_t> &data, int width, int height,
121 int tile_size, int num_tiles, SnesPalette &palette);
122
123void UpdateTilemap(IRenderer* renderer, Tilemap &tilemap, const std::vector<uint8_t> &data);
124
125void RenderTile(IRenderer* renderer, Tilemap &tilemap, int tile_id);
126
127void RenderTile16(IRenderer* renderer, Tilemap &tilemap, int tile_id);
128void UpdateTile16(IRenderer* renderer, Tilemap &tilemap, int tile_id);
129
130void ModifyTile16(Tilemap &tilemap, const std::vector<uint8_t> &data,
131 const TileInfo &top_left, const TileInfo &top_right,
132 const TileInfo &bottom_left, const TileInfo &bottom_right,
133 int sheet_offset, int tile_id);
134
135void ComposeTile16(Tilemap &tilemap, const std::vector<uint8_t> &data,
136 const TileInfo &top_left, const TileInfo &top_right,
137 const TileInfo &bottom_left, const TileInfo &bottom_right,
138 int sheet_offset);
139
140std::vector<uint8_t> GetTilemapData(Tilemap &tilemap, int tile_id);
141
150void RenderTilesBatch(IRenderer* renderer, Tilemap& tilemap, const std::vector<int>& tile_ids,
151 const std::vector<std::pair<float, float>>& positions,
152 const std::vector<std::pair<float, float>>& scales = {});
153
154} // namespace gfx
155} // namespace yaze
156
157#endif // YAZE_GFX_TILEMAP_H
Represents a bitmap image optimized for SNES ROM hacking.
Definition bitmap.h:66
Defines an abstract interface for all rendering operations.
Definition irenderer.h:35
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
SNES 16-bit tile metadata container.
Definition snes_tile.h:50
void RenderTile16(IRenderer *renderer, Tilemap &tilemap, int tile_id)
Definition tilemap.cc:63
void ModifyTile16(Tilemap &tilemap, const std::vector< uint8_t > &data, const TileInfo &top_left, const TileInfo &top_right, const TileInfo &bottom_left, const TileInfo &bottom_right, int sheet_offset, int tile_id)
Definition tilemap.cc:188
void UpdateTilemap(IRenderer *renderer, Tilemap &tilemap, const std::vector< uint8_t > &data)
Definition tilemap.cc:32
void UpdateTile16(IRenderer *renderer, Tilemap &tilemap, int tile_id)
Definition tilemap.cc:90
std::vector< uint8_t > GetTilemapData(Tilemap &tilemap, int tile_id)
Definition tilemap.cc:235
Tilemap CreateTilemap(IRenderer *renderer, std::vector< uint8_t > &data, int width, int height, int tile_size, int num_tiles, SnesPalette &palette)
Definition tilemap.cc:14
void RenderTilesBatch(IRenderer *renderer, Tilemap &tilemap, const std::vector< int > &tile_ids, const std::vector< std::pair< float, float > > &positions, const std::vector< std::pair< float, float > > &scales)
Render multiple tiles using atlas rendering for improved performance.
Definition tilemap.cc:311
std::vector< uint8_t > FetchTileDataFromGraphicsBuffer(const std::vector< uint8_t > &data, int tile_id, int sheet_offset)
Definition tilemap.cc:113
void RenderTile(IRenderer *renderer, Tilemap &tilemap, int tile_id)
Definition tilemap.cc:44
void ComposeTile16(Tilemap &tilemap, const std::vector< uint8_t > &data, const TileInfo &top_left, const TileInfo &top_right, const TileInfo &bottom_left, const TileInfo &bottom_right, int sheet_offset)
Definition tilemap.cc:212
Main namespace for the application.
Simple 2D coordinate pair for tilemap dimensions.
Definition tilemap.h:18
int y
Y coordinate or height.
Definition tilemap.h:20
int x
X coordinate or width.
Definition tilemap.h:19
Smart tile cache with LRU eviction for efficient memory management.
Definition tilemap.h:32
size_t Size() const
Get cache statistics.
Definition tilemap.h:82
void CacheTile(int tile_id, Bitmap &&bitmap)
Cache a tile bitmap.
Definition tilemap.h:58
std::list< int > access_order_
Definition tilemap.h:35
std::unordered_map< int, Bitmap > cache_
Definition tilemap.h:34
void Clear()
Clear the cache.
Definition tilemap.h:73
Bitmap * GetTile(int tile_id)
Get a cached tile by ID.
Definition tilemap.h:42
static constexpr size_t MAX_CACHE_SIZE
Definition tilemap.h:33
Tilemap structure for SNES tile-based graphics management.
Definition tilemap.h:109
Pair tile_size
Size of individual tiles (8x8 or 16x16)
Definition tilemap.h:113
TileCache tile_cache
Smart tile cache with LRU eviction.
Definition tilemap.h:111
Pair map_size
Size of tilemap in tiles.
Definition tilemap.h:114
Bitmap atlas
Master bitmap containing all tiles.
Definition tilemap.h:110
std::vector< std::array< gfx::TileInfo, 4 > > tile_info
Tile metadata (4 tiles per 16x16)
Definition tilemap.h:112