vk: fix vid_gamma

This commit is contained in:
Denis Pauk 2020-01-19 18:25:28 +02:00 committed by Yamagi
parent 8b70b55e17
commit eb935da156
3 changed files with 50 additions and 25 deletions

View file

@ -143,6 +143,7 @@ extern cvar_t *r_mode;
extern cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level
extern cvar_t *vk_overbrightbits;
extern cvar_t *vk_validation;
extern cvar_t *vk_bitdepth;
extern cvar_t *vk_log;

View file

@ -1655,8 +1655,9 @@ Vk_InitImages
*/
void Vk_InitImages (void)
{
int i, j;
float g = vid_gamma->value;
int i, j;
float g;
float overbright;
registration_sequence = 1;
@ -1668,27 +1669,6 @@ void Vk_InitImages (void)
vk_state.inverse_intensity = 1 / intensity->value;
Draw_GetPalette();
for (i = 0; i < 256; i++)
{
if (g == 1)
{
gammatable[i] = i;
}
else
{
float inf;
inf = 255 * pow((i + 0.5) / 255.5, g) + 0.5;
if (inf < 0)
inf = 0;
if (inf > 255)
inf = 255;
gammatable[i] = inf;
}
}
for (i = 0; i<256; i++)
{
j = i * intensity->value;
@ -1696,6 +1676,46 @@ void Vk_InitImages (void)
j = 255;
intensitytable[i] = j;
}
Draw_GetPalette();
overbright = vk_overbrightbits->value;
if(overbright < 0.5)
overbright = 0.5;
if(overbright > 4.0)
overbright = 4.0;
g = (2.1 - vid_gamma->value);
if (g == 1.0)
{
for (i=0 ; i<256 ; i++) {
int inf;
inf = i * overbright;
if (inf < 0)
inf = 0;
if (inf > 255)
inf = 255;
gammatable[i] = inf;
}
}
else
for (i=0 ; i<256 ; i++)
{
int inf;
inf = (255 * pow ( (i+0.5)/255.5 , g ) + 0.5) * overbright;
if (inf < 0)
inf = 0;
if (inf > 255)
inf = 255;
gammatable[i] = inf;
}
}
/*

View file

@ -93,6 +93,7 @@ cvar_t *r_mode;
cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level
cvar_t *vk_overbrightbits;
cvar_t *vk_validation;
cvar_t *vk_bitdepth;
cvar_t *vk_picmip;
@ -971,7 +972,7 @@ void R_SetVulkan2D (void)
// skip this step if we're in player config screen since it uses RP_UI and draws directly to swapchain
if (!(r_newrefdef.rdflags & RDF_NOWORLDMODEL))
{
float pushConsts[] = { vk_postprocess->value, vid_gamma->value };
float pushConsts[] = { vk_postprocess->value, (2.1 - vid_gamma->value)};
vkCmdPushConstants(vk_activeCmdbuffer, vk_postprocessPipeline.layout, VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(pushConsts), pushConsts);
vkCmdBindDescriptorSets(vk_activeCmdbuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, vk_postprocessPipeline.layout, 0, 1, &vk_colorbufferWarp.descriptorSet, 0, NULL);
QVk_BindPipeline(&vk_postprocessPipeline);
@ -1043,6 +1044,8 @@ void R_Register( void )
r_lightlevel = ri.Cvar_Get("r_lightlevel", "0", 0);
r_mode = ri.Cvar_Get("r_mode", "11", CVAR_ARCHIVE);
r_vsync = ri.Cvar_Get("r_vsync", "0", CVAR_ARCHIVE);
vk_overbrightbits = ri.Cvar_Get("vk_overbrightbits", "1.0", CVAR_ARCHIVE);
#if defined(_DEBUG)
vk_validation = ri.Cvar_Get("vk_validation", "2", 0);
#else
@ -1154,6 +1157,7 @@ qboolean R_SetMode (void)
vk_vsync->modified = false;
vk_device_idx->modified = false;
vk_picmip->modified = false;
vk_overbrightbits->modified = false;
// refresh texture samplers
vk_texturemode->modified = true;
vk_lmaptexturemode->modified = true;
@ -1287,7 +1291,7 @@ void R_BeginFrame( float camera_separation )
*/
if (r_mode->modified || vid_fullscreen->modified || vk_msaa->modified || vk_clear->modified || vk_picmip->modified ||
vk_validation->modified || vk_texturemode->modified || vk_lmaptexturemode->modified || vk_aniso->modified || vid_gamma->modified ||
vk_mip_nearfilter->modified || vk_sampleshading->modified || vk_vsync->modified || vk_device_idx->modified)
vk_mip_nearfilter->modified || vk_sampleshading->modified || vk_vsync->modified || vk_device_idx->modified || vk_overbrightbits->modified)
{
if (vk_texturemode->modified || vk_lmaptexturemode->modified || vk_aniso->modified)
{