1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-13 19:12:32 +01:00

Create new PaletteMap type to replace byte pointers

This commit is contained in:
Ted John
2020-05-28 19:52:20 +01:00
parent 97e985521e
commit d3f7ec4844
15 changed files with 216 additions and 123 deletions

View File

@@ -96,7 +96,7 @@ BasicTextureInfo TextureCache::GetOrLoadImageTexture(uint32_t image)
return info;
}
BasicTextureInfo TextureCache::GetOrLoadGlyphTexture(uint32_t image, uint8_t* palette)
BasicTextureInfo TextureCache::GetOrLoadGlyphTexture(uint32_t image, const PaletteMap& paletteMap)
{
GlyphId glyphId{};
glyphId.Image = image;
@@ -105,7 +105,12 @@ BasicTextureInfo TextureCache::GetOrLoadGlyphTexture(uint32_t image, uint8_t* pa
{
shared_lock lock(_mutex);
std::copy_n(palette, sizeof(glyphId.Palette), reinterpret_cast<uint8_t*>(&glyphId.Palette));
uint8_t glyphMap[8];
for (uint8_t i = 0; i < 8; i++)
{
glyphMap[i] = paletteMap[i];
}
std::copy_n(glyphMap, sizeof(glyphId.Palette), reinterpret_cast<uint8_t*>(&glyphId.Palette));
auto kvp = _glyphTextureMap.find(glyphId);
if (kvp != _glyphTextureMap.end())
@@ -121,7 +126,7 @@ BasicTextureInfo TextureCache::GetOrLoadGlyphTexture(uint32_t image, uint8_t* pa
// Load new texture.
unique_lock lock(_mutex);
auto cacheInfo = LoadGlyphTexture(image, palette);
auto cacheInfo = LoadGlyphTexture(image, paletteMap);
auto it = _glyphTextureMap.insert(std::make_pair(glyphId, cacheInfo));
return (*it.first).second;
@@ -175,9 +180,13 @@ void TextureCache::GeneratePaletteTexture()
for (int i = 0; i < PALETTE_TO_G1_OFFSET_COUNT; ++i)
{
GLint y = PaletteToY(i);
uint16_t image = palette_to_g1_offset[i];
auto element = gfx_get_g1_element(image);
gfx_draw_sprite_software(&dpi, ImageId(image), -element->x_offset, y - element->y_offset);
auto g1Index = GetPaletteG1Index(i);
if (g1Index)
{
auto element = gfx_get_g1_element(*g1Index);
gfx_draw_sprite_software(&dpi, ImageId(*g1Index), -element->x_offset, y - element->y_offset);
}
}
glBindTexture(GL_TEXTURE_RECTANGLE, _paletteTexture);
@@ -240,9 +249,9 @@ AtlasTextureInfo TextureCache::LoadImageTexture(uint32_t image)
return cacheInfo;
}
AtlasTextureInfo TextureCache::LoadGlyphTexture(uint32_t image, uint8_t* palette)
AtlasTextureInfo TextureCache::LoadGlyphTexture(uint32_t image, const PaletteMap& paletteMap)
{
rct_drawpixelinfo dpi = GetGlyphAsDPI(image, palette);
rct_drawpixelinfo dpi = GetGlyphAsDPI(image, paletteMap);
auto cacheInfo = AllocateImage(dpi.width, dpi.height);
cacheInfo.image = image;
@@ -304,7 +313,7 @@ rct_drawpixelinfo TextureCache::GetImageAsDPI(uint32_t image, uint32_t tertiaryC
return dpi;
}
rct_drawpixelinfo TextureCache::GetGlyphAsDPI(uint32_t image, uint8_t* palette)
rct_drawpixelinfo TextureCache::GetGlyphAsDPI(uint32_t image, const PaletteMap& palette)
{
auto g1Element = gfx_get_g1_element(image & 0x7FFFFUL);
int32_t width = g1Element->width;