r_lightmap_saturation
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1024 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
8e0c688b58
commit
641986a0ee
5 changed files with 84 additions and 2 deletions
|
@ -1545,8 +1545,72 @@ qbyte *ReadBMPFile(qbyte *buf, int length, int *width, int *height)
|
||||||
return NULL;
|
return NULL;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
// saturate function, stolen from jitspoe
|
||||||
|
void SaturateR8G8B8(qbyte *data, int size, float sat)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
float r, g, b, v;
|
||||||
|
|
||||||
|
if (sat > 1)
|
||||||
|
{
|
||||||
|
for(i=0; i < size; i+=3)
|
||||||
|
{
|
||||||
|
r = data[i];
|
||||||
|
g = data[i+1];
|
||||||
|
b = data[i+2];
|
||||||
|
|
||||||
|
v = r * 0.30 + g * 0.59 + b * 0.11;
|
||||||
|
r = v + (r - v) * sat;
|
||||||
|
g = v + (g - v) * sat;
|
||||||
|
b = v + (b - v) * sat;
|
||||||
|
|
||||||
|
// bounds check
|
||||||
|
if (r < 0)
|
||||||
|
r = 0;
|
||||||
|
else if (r > 255)
|
||||||
|
r = 255;
|
||||||
|
|
||||||
|
if (g < 0)
|
||||||
|
g = 0;
|
||||||
|
else if (g > 255)
|
||||||
|
g = 255;
|
||||||
|
|
||||||
|
if (b < 0)
|
||||||
|
b = 0;
|
||||||
|
else if (b > 255)
|
||||||
|
b = 255;
|
||||||
|
|
||||||
|
// scale down to avoid overbright lightmaps
|
||||||
|
v = v / (r * 0.30 + g * 0.59 + b * 0.11);
|
||||||
|
if (v > 1)
|
||||||
|
v = 1;
|
||||||
|
else
|
||||||
|
v *= v;
|
||||||
|
|
||||||
|
data[i] = r*v;
|
||||||
|
data[i+1] = g*v;
|
||||||
|
data[i+2] = b*v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // avoid bounds check for desaturation
|
||||||
|
{
|
||||||
|
if (sat < 0)
|
||||||
|
sat = 0;
|
||||||
|
|
||||||
|
for(i=0; i < size; i+=3)
|
||||||
|
{
|
||||||
|
r = data[i];
|
||||||
|
g = data[i+1];
|
||||||
|
b = data[i+2];
|
||||||
|
|
||||||
|
v = r * 0.30 + g * 0.59 + b * 0.11;
|
||||||
|
|
||||||
|
data[i] = v + (r - v) * sat;
|
||||||
|
data[i+1] = v + (g - v) * sat;
|
||||||
|
data[i+2] = v + (b - v) * sat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void BoostGamma(qbyte *rgba, int width, int height)
|
void BoostGamma(qbyte *rgba, int width, int height)
|
||||||
{
|
{
|
||||||
|
|
|
@ -290,6 +290,7 @@ qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height);
|
||||||
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out);
|
qbyte *ReadPCXPalette(qbyte *buf, int len, qbyte *out);
|
||||||
|
|
||||||
void BoostGamma(qbyte *rgba, int width, int height);
|
void BoostGamma(qbyte *rgba, int width, int height);
|
||||||
|
void SaturateR8G8B8(qbyte *data, int size, float sat);
|
||||||
|
|
||||||
void CL_NewDlightRGB (int key, float x, float y, float z, float radius, float time,
|
void CL_NewDlightRGB (int key, float x, float y, float z, float radius, float time,
|
||||||
float r, float g, float b);
|
float r, float g, float b);
|
||||||
|
@ -337,7 +338,7 @@ extern cvar_t gl_playermip;
|
||||||
extern cvar_t r_palconvbits;
|
extern cvar_t r_palconvbits;
|
||||||
extern cvar_t r_palconvwrite;
|
extern cvar_t r_palconvwrite;
|
||||||
|
|
||||||
|
extern cvar_t r_lightmap_saturation;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
RSPEED_TOTALREFRESH,
|
RSPEED_TOTALREFRESH,
|
||||||
|
|
|
@ -208,6 +208,8 @@ cvar_t r_transtablewrite = {"r_transtablewrite", "1"};
|
||||||
cvar_t r_palconvbits = {"r_palconvbits", "565"};
|
cvar_t r_palconvbits = {"r_palconvbits", "565"};
|
||||||
cvar_t r_palconvwrite = {"r_palconvwrite", "1"};
|
cvar_t r_palconvwrite = {"r_palconvwrite", "1"};
|
||||||
|
|
||||||
|
cvar_t r_lightmap_saturation = {"r_lightmap_saturation", "1"};
|
||||||
|
|
||||||
extern cvar_t bul_text1;
|
extern cvar_t bul_text1;
|
||||||
extern cvar_t bul_text2;
|
extern cvar_t bul_text2;
|
||||||
extern cvar_t bul_text3;
|
extern cvar_t bul_text3;
|
||||||
|
@ -240,6 +242,7 @@ cvar_t gl_lerpimages = {"gl_lerpimages", "1"};
|
||||||
extern cvar_t r_waterlayers;
|
extern cvar_t r_waterlayers;
|
||||||
cvar_t gl_triplebuffer = {"gl_triplebuffer", "1", NULL, CVAR_ARCHIVE};
|
cvar_t gl_triplebuffer = {"gl_triplebuffer", "1", NULL, CVAR_ARCHIVE};
|
||||||
cvar_t vid_hardwaregamma = {"vid_hardwaregamma", "1", NULL, CVAR_ARCHIVE};
|
cvar_t vid_hardwaregamma = {"vid_hardwaregamma", "1", NULL, CVAR_ARCHIVE};
|
||||||
|
|
||||||
void GLRenderer_Init(void)
|
void GLRenderer_Init(void)
|
||||||
{
|
{
|
||||||
extern cvar_t gl_contrast;
|
extern cvar_t gl_contrast;
|
||||||
|
@ -432,7 +435,6 @@ void Renderer_Init(void)
|
||||||
SWRenderer_Init();
|
SWRenderer_Init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//but register ALL vid_ commands.
|
//but register ALL vid_ commands.
|
||||||
Cvar_Register (&vid_wait, VIDCOMMANDGROUP);
|
Cvar_Register (&vid_wait, VIDCOMMANDGROUP);
|
||||||
Cvar_Register (&vid_nopageflip, VIDCOMMANDGROUP);
|
Cvar_Register (&vid_nopageflip, VIDCOMMANDGROUP);
|
||||||
|
@ -501,6 +503,7 @@ void Renderer_Init(void)
|
||||||
Cvar_Register (&r_netgraph, SCREENOPTIONS);
|
Cvar_Register (&r_netgraph, SCREENOPTIONS);
|
||||||
|
|
||||||
Cvar_Register (&r_dynamic, GRAPHICALNICETIES);
|
Cvar_Register (&r_dynamic, GRAPHICALNICETIES);
|
||||||
|
Cvar_Register (&r_lightmap_saturation, GRAPHICALNICETIES);
|
||||||
|
|
||||||
Cvar_Register (&r_nolerp, GRAPHICALNICETIES);
|
Cvar_Register (&r_nolerp, GRAPHICALNICETIES);
|
||||||
Cvar_Register (&r_nolightdir, GRAPHICALNICETIES);
|
Cvar_Register (&r_nolightdir, GRAPHICALNICETIES);
|
||||||
|
|
|
@ -1486,7 +1486,15 @@ void GLMod_LoadLighting (lump_t *l)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (loadmodel->lightdata)
|
if (loadmodel->lightdata)
|
||||||
|
{
|
||||||
|
if (loadmodel->rgblighting && r_lightmap_saturation.value != 1.0f)
|
||||||
|
{
|
||||||
|
// desaturate lightmap according to cvar
|
||||||
|
SaturateR8G8B8(loadmodel->lightdata, l->filelen, r_lightmap_saturation.value);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
loadmodel->lightdata = Hunk_AllocName ( l->filelen, loadname);
|
loadmodel->lightdata = Hunk_AllocName ( l->filelen, loadname);
|
||||||
|
|
||||||
|
@ -1500,6 +1508,9 @@ void GLMod_LoadLighting (lump_t *l)
|
||||||
{
|
{
|
||||||
*out++ = lmgamma[*in++];
|
*out++ = lmgamma[*in++];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (loadmodel->rgblighting && r_lightmap_saturation.value != 1.0f)
|
||||||
|
SaturateR8G8B8(loadmodel->lightdata, l->filelen, r_lightmap_saturation.value);
|
||||||
}
|
}
|
||||||
//memcpy (loadmodel->lightdata, mod_base + l->fileofs, l->filelen);
|
//memcpy (loadmodel->lightdata, mod_base + l->fileofs, l->filelen);
|
||||||
}
|
}
|
||||||
|
|
|
@ -901,6 +901,9 @@ void SWMod_LoadLighting (lump_t *l)
|
||||||
dest+=3;
|
dest+=3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (r_lightmap_saturation.value != 1.0f)
|
||||||
|
SaturateR8G8B8(loadmodel->lightdata, l->filelen, r_lightmap_saturation.value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue