]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - palette.c
newline change?
[xonotic/darkplaces.git] / palette.c
index 4456930ea8b2eebc38ecc0a6563de9ffd046870d..6b4aa922186cc04150160269d18809a5c01f7c8d 100644 (file)
--- a/palette.c
+++ b/palette.c
@@ -2,23 +2,23 @@
 #include "quakedef.h"
 
 unsigned int d_8to24table[256];
-//byte d_15to8table[32768];
-byte host_basepal[768];
-byte texgamma[256];
+//qbyte d_15to8table[32768];
+qbyte host_basepal[768];
+qbyte texgamma[256];
 
-static float texture_gamma = 1.0;
-
-cvar_t vid_gamma = {CVAR_SAVE, "vid_gamma", "1"};
-cvar_t vid_brightness = {CVAR_SAVE, "vid_brightness", "1"};
-cvar_t vid_contrast = {CVAR_SAVE, "vid_contrast", "1"};
+cvar_t v_gamma = {CVAR_SAVE, "v_gamma", "1"};
+cvar_t v_contrast = {CVAR_SAVE, "v_contrast", "1"};
+cvar_t v_brightness = {CVAR_SAVE, "v_brightness", "0"};
+cvar_t v_overbrightbits = {CVAR_SAVE, "v_overbrightbits", "0"};
+cvar_t v_hwgamma = {0, "v_hwgamma", "1"};
 
 void Palette_Setup8to24(void)
 {
-       byte *in, *out;
+       qbyte *in, *out;
        unsigned short i;
 
        in = host_basepal;
-       out = (byte *) d_8to24table; // d_8to24table is accessed as 32bit for speed reasons, but is created as 8bit bytes
+       out = (qbyte *) d_8to24table; // d_8to24table is accessed as 32bit for speed reasons, but is created as 8bit bytes
        for (i=0 ; i<255 ; i++)
        {
                *out++ = *in++;
@@ -32,7 +32,7 @@ void Palette_Setup8to24(void)
 /*
 void   Palette_Setup15to8(void)
 {
-       byte    *pal;
+       qbyte   *pal;
        unsigned r,g,b;
        unsigned v;
        int     r1,g1,b1;
@@ -62,7 +62,7 @@ void  Palette_Setup15to8(void)
 }
 */
 
-void BuildGammaTable8(float prescale, float gamma, float scale, float base, byte *out)
+void BuildGammaTable8(float prescale, float gamma, float scale, float base, qbyte *out)
 {
        int i, adjusted;
        double invgamma, d;
@@ -116,86 +116,71 @@ void BuildGammaTable16(float prescale, float gamma, float scale, float base, uns
        }
 }
 
-void Texture_Gamma (void)
-{
-       int i, adjusted;
-       double invgamma;
-
-       texture_gamma = 1;
-       if ((i = COM_CheckParm("-gamma")))
-               texture_gamma = atof(com_argv[i+1]);
-       texture_gamma = bound(0.1, texture_gamma, 5.0);
-
-       if (texture_gamma == 1) // LordHavoc: dodge the math
-       {
-               for (i = 0;i < 256;i++)
-                       texgamma[i] = i;
-       }
-       else
-       {
-               invgamma = 1.0 / texture_gamma;
-               for (i = 0;i < 256;i++)
-               {
-                       adjusted = (int) ((255.0 * pow((double) i / 255.0, invgamma)) + 0.5);
-                       texgamma[i] = bound(0, adjusted, 255);
-               }
-       }
-}
-
 qboolean hardwaregammasupported = false;
 void VID_UpdateGamma(qboolean force)
 {
-       static float cachegamma = -1, cachebrightness = -1, cachecontrast = -1, cachelighthalf = -1;
+       static float cachegamma = -1, cachebrightness = -1, cachecontrast = -1;
+       static int cacheoverbrightbits = -1, cachehwgamma = -1;
 
        // LordHavoc: don't mess with gamma tables if running dedicated
-       if (isDedicated)
+       if (cls.state == ca_dedicated)
                return;
 
-       if (!force && vid_gamma.value == cachegamma && vid_brightness.value == cachebrightness && vid_contrast.value == cachecontrast && lighthalf == cachelighthalf)
+       if (!force
+        && v_gamma.value == cachegamma
+        && v_contrast.value == cachecontrast
+        && v_brightness.value == cachebrightness
+        && v_overbrightbits.integer == cacheoverbrightbits
+        && v_hwgamma.value == cachehwgamma)
                return;
 
-       if (vid_gamma.value < 0.1)
-               Cvar_SetValue("vid_gamma", 0.1);
-       if (vid_gamma.value > 5.0)
-               Cvar_SetValue("vid_gamma", 5.0);
+       if (v_gamma.value < 0.1)
+               Cvar_SetValue("v_gamma", 0.1);
+       if (v_gamma.value > 5.0)
+               Cvar_SetValue("v_gamma", 5.0);
 
-       if (vid_brightness.value < 1.0)
-               Cvar_SetValue("vid_brightness", 1.0);
-       if (vid_brightness.value > 5.0)
-               Cvar_SetValue("vid_brightness", 5.0);
+       if (v_contrast.value < 0.5)
+               Cvar_SetValue("v_contrast", 0.5);
+       if (v_contrast.value > 5.0)
+               Cvar_SetValue("v_contrast", 5.0);
 
-       if (vid_contrast.value < 0.2)
-               Cvar_SetValue("vid_contrast", 0.2);
-       if (vid_contrast.value > 1)
-               Cvar_SetValue("vid_contrast", 1);
+       if (v_brightness.value < 0)
+               Cvar_SetValue("v_brightness", 0);
+       if (v_brightness.value > 0.8)
+               Cvar_SetValue("v_brightness", 0.8);
 
-       cachegamma = vid_gamma.value;
-       cachebrightness = vid_brightness.value;
-       cachecontrast = vid_contrast.value;
-       cachelighthalf = lighthalf;
+       cachegamma = v_gamma.value;
+       cachecontrast = v_contrast.value;
+       cachebrightness = v_brightness.value;
+       cacheoverbrightbits = v_overbrightbits.integer;
 
-       hardwaregammasupported = VID_SetGamma((cachelighthalf ? 2.0f : 1.0f), cachegamma, cachebrightness * cachecontrast, 1 - cachecontrast);
+       hardwaregammasupported = VID_SetGamma((float) (1 << cacheoverbrightbits), cachegamma, cachecontrast, cachebrightness);
        if (!hardwaregammasupported)
+       {
                Con_Printf("Hardware gamma not supported.\n");
+               Cvar_SetValue("v_hwgamma", 0);
+       }
+       cachehwgamma = v_hwgamma.integer;
 }
 
 void Gamma_Init(void)
 {
-       Cvar_RegisterVariable(&vid_gamma);
-       Cvar_RegisterVariable(&vid_brightness);
-       Cvar_RegisterVariable(&vid_contrast);
+       Cvar_RegisterVariable(&v_gamma);
+       Cvar_RegisterVariable(&v_brightness);
+       Cvar_RegisterVariable(&v_contrast);
+       Cvar_RegisterVariable(&v_hwgamma);
+       Cvar_RegisterVariable(&v_overbrightbits);
 }
 
 void Palette_Init(void)
 {
-       byte *pal;
-       pal = (byte *)COM_LoadMallocFile ("gfx/palette.lmp", false);
+       qbyte *pal;
+       pal = (qbyte *)COM_LoadFile ("gfx/palette.lmp", false);
        if (!pal)
                Sys_Error ("Couldn't load gfx/palette.lmp");
        memcpy(host_basepal, pal, 765);
-       qfree(pal);
+       Mem_Free(pal);
        host_basepal[765] = host_basepal[766] = host_basepal[767] = 0; // LordHavoc: force the transparent color to black
        Palette_Setup8to24();
 //     Palette_Setup15to8();
-       Texture_Gamma();
 }