mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-21 05:09:46 -06:00
master brightness
This commit is contained in:
48
GPU2D.cpp
48
GPU2D.cpp
@ -83,6 +83,8 @@ void GPU2D::Reset()
|
||||
memset(BGRotC, 0, 2*2);
|
||||
memset(BGRotD, 0, 2*2);
|
||||
|
||||
MasterBrightness = 0;
|
||||
|
||||
BGExtPalStatus[0] = 0;
|
||||
BGExtPalStatus[1] = 0;
|
||||
BGExtPalStatus[2] = 0;
|
||||
@ -170,6 +172,8 @@ void GPU2D::Write16(u32 addr, u16 val)
|
||||
case 0x032: BGRotB[1] = val; return;
|
||||
case 0x034: BGRotC[1] = val; return;
|
||||
case 0x036: BGRotD[1] = val; return;
|
||||
|
||||
case 0x06C: MasterBrightness = val; return;
|
||||
}
|
||||
|
||||
//printf("unknown GPU write16 %08X %04X\n", addr, val);
|
||||
@ -265,6 +269,50 @@ void GPU2D::DrawScanline(u32 line)
|
||||
break;
|
||||
}
|
||||
|
||||
// master brightness
|
||||
if ((MasterBrightness >> 14) == 1)
|
||||
{
|
||||
// up
|
||||
u32 factor = MasterBrightness & 0x1F;
|
||||
if (factor > 16) factor = 16;
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
u32 val = dst[i];
|
||||
|
||||
u32 r = val & 0x00003F;
|
||||
u32 g = val & 0x003F00;
|
||||
u32 b = val & 0x3F0000;
|
||||
|
||||
r += (((0x00003F - r) * factor) >> 4);
|
||||
g += ((((0x003F00 - g) * factor) >> 4) & 0x003F00);
|
||||
b += ((((0x3F0000 - b) * factor) >> 4) & 0x3F0000);
|
||||
|
||||
dst[i] = r | g | b;
|
||||
}
|
||||
}
|
||||
else if ((MasterBrightness >> 14) == 2)
|
||||
{
|
||||
// down
|
||||
u32 factor = MasterBrightness & 0x1F;
|
||||
if (factor > 16) factor = 16;
|
||||
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
u32 val = dst[i];
|
||||
|
||||
u32 r = val & 0x00003F;
|
||||
u32 g = val & 0x003F00;
|
||||
u32 b = val & 0x3F0000;
|
||||
|
||||
r -= ((r * factor) >> 4);
|
||||
g -= (((g * factor) >> 4) & 0x003F00);
|
||||
b -= (((b * factor) >> 4) & 0x3F0000);
|
||||
|
||||
dst[i] = r | g | b;
|
||||
}
|
||||
}
|
||||
|
||||
// convert to 32-bit RGBA
|
||||
for (int i = 0; i < 256; i++)
|
||||
dst[i] = ((dst[i] & 0x003F3F3F) << 2) |
|
||||
|
Reference in New Issue
Block a user