Exterminate the smurfs! This fixes the problem where everything in the game was drastically hue shifted on certain hardware configurations, particularly the Raspberry Pi.

git-svn-id: https://svn.eduke32.com/eduke32@5884 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2016-10-09 00:15:14 +00:00
parent 231c22d654
commit b18db99691
3 changed files with 27 additions and 8 deletions

View file

@ -596,7 +596,7 @@ void removebasepal(int32_t const id)
// 16: don't reset palfade*
void setbrightness(char dabrightness, uint8_t dapalid, uint8_t flags)
{
int32_t i, j, nohwgamma;
int32_t i, j;
const uint8_t *dapal;
#ifdef USE_OPENGL
@ -624,8 +624,8 @@ void setbrightness(char dabrightness, uint8_t dapalid, uint8_t flags)
// vid_gamma = 1.0 + ((float)curbrightness / 10.0);
}
nohwgamma = setgamma();
j = nohwgamma ? curbrightness : 0;
setgamma();
j = !gammabrightness ? curbrightness : 0;
for (i=0; i<256; i++)
{
@ -669,7 +669,7 @@ void setbrightness(char dabrightness, uint8_t dapalid, uint8_t flags)
// XXX: no-HW-gamma OpenGL platforms will exhibit bad performance with
// simultaneous basepal and tint changes?
const int32_t doinvalidate = (paldidchange || (palsumdidchange && nohwgamma));
const int32_t doinvalidate = (paldidchange || (palsumdidchange && !gammabrightness));
if (!(flags&2) && doinvalidate)
gltexinvalidatetype(INVALIDATE_ALL);
@ -693,9 +693,8 @@ palette_t getpal(int32_t col)
{
if (!gammabrightness)
{
palette_t p ={ britable[curbrightness][curpalette[col].b],
britable[curbrightness][curpalette[col].g],
britable[curbrightness][curpalette[col].r], 0 };
palette_t const p = { britable[curbrightness][curpalette[col].r], britable[curbrightness][curpalette[col].g],
britable[curbrightness][curpalette[col].b], 0 };
return p;
}

View file

@ -1877,8 +1877,18 @@ int32_t setgamma(void)
if (i < 0)
{
#ifndef __ANDROID__ // Don't do this check, it is really supported, TODO
/*
if (i != INT32_MIN)
initprintf("Unable to set gamma: SDL_SetWindowGammaRamp failed: %s\n", SDL_GetError());
*/
#if SDL_MAJOR_VERSION == 1
SDL_SetGammaRamp(&sysgamma[0][0], &sysgamma[1][0], &sysgamma[2][0]);
#else
if (sdl_window)
SDL_SetWindowGammaRamp(sdl_window, &sysgamma[0][0], &sysgamma[1][0], &sysgamma[2][0]);
#endif
gammabrightness = 0;
#endif
}
else
@ -1887,6 +1897,8 @@ int32_t setgamma(void)
lastvidgcb[0] = gamma;
lastvidgcb[1] = contrast;
lastvidgcb[2] = bright;
gammabrightness = 1;
}
return i;

View file

@ -471,6 +471,8 @@ static MenuEntry_t ME_VIDEOSETUP_APPLY = MAKE_MENUENTRY( "Apply Changes", &MF_Re
static MenuLink_t MEO_DISPLAYSETUP_COLORCORR = { MENU_COLCORR, MA_Advance, };
static MenuEntry_t ME_DISPLAYSETUP_COLORCORR = MAKE_MENUENTRY( "Color Correction", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_COLORCORR, Link );
static MenuOption_t MEO_DISPLAYSETUP_PIXELDOUBLING = MAKE_MENUOPTION( &MF_Redfont, &MEOS_OnOff, &ud.detail );
static MenuEntry_t ME_DISPLAYSETUP_PIXELDOUBLING = MAKE_MENUENTRY( "Pixel Doubling:", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_PIXELDOUBLING, Option );
@ -976,7 +978,7 @@ static MenuEntry_t *MEL_RENDERERSETUP_POLYMER [] ={
#ifdef DROIDMENU
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &vid_gamma, &MF_Bluefont, 1.f, 2.5f, 0.f, 39, 1 );
#else
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &vid_gamma, &MF_Bluefont, 0.2f, 4.f, 0.f, 39, 1 );
static MenuRangeFloat_t MEO_COLCORR_GAMMA = MAKE_MENURANGE( &vid_gamma, &MF_Bluefont, 0.3f, 4.f, 0.f, 38, 1 );
#endif
static MenuEntry_t ME_COLCORR_GAMMA = MAKE_MENUENTRY( "Gamma:", &MF_Redfont, &MEF_ColorCorrect, &MEO_COLCORR_GAMMA, RangeFloat );
static MenuRangeFloat_t MEO_COLCORR_CONTRAST = MAKE_MENURANGE( &vid_contrast, &MF_Bluefont, 0.1f, 2.7f, 0.f, 53, 1 );
@ -1772,6 +1774,12 @@ static void M_PreMenu(MenuID_t cm)
MEO_SAVE[i].font = (g_oldverSavegame[i] && MEO_SAVE[i].editfield == NULL) ? &MF_MinifontDarkGray : &MF_MinifontRed;
break;
case MENU_COLCORR:
case MENU_COLCORR_INGAME:
MenuEntry_DisableOnCondition(&ME_COLCORR_CONTRAST, !gammabrightness);
MenuEntry_DisableOnCondition(&ME_COLCORR_BRIGHTNESS, !gammabrightness);
break;
case MENU_CHEATS:
case MENU_CHEATENTRY:
case MENU_CHEAT_WARP: