diff --git a/source/build/src/texcache.cpp b/source/build/src/texcache.cpp index 9b4b67c17..bd4787c48 100644 --- a/source/build/src/texcache.cpp +++ b/source/build/src/texcache.cpp @@ -214,7 +214,6 @@ bool GLInstance::SetTexture(FTexture* tex, int palette, int method, int samplero } else if (TextureType == TT_TRUECOLOR) { - // Todo: brightmaps for true color tiles lookuppal = palmanager.LookupPalette(usepalette, usepalswap, true); if (lookuppal >= 0) { diff --git a/source/glbackend/gl_palmanager.cpp b/source/glbackend/gl_palmanager.cpp index b5661694c..815e47ff1 100644 --- a/source/glbackend/gl_palmanager.cpp +++ b/source/glbackend/gl_palmanager.cpp @@ -261,18 +261,43 @@ int PaletteManager::LookupPalette(int palette, int palswap, bool brightmap) { int realpal = palettemap[palette]; int realswap = palswapmap[palswap]; - int combined = realpal * 0x10000 + realswap; + int combined = (brightmap? 0x1000000 : 0) + realpal * 0x10000 + realswap; int* combinedindex = swappedpalmap.CheckKey(combined); if (combinedindex) return *combinedindex; PaletteData* paldata = &palettes[realpal]; PalswapData* swapdata = &palswaps[realswap]; PalEntry swappedpalette[256]; - for (int i = 0; i < 256; i++) + if (!brightmap) { - int swapi = swapdata->lookup[i]; - swappedpalette[i] = paldata->colors[swapi]; + for (int i = 0; i < 255; i++) + { + int swapi = swapdata->lookup[i]; + swappedpalette[i] = paldata->colors[swapi]; + swappedpalette[i].a = 255; + } } + else + { + bool found = false; + memset(swappedpalette, 0, sizeof(swappedpalette)); + for (int i = 0; i < 255; i++) + { + int swapi = swapdata->lookup[i]; + auto swapc = paldata->colors[swapi]; + if (swapc.a) + { + found = true; + swappedpalette[i] = 0xffffffff; + } + } + if (!found) + { + swappedpalmap.Insert(combined, -1); + return -1; + } + } + swappedpalette[255] = 0; int palid = FindPalette((uint8_t*)swappedpalette); swappedpalmap.Insert(combined, palid); return palid;