soft: add fullcolor light apply

This commit is contained in:
Denis Pauk 2022-03-19 16:28:13 +02:00
parent 15553b9971
commit a6839bc584
3 changed files with 38 additions and 9 deletions

View file

@ -582,12 +582,14 @@ void RE_Draw_FadeScreen (void);
void LoadPCX (char *filename, byte **pic, byte **palette, int *width, int *height);
extern byte d_8to24table[256 * 4];
void R_InitImages(void);
void R_ShutdownImages(void);
image_t *R_FindImage(char *name, imagetype_t type);
byte *Get_BestImageSize(const image_t *image, int *req_width, int *req_height);
void R_FreeUnusedImages(void);
qboolean R_ImageHasFreeSpace(void);
pixel_t R_ApplyLight(pixel_t pix, const int light[3]);
void R_InitSkyBox(model_t *loadmodel);
void R_IMFlatShadedQuad( const vec3_t a, const vec3_t b, const vec3_t c, const vec3_t d, int color, float alpha );

View file

@ -323,7 +323,34 @@ R_LoadWal (char *name, imagetype_t type)
return image;
}
static unsigned char *d_16to8table = NULL; // 16 to 8 bit conversion table
static byte *d_16to8table = NULL; // 16 to 8 bit conversion table
pixel_t
R_ApplyLight(pixel_t pix, const int light[3])
{
pixel_t i_r, i_g, i_b;
byte b_r, b_g, b_b;
int i_c;
/* get index of color component of each component */
i_r = vid_colormap[(light[0] & 0xFF00) + pix];
i_g = vid_colormap[(light[1] & 0xFF00) + pix];
i_b = vid_colormap[(light[2] & 0xFF00) + pix];
/* get color component for each component */
b_r = d_8to24table[i_r * 4 + 0];
b_g = d_8to24table[i_g * 4 + 1];
b_b = d_8to24table[i_b * 4 + 2];
/* convert back to indexed color */
b_r = ( b_r >> 3 ) & 31;
b_g = ( b_g >> 2 ) & 63;
b_b = ( b_b >> 3 ) & 31;
i_c = b_r | ( b_g << 5 ) | ( b_b << 11 );
return d_16to8table[i_c & 0xFFFF];
}
static void
R_Convert32To8bit(const unsigned char* pic_in, pixel_t* pic_out, size_t size)

View file

@ -51,7 +51,7 @@ static qboolean palette_changed;
refimport_t ri;
static unsigned d_8to24table[256];
byte d_8to24table[256 * 4];
char skyname[MAX_QPATH];
vec3_t skyaxis;
@ -1230,7 +1230,7 @@ R_CalcPalette (void)
if (modified)
{ // set back to default
modified = false;
R_GammaCorrectAndSetPalette( ( const unsigned char * ) d_8to24table );
R_GammaCorrectAndSetPalette( d_8to24table );
return;
}
return;
@ -1246,7 +1246,7 @@ R_CalcPalette (void)
one_minus_alpha = (1.0 - alpha);
in = (byte *)d_8to24table;
in = d_8to24table;
out = palette[0];
for (i=0 ; i<256 ; i++, in+=4, out+=4)
{
@ -1439,7 +1439,7 @@ R_InitGraphics( int width, int height )
R_InitCaches();
R_GammaCorrectAndSetPalette((const unsigned char *)d_8to24table);
R_GammaCorrectAndSetPalette(d_8to24table);
}
static rserr_t SWimp_SetMode(int *pwidth, int *pheight, int mode, int fullscreen);
@ -1466,7 +1466,7 @@ RE_BeginFrame( float camera_separation )
if ( vid_gamma->modified || sw_overbrightbits->modified )
{
Draw_BuildGammaTable();
R_GammaCorrectAndSetPalette((const unsigned char * )d_8to24table);
R_GammaCorrectAndSetPalette(d_8to24table);
// we need redraw everything
VID_WholeDamageBuffer();
// and backbuffer should be zeroed
@ -1602,7 +1602,7 @@ RE_SetPalette(const unsigned char *palette)
}
else
{
R_GammaCorrectAndSetPalette((const unsigned char *)d_8to24table);
R_GammaCorrectAndSetPalette(d_8to24table);
}
}
@ -1759,7 +1759,7 @@ Draw_GetPalette (void)
ri.Sys_Error (ERR_FATAL, "Couldn't load pics/colormap.pcx");
vid_alphamap = vid_colormap + 64*256;
out = (byte *)d_8to24table;
out = d_8to24table;
for (i=0 ; i<256 ; i++, out+=4)
{
int r, g, b;
@ -2409,7 +2409,7 @@ SWimp_CreateRender(int width, int height)
memset(sw_state.currentpalette, 0, sizeof(sw_state.currentpalette));
R_GammaCorrectAndSetPalette( ( const unsigned char * ) d_8to24table );
R_GammaCorrectAndSetPalette( d_8to24table );
}
// this is only here so the functions in q_shared.c and q_shwin.c can link