Add brightness setting (gamma correction) on FRAC
This commit is contained in:
parent
5e420d7c4a
commit
27f40b003e
1
README
1
README
|
@ -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
|
||||
|
|
|
@ -309,6 +309,7 @@ void CGCheat();
|
|||
void CGSwitchClip();
|
||||
void CGFreeMem();
|
||||
void CGRefreshSwitch();
|
||||
void CGCycleGamma();
|
||||
|
||||
|
||||
#endif // __DOOMDEF__
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue