From 84b10bdb7450211372cfc8238db9ec7523e80ad4 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 10 Oct 2019 20:28:41 +0200 Subject: [PATCH] - cleaned up videoUpdatePalette function and removed the hardware texture invalidation from it. This makes no sense because it'd toss out all the level textures that may still be needed for what probably is only a temporary palette change (like going underwater) --- source/build/src/palette.cpp | 136 +++++++++++++++-------------------- 1 file changed, 57 insertions(+), 79 deletions(-) diff --git a/source/build/src/palette.cpp b/source/build/src/palette.cpp index 6f8e1f636..922883fd5 100644 --- a/source/build/src/palette.cpp +++ b/source/build/src/palette.cpp @@ -735,105 +735,83 @@ void paletteFreeColorTable(int32_t const id) // setbrightness // // flags: -// 1: don't setpalette(), DON'T USE THIS FLAG! +// 1: don't setpalette(), not checked anymore. // 2: don't gltexinvalidateall() // 4: don't calc curbrightness from dabrightness, DON'T USE THIS FLAG! // 8: don't gltexinvalidate8() // 16: don't reset palfade* +// 32: apply brightness to scene in OpenGL void videoSetPalette(char dabrightness, uint8_t dapalid, uint8_t flags) { - int32_t i, j; - const uint8_t *dapal; + int32_t i, j; + const uint8_t* dapal; -#ifdef USE_OPENGL - int32_t paldidchange; -#endif - int32_t palsumdidchange; - // uint32_t lastbright = curbrightness; + int32_t paldidchange; + int32_t palsumdidchange; + // uint32_t lastbright = curbrightness; - Bassert((flags&4)==0); + Bassert((flags & 4) == 0); - if (/*(unsigned)dapalid >= MAXBASEPALS ||*/ basepaltable[dapalid] == NULL) - dapalid = 0; -#ifdef USE_OPENGL - paldidchange = (curbasepal != dapalid || basepalreset); -#endif - curbasepal = dapalid; - basepalreset = 0; + if (/*(unsigned)dapalid >= MAXBASEPALS ||*/ basepaltable[dapalid] == NULL) + dapalid = 0; + paldidchange = (curbasepal != dapalid || basepalreset); + curbasepal = dapalid; + basepalreset = 0; - dapal = basepaltable[curbasepal]; + dapal = basepaltable[curbasepal]; - if (!(flags&4)) - { - curbrightness = clamp(dabrightness, 0, 15); - // if (lastbright != (unsigned)curbrightness) - // vid_gamma = 1.0 + ((float)curbrightness / 10.0); - } + if (!(flags & 4)) + { + curbrightness = clamp(dabrightness, 0, 15); + } - videoSetGamma(); - j = !0; + // In-scene brightness mode for RR's thunderstorm. This shouldn't affect the global gamma ramp. + if ((videoGetRenderMode() >= REND_POLYMOST) && (flags & 32)) + { + r_scenebrightness = curbrightness; + } + else + { + videoSetGamma(); + r_scenebrightness = 0; + } + j = 0; // Assume that the backend can do it. - for (i=0; i<256; i++) - { - // save palette without any brightness adjustment - curpalette[i].r = dapal[i*3+0]; - curpalette[i].g = dapal[i*3+1]; - curpalette[i].b = dapal[i*3+2]; - curpalette[i].f = 0; + for (i = 0; i < 256; i++) + { + // save palette without any brightness adjustment + curpalette[i].r = dapal[i * 3 + 0]; + curpalette[i].g = dapal[i * 3 + 1]; + curpalette[i].b = dapal[i * 3 + 2]; + curpalette[i].f = 0; - // brightness adjust the palette - curpalettefaded[i].b = britable[j][curpalette[i].b]; - curpalettefaded[i].g = britable[j][curpalette[i].g]; - curpalettefaded[i].r = britable[j][curpalette[i].r]; - curpalettefaded[i].f = 0; - } + // brightness adjust the palette + curpalettefaded[i].b = britable[j][curpalette[i].b]; + curpalettefaded[i].g = britable[j][curpalette[i].g]; + curpalettefaded[i].r = britable[j][curpalette[i].r]; + curpalettefaded[i].f = 0; + } -#ifdef USE_OPENGL - if ((flags&32) != 0 && videoGetRenderMode() == REND_POLYMOST && playing_rr) - r_brightnesshack = j; - else - r_brightnesshack = 0; -#endif + if ((flags & 16) && palfadedelta) // keep the fade + paletteSetFade(palfadedelta >> 2); - if ((flags&16) && palfadedelta) // keep the fade - paletteSetFade(palfadedelta>>2); + static uint32_t lastpalettesum = 0; + uint32_t newpalettesum = XXH32((uint8_t*)curpalettefaded, sizeof(curpalettefaded), sizeof(curpalettefaded)); - static uint32_t lastpalettesum=0; - uint32_t newpalettesum = XXH32((uint8_t *) curpalettefaded, sizeof(curpalettefaded), sizeof(curpalettefaded)); + palsumdidchange = (newpalettesum != lastpalettesum); - palsumdidchange = (newpalettesum != lastpalettesum); + if (palsumdidchange || newpalettesum != g_lastpalettesum) + { + videoUpdatePalette(0, 256); + } - if (palsumdidchange || newpalettesum != g_lastpalettesum) - { - // if ((flags&1) == 0) - videoUpdatePalette(0, 256); - } + g_lastpalettesum = lastpalettesum = newpalettesum; - g_lastpalettesum = lastpalettesum = newpalettesum; - -#if 0 - if (videoGetRenderMode() >= REND_POLYMOST) - { - // Only reset the textures if the corresponding preserve flags are clear and - // either (a) the new palette is different to the last, or (b) the brightness - // changed and we couldn't set it using hardware gamma. - - // XXX: no-HW-gamma OpenGL platforms will exhibit bad performance with - // simultaneous basepal and tint changes? - const int32_t doinvalidate = (paldidchange); - - if (!(flags&2) && doinvalidate) - gltexinvalidatetype(INVALIDATE_ALL_NON_INDEXED); - if (!(flags&8) && doinvalidate) - gltexinvalidatetype(INVALIDATE_ART_NON_INDEXED); - } -#endif - - if ((flags&16)==0) - { - palfadergb.r = palfadergb.g = palfadergb.b = 0; - palfadedelta = 0; - } + if ((flags & 16) == 0) + { + palfadergb.r = palfadergb.g = palfadergb.b = 0; + palfadedelta = 0; + } } palette_t paletteGetColor(int32_t col)