all repos — mgba @ 72fa184bac4f7eee1a07b6deba3147f1fa976c92

mGBA Game Boy Advance Emulator

src/gba/renderers/tile-cache.h (view raw)

 1/* Copyright (c) 2013-2016 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#ifndef GBA_TILE_CACHE_H
 7#define GBA_TILE_CACHE_H
 8
 9#include "util/common.h"
10
11struct GBAVideo;
12
13DECL_BITFIELD(GBAVideoTileCacheConfiguration, uint32_t);
14DECL_BIT(GBAVideoTileCacheConfiguration, ShouldStore, 0);
15
16struct GBAVideoTileCache {
17	uint16_t* cache;
18	struct GBAVideoTileCacheEntry {
19		uint32_t paletteVersion;
20		uint8_t vramClean;
21		uint8_t palette256;
22	} status[1024 * 3][16];
23	uint32_t globalPaletteVersion[32];
24	uint32_t globalPalette256Version[2];
25
26	uint16_t* vram;
27	uint16_t* palette;
28	uint16_t temporaryTile[64];
29
30	GBAVideoTileCacheConfiguration config;
31};
32
33void GBAVideoTileCacheInit(struct GBAVideoTileCache* cache);
34void GBAVideoTileCacheDeinit(struct GBAVideoTileCache* cache);
35void GBAVideoTileCacheConfigure(struct GBAVideoTileCache* cache, GBAVideoTileCacheConfiguration config);
36void GBAVideoTileCacheAssociate(struct GBAVideoTileCache* cache, struct GBAVideo* video);
37void GBAVideoTileCacheWriteVRAM(struct GBAVideoTileCache* cache, uint32_t address);
38void GBAVideoTileCacheWritePalette(struct GBAVideoTileCache* cache, uint32_t address);
39const uint16_t* GBAVideoTileCacheGetTile16(struct GBAVideoTileCache* cache, unsigned tileId, unsigned paletteId);
40const uint16_t* GBAVideoTileCacheGetTile16IfDirty(struct GBAVideoTileCache* cache, unsigned tileId, unsigned paletteId);
41const uint16_t* GBAVideoTileCacheGetTile256(struct GBAVideoTileCache* cache, unsigned tileId, unsigned paletteId);
42const uint16_t* GBAVideoTileCacheGetTile256IfDirty(struct GBAVideoTileCache* cache, unsigned tileId, unsigned paletteId);
43
44#endif