diff --git a/src/common/fonts/font.cpp b/src/common/fonts/font.cpp index 9663f4e1cb..6ddbe41d46 100644 --- a/src/common/fonts/font.cpp +++ b/src/common/fonts/font.cpp @@ -570,6 +570,32 @@ void RecordTextureColors (FImageSource *pic, uint32_t *usedcolors) } } +//========================================================================== +// +// RecordLuminosity +// +// Records minimum and maximum luminosity of a texture. +// +//========================================================================== + +static void RecordLuminosity(FImageSource* pic, int* minlum, int* maxlum) +{ + auto bitmap = pic->GetCachedBitmap(nullptr, FImageSource::normal); + auto pixels = bitmap.GetPixels(); + auto size = pic->GetWidth() * pic->GetHeight(); + + for (int x = 0; x < size; x++) + { + int xx = x * 4; + if (pixels[xx + 3] > 0) + { + int lum = Luminance(pixels[xx + 2], pixels[xx + 1], pixels[xx]); + if (lum < *minlum) *minlum = lum; + if (lum > *maxlum) *maxlum = lum; + } + } +} + //========================================================================== // // RecordAllTextureColors @@ -969,27 +995,22 @@ int FFont::GetMaxAscender(const uint8_t* string) const void FFont::LoadTranslations() { unsigned int count = min(Chars.Size(), LastChar - FirstChar + 1); - uint32_t usedcolors[256] = {}; - TArray Luminosity; if (count == 0) return; + int minlum = 255, maxlum = 0; for (unsigned int i = 0; i < count; i++) { if (Chars[i].OriginalPic) { auto pic = Chars[i].OriginalPic->GetTexture()->GetImage(); - if (pic) RecordTextureColors(pic, usedcolors); + RecordLuminosity(pic, &minlum, &maxlum); } } - int minlum = 0, maxlum = 0; - GetLuminosity (usedcolors, Luminosity, &minlum, &maxlum); if (MinLum >= 0 && MinLum < minlum) minlum = MinLum; if (MaxLum > maxlum) maxlum = MaxLum; // Here we can set everything to a luminosity translation. - - // Create different translations for different color ranges Translations.Resize(NumTextColors); for (int i = 0; i < NumTextColors; i++) { diff --git a/src/common/fonts/singlelumpfont.cpp b/src/common/fonts/singlelumpfont.cpp index c4711d9022..7725cdb2df 100644 --- a/src/common/fonts/singlelumpfont.cpp +++ b/src/common/fonts/singlelumpfont.cpp @@ -527,7 +527,7 @@ void FSingleLumpFont::FixupPalette (uint8_t *identity, const PalEntry *palette, double minlum = 100000000.0; identity[0] = 0; - palette += 3; // Skip the transparent color + palette++; // Skip the transparent color for (int i = 1; i < ActiveColors; ++i, palette ++) { diff --git a/src/rendering/hwrenderer/scene/hw_sprites.cpp b/src/rendering/hwrenderer/scene/hw_sprites.cpp index c31ae60d05..d53e9ee1e4 100644 --- a/src/rendering/hwrenderer/scene/hw_sprites.cpp +++ b/src/rendering/hwrenderer/scene/hw_sprites.cpp @@ -976,6 +976,7 @@ void HWSprite::Process(HWDrawInfo *di, AActor* thing, sector_t * sector, area_t } depth = (float)((x - vp.Pos.X) * vp.TanCos + (y - vp.Pos.Y) * vp.TanSin); + if (isSpriteShadow) depth += 1.f/65536.f; // always sort shadows behind the sprite. // light calculation diff --git a/src/scripting/backend/codegen_doom.cpp b/src/scripting/backend/codegen_doom.cpp index e107563543..30385519ce 100644 --- a/src/scripting/backend/codegen_doom.cpp +++ b/src/scripting/backend/codegen_doom.cpp @@ -521,7 +521,6 @@ ExpEmit FxActionSpecialCall::Emit(VMFunctionBuilder *build) unsigned i = 0; // Call the BuiltinCallLineSpecial function to perform the desired special. - static uint8_t reginfo[] = { REGT_INT, REGT_POINTER, REGT_INT, REGT_INT, REGT_INT, REGT_INT, REGT_INT }; auto sym = FindBuiltinFunction(NAME_BuiltinCallLineSpecial); assert(sym);