Add brightness setting (gamma correction) on FRAC

This commit is contained in:
Lephenixnoir 2021-08-04 10:22:35 +02:00
parent 5e420d7c4a
commit 27f40b003e
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
6 changed files with 72 additions and 23 deletions

1
README
View File

@ -12,7 +12,6 @@ CGDOOM is licensed under GPLv2 as a derivative work of both the original DOOM
sources (GPL) and nDoom (GPLv2). See LICENSE.
UI improvements TODO:
-> Brightness/gamma correction setting for brighter rendering
-> Better keyboard layout (including more keys, eg. Run)
-> Unlock entries of the game menu and options menu
-> Warp to level from the main screen

View File

@ -309,6 +309,7 @@ void CGCheat();
void CGSwitchClip();
void CGFreeMem();
void CGRefreshSwitch();
void CGCycleGamma();
#endif // __DOOMDEF__

View File

@ -333,6 +333,8 @@ void I_StartTic (void)
R_SetViewSizeChange(1);
if (KeycodePressed(st, next_st, KEYCODE_ARROW))
CGSwitchClip();
if (KeycodePressed(st, next_st, KEYCODE_FRAC))
CGCycleGamma();
if (KeycodePressed(st, next_st, KEYCODE_FD))
CGFreeMem();
if (KeycodePressed(st, next_st, KEYCODE_VARS))

View File

@ -38,27 +38,41 @@
//Hardcoded = Awesome
//short = 2 bytes = 16 bits = palette word length
static const unsigned short gwPallette[256]=
{
0x0000,0x18A1,0x1060,0x4A49,0xFFFF,0x18C3,0x1082,0x0841,0x0020,0x29A3,0x2141,0x10E0,0x08A0,0x49C5,0x4184,0x3943,
0xFDB6,0xF555,0xF514,0xECB2,0xE471,0xDC30,0xDBCF,0xD38E,0xCB4D,0xC30C,0xBACB,0xBAAA,0xB269,0xAA28,0xA1E7,0xA1C7,
0x9986,0x9165,0x8945,0x8904,0x80E3,0x78C3,0x70A2,0x7082,0x6861,0x6041,0x5820,0x5820,0x5020,0x4800,0x4000,0x4000,
0xFF5B,0xFF1A,0xFED8,0xFE97,0xFE76,0xFE34,0xFDF3,0xFDD2,0xFD90,0xF54F,0xED0E,0xE4CD,0xDC8C,0xD44B,0xCC0A,0xCBE9,
0xBBC9,0xB388,0xAB68,0xA347,0x9B07,0x8AE6,0x82A6,0x7A85,0x7265,0x6A24,0x5A04,0x51E3,0x49A3,0x3962,0x3142,0x2901,
0xEF7D,0xE73C,0xDEFB,0xDEDB,0xD69A,0xCE59,0xC638,0xBDF7,0xB5B6,0xB596,0xAD55,0xA534,0x9CF3,0x94B2,0x9492,0x8C51,
0x8410,0x7BEF,0x73AE,0x6B6D,0x6B4D,0x630C,0x5ACB,0x52AA,0x4A69,0x4228,0x4208,0x39C7,0x31A6,0x2965,0x2124,0x2104,
0x77ED,0x6F6C,0x66EB,0x5E6A,0x5DE9,0x5568,0x4CE7,0x4486,0x3C05,0x3385,0x2B04,0x2283,0x1A02,0x1181,0x1101,0x08A0,
0xBD31,0xB4F0,0xACAF,0xA46E,0x9C2D,0x9BED,0x93CC,0x8B8B,0x834A,0x7B09,0x72E9,0x6AA8,0x6287,0x5A46,0x5206,0x51E5,
0x9C0C,0x8BAA,0x8349,0x72E7,0x6286,0x5A25,0x49C4,0x4183,0x7BEC,0x6B8A,0x6349,0x5B08,0x52A7,0x4266,0x3A25,0x31E4,
0xFFEE,0xEECA,0xD5C8,0xC4C5,0xABC3,0x9AC2,0x8200,0x7140,0xFFFF,0xFEDB,0xFDD7,0xFCD3,0xFBCF,0xFAEB,0xF9E7,0xF8E3,
0xF800,0xE800,0xE000,0xD000,0xC800,0xB800,0xB000,0xA000,0x9800,0x8800,0x7800,0x7000,0x6000,0x5800,0x4800,0x4000,
0xE73F,0xC63F,0xAD5F,0x8C7F,0x739F,0x529F,0x31BF,0x18DF,0x001F,0x001C,0x0019,0x0016,0x0013,0x0010,0x000D,0x000A,
0xFFFF,0xFF5B,0xFEB7,0xFE33,0xFD8F,0xFD0B,0xFC67,0xFBE3,0xF382,0xEB61,0xDB21,0xD2E1,0xCAA0,0xC260,0xB220,0xAA00,
0xFFFF,0xFFFA,0xFFF6,0xFFF1,0xFFED,0xFFE8,0xFFE4,0xFFE0,0xA1E0,0x99A0,0x9160,0x8100,0x49C4,0x4163,0x3102,0x28C1,
0x000A,0x0008,0x0007,0x0005,0x0004,0x0002,0x0001,0x0000,0xFCE8,0xFF29,0xFBDF,0xF81F,0xC819,0x9813,0x680D,0xA34D
static const uint16_t gBasePalette[256] = {
0x0000, 0x18A1, 0x1060, 0x4A49, 0xFFFF, 0x18C3, 0x1082, 0x0841, 0x0020,
0x29A3, 0x2141, 0x10E0, 0x08A0, 0x49C5, 0x4184, 0x3943, 0xFDB6, 0xF555,
0xF514, 0xECB2, 0xE471, 0xDC30, 0xDBCF, 0xD38E, 0xCB4D, 0xC30C, 0xBACB,
0xBAAA, 0xB269, 0xAA28, 0xA1E7, 0xA1C7, 0x9986, 0x9165, 0x8945, 0x8904,
0x80E3, 0x78C3, 0x70A2, 0x7082, 0x6861, 0x6041, 0x5820, 0x5820, 0x5020,
0x4800, 0x4000, 0x4000, 0xFF5B, 0xFF1A, 0xFED8, 0xFE97, 0xFE76, 0xFE34,
0xFDF3, 0xFDD2, 0xFD90, 0xF54F, 0xED0E, 0xE4CD, 0xDC8C, 0xD44B, 0xCC0A,
0xCBE9, 0xBBC9, 0xB388, 0xAB68, 0xA347, 0x9B07, 0x8AE6, 0x82A6, 0x7A85,
0x7265, 0x6A24, 0x5A04, 0x51E3, 0x49A3, 0x3962, 0x3142, 0x2901, 0xEF7D,
0xE73C, 0xDEFB, 0xDEDB, 0xD69A, 0xCE59, 0xC638, 0xBDF7, 0xB5B6, 0xB596,
0xAD55, 0xA534, 0x9CF3, 0x94B2, 0x9492, 0x8C51, 0x8410, 0x7BEF, 0x73AE,
0x6B6D, 0x6B4D, 0x630C, 0x5ACB, 0x52AA, 0x4A69, 0x4228, 0x4208, 0x39C7,
0x31A6, 0x2965, 0x2124, 0x2104, 0x77ED, 0x6F6C, 0x66EB, 0x5E6A, 0x5DE9,
0x5568, 0x4CE7, 0x4486, 0x3C05, 0x3385, 0x2B04, 0x2283, 0x1A02, 0x1181,
0x1101, 0x08A0, 0xBD31, 0xB4F0, 0xACAF, 0xA46E, 0x9C2D, 0x9BED, 0x93CC,
0x8B8B, 0x834A, 0x7B09, 0x72E9, 0x6AA8, 0x6287, 0x5A46, 0x5206, 0x51E5,
0x9C0C, 0x8BAA, 0x8349, 0x72E7, 0x6286, 0x5A25, 0x49C4, 0x4183, 0x7BEC,
0x6B8A, 0x6349, 0x5B08, 0x52A7, 0x4266, 0x3A25, 0x31E4, 0xFFEE, 0xEECA,
0xD5C8, 0xC4C5, 0xABC3, 0x9AC2, 0x8200, 0x7140, 0xFFFF, 0xFEDB, 0xFDD7,
0xFCD3, 0xFBCF, 0xFAEB, 0xF9E7, 0xF8E3, 0xF800, 0xE800, 0xE000, 0xD000,
0xC800, 0xB800, 0xB000, 0xA000, 0x9800, 0x8800, 0x7800, 0x7000, 0x6000,
0x5800, 0x4800, 0x4000, 0xE73F, 0xC63F, 0xAD5F, 0x8C7F, 0x739F, 0x529F,
0x31BF, 0x18DF, 0x001F, 0x001C, 0x0019, 0x0016, 0x0013, 0x0010, 0x000D,
0x000A, 0xFFFF, 0xFF5B, 0xFEB7, 0xFE33, 0xFD8F, 0xFD0B, 0xFC67, 0xFBE3,
0xF382, 0xEB61, 0xDB21, 0xD2E1, 0xCAA0, 0xC260, 0xB220, 0xAA00, 0xFFFF,
0xFFFA, 0xFFF6, 0xFFF1, 0xFFED, 0xFFE8, 0xFFE4, 0xFFE0, 0xA1E0, 0x99A0,
0x9160, 0x8100, 0x49C4, 0x4163, 0x3102, 0x28C1, 0x000A, 0x0008, 0x0007,
0x0005, 0x0004, 0x0002, 0x0001, 0x0000, 0xFCE8, 0xFF29, 0xFBDF, 0xF81F,
0xC819, 0x9813, 0x680D, 0xA34D,
};
/* Current palette (accounting for gamma correction) */
static uint16_t gPalette[256];
//#ifndef CG_EMULATOR
#if 0 // this doesn't work
@ -135,14 +149,35 @@ void I_Flip (void)
{
for(x=0;x<SCREENWIDTH;x++)
{
VRAM[(x+(WIDTH-SCREENWIDTH)/2)+(y+(HEIGHT-SCREENHEIGHT)/2)*WIDTH] = gwPallette[screens[0][x+y*SCREENWIDTH]];
VRAM[(x+(WIDTH-SCREENWIDTH)/2)+(y+(HEIGHT-SCREENHEIGHT)/2)*WIDTH] = gPalette[screens[0][x+y*SCREENWIDTH]];
}
}
Bdisp_PutDisp_DD();
}
/* Generate palette based on gamma correction level. */
void I_SetPalette(int gamma_correction)
{
const byte *gamma = gammatable[gamma_correction % 5];
for (int i = 0; i < 256; i++)
{
int rgb = gBasePalette[i];
int r = (rgb >> 8) & 0xf8;
int g = (rgb >> 3) & 0xfc;
int b = (rgb << 3) & 0xf8;
r = gamma[r] >> 3;
g = gamma[g] >> 2;
b = gamma[b] >> 3;
gPalette[i] = (r << 11) | (g << 5) | b;
}
}
void I_InitGraphics(void)
{
{
usegamma = 0;
I_SetPalette(usegamma);
}
void I_ShutdownGraphics(void)

View File

@ -41,7 +41,8 @@ void I_InitGraphics (void);
void I_ShutdownGraphics(void);
//void I_TogglePalette (boolean sfx, boolean dark);
/* Regenerate palette based on gamma correction level. */
void I_SetPalette (int gamma_correction);
void I_Flip (void);

View File

@ -495,6 +495,17 @@ void CGRefreshSwitch()
}
}
void CGCycleGamma()
{
extern int usegamma;
usegamma = (usegamma + 1) % 5;
I_SetPalette(usegamma);
static char message[32];
sprintf(message, "Brightness: %d/4", usegamma);
plyr->message = message;
}
// Respond to keyboard input events,
// intercept cheats.
boolean ST_Responder (event_t* ev)