mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-22 19:02:45 +00:00
Introducing pMasterPalette.
Used instead of pLocalPalette when attempting to determine objective truths, such as "the colours of this gif without color profile modification" and "what indicies should this colormap remap to". Also, made f_wipe.c's paldiv only get calculated once.
This commit is contained in:
parent
cfd47d33e9
commit
d669a4e84a
6 changed files with 46 additions and 58 deletions
|
@ -86,7 +86,7 @@ INT32 lastwipetic = 0;
|
|||
static UINT8 *wipe_scr_start; //screen 3
|
||||
static UINT8 *wipe_scr_end; //screen 4
|
||||
static UINT8 *wipe_scr; //screen 0 (main drawing)
|
||||
static fixed_t paldiv;
|
||||
static fixed_t paldiv = 0;
|
||||
|
||||
/** Create fademask_t from lump
|
||||
*
|
||||
|
@ -145,7 +145,7 @@ static fademask_t *F_GetFadeMask(UINT8 masknum, UINT8 scrnnum) {
|
|||
while (lsize--)
|
||||
{
|
||||
// Determine pixel to use from fademask
|
||||
pcolor = &pLocalPalette[*lump++];
|
||||
pcolor = &pMasterPalette[*lump++];
|
||||
*mask++ = FixedDiv((pcolor->s.red+1)<<FRACBITS, paldiv)>>FRACBITS;
|
||||
}
|
||||
|
||||
|
@ -337,7 +337,8 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
|
|||
UINT8 wipeframe = 0;
|
||||
fademask_t *fmask;
|
||||
|
||||
paldiv = FixedDiv(257<<FRACBITS, 11<<FRACBITS);
|
||||
if (!paldiv)
|
||||
paldiv = FixedDiv(257<<FRACBITS, 11<<FRACBITS);
|
||||
|
||||
// Init the wipe
|
||||
WipeInAction = true;
|
||||
|
|
|
@ -427,21 +427,16 @@ static void GIF_headwrite(void)
|
|||
WRITEUINT8(p, 0x00);
|
||||
|
||||
// write color table
|
||||
if (cv_screenshot_colorprofile.value)
|
||||
{
|
||||
RGBA_t *pal = ((cv_screenshot_colorprofile.value)
|
||||
? pLocalPalette
|
||||
: pMasterPalette);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
WRITEUINT8(p, pLocalPalette[i].s.red);
|
||||
WRITEUINT8(p, pLocalPalette[i].s.green);
|
||||
WRITEUINT8(p, pLocalPalette[i].s.blue);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const UINT8 *pal = (UINT8 *)W_CacheLumpName(GetPalette(), PU_CACHE);
|
||||
for (i = 0; i < 256*3; i++)
|
||||
{
|
||||
WRITEUINT8(p, *pal); pal++;
|
||||
WRITEUINT8(p, pal[i].s.red);
|
||||
WRITEUINT8(p, pal[i].s.green);
|
||||
WRITEUINT8(p, pal[i].s.blue);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
46
src/m_misc.c
46
src/m_misc.c
|
@ -619,25 +619,18 @@ static void M_PNGhdr(png_structp png_ptr, png_infop png_info_ptr, PNG_CONST png_
|
|||
{
|
||||
png_colorp png_PLTE = png_malloc(png_ptr, sizeof(png_color)*256); //palette
|
||||
png_uint_16 i;
|
||||
if (cv_screenshot_colorprofile.value)
|
||||
|
||||
RGBA_t *pal = ((cv_screenshot_colorprofile.value)
|
||||
? pLocalPalette
|
||||
: pMasterPalette);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
png_PLTE[i].red = pLocalPalette[i].s.red;
|
||||
png_PLTE[i].green = pLocalPalette[i].s.green;
|
||||
png_PLTE[i].blue = pLocalPalette[i].s.blue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const png_byte *pal = (png_byte *)W_CacheLumpName(GetPalette(), PU_CACHE);
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
png_PLTE[i].red = *pal++;
|
||||
png_PLTE[i].green = *pal++;
|
||||
png_PLTE[i].blue = *pal++;
|
||||
}
|
||||
png_PLTE[i].red = pal[i].s.red;
|
||||
png_PLTE[i].green = pal[i].s.green;
|
||||
png_PLTE[i].blue = pal[i].s.blue;
|
||||
}
|
||||
|
||||
png_set_IHDR(png_ptr, png_info_ptr, width, height, 8, PNG_COLOR_TYPE_PALETTE,
|
||||
png_interlace, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||
png_write_info_before_PLTE(png_ptr, png_info_ptr);
|
||||
|
@ -1385,21 +1378,16 @@ static boolean WritePCXfile(const char *filename, const UINT8 *data, int width,
|
|||
*pack++ = 0x0c; // palette ID byte
|
||||
|
||||
// write color table
|
||||
if (cv_screenshot_colorprofile.value)
|
||||
{
|
||||
RGBA_t *pal = ((cv_screenshot_colorprofile.value)
|
||||
? pLocalPalette
|
||||
: pMasterPalette);
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
*pack++ = pLocalPalette[i].s.red;
|
||||
*pack++ = pLocalPalette[i].s.green;
|
||||
*pack++ = pLocalPalette[i].s.blue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const UINT8 *pal = (UINT8 *)W_CacheLumpName(GetPalette(), PU_CACHE);
|
||||
for (i = 0; i < 256*3; i++)
|
||||
{
|
||||
*pack++ = *pal++;
|
||||
*pack++ = pal[i].s.red;
|
||||
*pack++ = pal[i].s.green;
|
||||
*pack++ = pal[i].s.blue;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
20
src/r_data.c
20
src/r_data.c
|
@ -22,7 +22,7 @@
|
|||
#include "w_wad.h"
|
||||
#include "z_zone.h"
|
||||
#include "p_setup.h" // levelflats
|
||||
#include "v_video.h" // pLocalPalette
|
||||
#include "v_video.h" // pMasterPalette
|
||||
#include "dehacked.h"
|
||||
|
||||
#if defined (_WIN32) || defined (_WIN32_WCE)
|
||||
|
@ -1410,9 +1410,9 @@ INT32 R_CreateColormap(char *p1, char *p2, char *p3)
|
|||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
r = pLocalPalette[i].s.red;
|
||||
g = pLocalPalette[i].s.green;
|
||||
b = pLocalPalette[i].s.blue;
|
||||
r = pMasterPalette[i].s.red;
|
||||
g = pMasterPalette[i].s.green;
|
||||
b = pMasterPalette[i].s.blue;
|
||||
cbrightness = sqrt((r*r) + (g*g) + (b*b));
|
||||
|
||||
map[i][0] = (cbrightness * cmaskr) + (r * othermask);
|
||||
|
@ -1553,9 +1553,9 @@ void R_CreateColormap2(char *p1, char *p2, char *p3)
|
|||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
r = pLocalPalette[i].s.red;
|
||||
g = pLocalPalette[i].s.green;
|
||||
b = pLocalPalette[i].s.blue;
|
||||
r = pMasterPalette[i].s.red;
|
||||
g = pMasterPalette[i].s.green;
|
||||
b = pMasterPalette[i].s.blue;
|
||||
cbrightness = sqrt((r*r) + (g*g) + (b*b));
|
||||
|
||||
map[i][0] = (cbrightness * cmaskr) + (r * othermask);
|
||||
|
@ -1635,9 +1635,9 @@ static UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b)
|
|||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
dr = r - pLocalPalette[i].s.red;
|
||||
dg = g - pLocalPalette[i].s.green;
|
||||
db = b - pLocalPalette[i].s.blue;
|
||||
dr = r - pMasterPalette[i].s.red;
|
||||
dg = g - pMasterPalette[i].s.green;
|
||||
db = b - pMasterPalette[i].s.blue;
|
||||
distortion = dr*dr + dg*dg + db*db;
|
||||
if (distortion < bestdistortion)
|
||||
{
|
||||
|
|
|
@ -111,6 +111,7 @@ consvar_t cv_grmd2 = {"gr_md2", "Off", CV_SAVE, CV_MD2, NULL, 0, NULL, NULL, 0,
|
|||
|
||||
// local copy of the palette for V_GetColor()
|
||||
RGBA_t *pLocalPalette = NULL;
|
||||
RGBA_t *pMasterPalette = NULL;
|
||||
|
||||
/*
|
||||
The following was an extremely helpful resource when developing my Colour Cube LUT.
|
||||
|
@ -337,16 +338,18 @@ static void LoadPalette(const char *lumpname)
|
|||
UINT8 *pal;
|
||||
|
||||
Z_Free(pLocalPalette);
|
||||
Z_Free(pMasterPalette);
|
||||
|
||||
pLocalPalette = Z_Malloc(sizeof (*pLocalPalette)*palsize, PU_STATIC, NULL);
|
||||
pMasterPalette = Z_Malloc(sizeof (*pMasterPalette)*palsize, PU_STATIC, NULL);
|
||||
|
||||
pal = W_CacheLumpNum(lumpnum, PU_CACHE);
|
||||
for (i = 0; i < palsize; i++)
|
||||
{
|
||||
pLocalPalette[i].s.red = correctiontable[*pal++];
|
||||
pLocalPalette[i].s.green = correctiontable[*pal++];
|
||||
pLocalPalette[i].s.blue = correctiontable[*pal++];
|
||||
pLocalPalette[i].s.alpha = 0xFF;
|
||||
pMasterPalette[i].s.red = pLocalPalette[i].s.red = correctiontable[*pal++];
|
||||
pMasterPalette[i].s.green = pLocalPalette[i].s.green = correctiontable[*pal++];
|
||||
pMasterPalette[i].s.blue = pLocalPalette[i].s.blue = correctiontable[*pal++];
|
||||
pMasterPalette[i].s.alpha = pLocalPalette[i].s.alpha = 0xFF;
|
||||
|
||||
// lerp of colour cubing!
|
||||
if (cube)
|
||||
|
|
|
@ -45,6 +45,7 @@ const char *R_GetPalname(UINT16 num);
|
|||
const char *GetPalette(void);
|
||||
|
||||
extern RGBA_t *pLocalPalette;
|
||||
extern RGBA_t *pMasterPalette;
|
||||
|
||||
// Retrieve the ARGB value from a palette color index
|
||||
#define V_GetColor(color) (pLocalPalette[color&0xFF])
|
||||
|
|
Loading…
Reference in a new issue