From f3b66397a2a598e5cfb63acd0c0b84f5796d0802 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Thu, 2 Feb 2017 16:33:48 -0800 Subject: [PATCH] Core: Extend tile cache to return raw bits --- include/mgba/core/tile-cache.h | 2 ++ src/core/tile-cache.c | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/include/mgba/core/tile-cache.h b/include/mgba/core/tile-cache.h index 0a71c690a..540705af9 100644 --- a/include/mgba/core/tile-cache.h +++ b/include/mgba/core/tile-cache.h @@ -58,6 +58,8 @@ void mTileCacheSetPalette(struct mTileCache* cache, int palette); const uint16_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, unsigned paletteId); const uint16_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileCacheEntry* entry, unsigned tileId, unsigned paletteId); +const uint8_t* mTileCacheGetRawTile(struct mTileCache* cache, unsigned tileId); +const uint16_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId); CXX_GUARD_END diff --git a/src/core/tile-cache.c b/src/core/tile-cache.c index 85c2f7032..3c34a8d86 100644 --- a/src/core/tile-cache.c +++ b/src/core/tile-cache.c @@ -283,3 +283,27 @@ const uint16_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileC } return tile; } + +const uint8_t* mTileCacheGetRawTile(struct mTileCache* cache, unsigned tileId) { + unsigned bpp = cache->bpp; + switch (bpp) { + case 0: + return NULL; + default: + return (uint8_t*) &cache->vram[tileId << (2 + bpp)]; + } +} + +const uint16_t* mTileCacheGetPalette(struct mTileCache* cache, unsigned paletteId) { + unsigned bpp = cache->bpp; + switch (bpp) { + default: + return NULL; + case 1: + return &cache->palette[paletteId << 2]; + case 2: + return &cache->palette[paletteId << 4]; + case 3: + return &cache->palette[paletteId << 8]; + } +}