mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-04 09:52:01 +00:00
- fixed some imprecisions in font luminosity calculation.
This was still going through the palette which could result in off-by-one errors.
This commit is contained in:
parent
60bf096912
commit
19aac25f19
1 changed files with 28 additions and 7 deletions
|
@ -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<unsigned>(Chars.Size(), LastChar - FirstChar + 1);
|
||||
uint32_t usedcolors[256] = {};
|
||||
TArray<double> 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++)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue