summaryrefslogtreecommitdiff
path: root/src/renderergl2
diff options
context:
space:
mode:
authorSmileTheory <SmileTheory@gmail.com>2014-04-16 05:26:03 -0700
committerTim Angus <tim@ngus.net>2014-06-17 17:43:42 +0100
commiteadaba4913c24cfc8b96d813a3017c9081ad0dbd (patch)
treeddcf4fdf6ca4ccfa0f32a4874d6760acf2e7828c /src/renderergl2
parentd9ed6a7cf6f7091c8c7e44df93b9fa3e1f772643 (diff)
OpenGL2: Remove sRGB support, replace with gamma cvars.
Diffstat (limited to 'src/renderergl2')
-rw-r--r--src/renderergl2/glsl/calclevels4x_fp.glsl9
-rw-r--r--src/renderergl2/glsl/lightall_fp.glsl113
-rw-r--r--src/renderergl2/glsl/lightall_vp.glsl8
-rw-r--r--src/renderergl2/glsl/tonemap_fp.glsl9
-rw-r--r--src/renderergl2/tr_extensions.c46
-rw-r--r--src/renderergl2/tr_glsl.c12
-rw-r--r--src/renderergl2/tr_image.c124
-rw-r--r--src/renderergl2/tr_init.c10
-rw-r--r--src/renderergl2/tr_local.h9
-rw-r--r--src/renderergl2/tr_main.c2
-rw-r--r--src/renderergl2/tr_shader.c15
11 files changed, 136 insertions, 221 deletions
diff --git a/src/renderergl2/glsl/calclevels4x_fp.glsl b/src/renderergl2/glsl/calclevels4x_fp.glsl
index c8cf06c7..1de59e9f 100644
--- a/src/renderergl2/glsl/calclevels4x_fp.glsl
+++ b/src/renderergl2/glsl/calclevels4x_fp.glsl
@@ -9,10 +9,15 @@ const vec3 LUMINANCE_VECTOR = vec3(0.2125, 0.7154, 0.0721); //vec3(0.299, 0.5
vec3 GetValues(vec2 offset, vec3 current)
{
- vec3 minAvgMax;
- vec2 tc = var_TexCoords + u_InvTexRes * offset; minAvgMax = texture2D(u_TextureMap, tc).rgb;
+ vec2 tc = var_TexCoords + u_InvTexRes * offset;
+ vec3 minAvgMax = texture2D(u_TextureMap, tc).rgb;
#ifdef FIRST_PASS
+
+ #if defined(r_framebufferGamma)
+ minAvgMax = pow(minAvgMax, vec3(r_framebufferGamma));
+ #endif
+
float lumi = max(dot(LUMINANCE_VECTOR, minAvgMax), 0.000001);
float loglumi = clamp(log2(lumi), -10.0, 10.0);
minAvgMax = vec3(loglumi * 0.05 + 0.5);
diff --git a/src/renderergl2/glsl/lightall_fp.glsl b/src/renderergl2/glsl/lightall_fp.glsl
index 0f50a038..7c62d664 100644
--- a/src/renderergl2/glsl/lightall_fp.glsl
+++ b/src/renderergl2/glsl/lightall_fp.glsl
@@ -65,10 +65,6 @@ varying vec3 var_ViewDir;
#endif
#endif
-#if defined(USE_LIGHT_VERTEX) && !defined(USE_FAST_LIGHT)
-varying vec3 var_LightColor;
-#endif
-
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4 var_LightDir;
#endif
@@ -329,9 +325,9 @@ mat3 cotangent_frame( vec3 N, vec3 p, vec2 uv )
void main()
{
- vec3 viewDir;
+ vec3 viewDir, lightColor, ambientColor;
vec3 L, N, E, H;
- float NL, NH, NE, EH;
+ float NL, NH, NE, EH, attenuation;
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
#if defined(USE_VERT_TANGENT_SPACE)
@@ -352,16 +348,10 @@ void main()
#endif
#if defined(USE_LIGHTMAP)
- vec4 lightSample = texture2D(u_LightMap, var_TexCoords.zw);
- vec3 lightColor = lightSample.rgb;
+ vec4 lightmapColor = texture2D(u_LightMap, var_TexCoords.zw);
#if defined(RGBM_LIGHTMAP)
- lightColor *= lightSample.a;
+ lightmapColor.rgb *= lightmapColor.a;
#endif
-#elif defined(USE_LIGHT_VECTOR) && !defined(USE_FAST_LIGHT)
- vec3 lightColor = u_DirectedLight * CalcLightAttenuation(float(var_LightDir.w > 0.0), var_LightDir.w / sqrLightDist);
- vec3 ambientColor = u_AmbientLight;
-#elif defined(USE_LIGHT_VERTEX) && !defined(USE_FAST_LIGHT)
- vec3 lightColor = var_LightColor;
#endif
vec2 texCoords = var_TexCoords.xy;
@@ -375,12 +365,22 @@ void main()
#endif
vec4 diffuse = texture2D(u_DiffuseMap, texCoords);
-#if defined(USE_GAMMA2_TEXTURES)
- diffuse.rgb *= diffuse.rgb;
-#endif
-
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
+ #if defined(USE_LIGHTMAP)
+ lightColor = lightmapColor.rgb * var_Color.rgb;
+ ambientColor = vec3(0.0);
+ attenuation = 1.0;
+ #elif defined(USE_LIGHT_VECTOR)
+ lightColor = u_DirectedLight * var_Color.rgb;
+ ambientColor = u_AmbientLight * var_Color.rgb;
+ attenuation = CalcLightAttenuation(float(var_LightDir.w > 0.0), var_LightDir.w / sqrLightDist);
+ #elif defined(USE_LIGHT_VERTEX)
+ lightColor = var_Color.rgb;
+ ambientColor = vec3(0.0);
+ attenuation = 1.0;
+ #endif
+
#if defined(USE_NORMALMAP)
#if defined(SWIZZLE_NORMALMAP)
N.xy = texture2D(u_NormalMap, texCoords).ag - vec2(0.5);
@@ -416,8 +416,13 @@ void main()
#endif
#endif
+ #if defined(r_lightGamma)
+ lightColor = pow(lightColor, vec3(r_lightGamma));
+ ambientColor = pow(ambientColor, vec3(r_lightGamma));
+ #endif
+
#if defined(USE_LIGHTMAP) || defined(USE_LIGHT_VERTEX)
- vec3 ambientColor = lightColor;
+ ambientColor = lightColor;
float surfNL = clamp(dot(var_Normal.xyz, L), 0.0, 1.0);
// Scale the incoming light to compensate for the baked-in light angle
@@ -426,7 +431,7 @@ void main()
// Recover any unused light as ambient, in case attenuation is over 4x or
// light is below the surface
- ambientColor -= lightColor * surfNL;
+ ambientColor = clamp(ambientColor - lightColor * surfNL, 0.0, 1.0);
#endif
vec3 reflectance;
@@ -436,15 +441,17 @@ void main()
#if defined(USE_SPECULARMAP)
vec4 specular = texture2D(u_SpecularMap, texCoords);
- #if defined(USE_GAMMA2_TEXTURES)
- specular.rgb *= specular.rgb;
- #endif
#else
vec4 specular = vec4(1.0);
#endif
specular *= u_SpecularScale;
+ #if defined(r_materialGamma)
+ diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma));
+ specular.rgb = pow(specular.rgb, vec3(r_materialGamma));
+ #endif
+
float gloss = specular.a;
float shininess = exp2(gloss * 13.0);
@@ -482,7 +489,7 @@ void main()
#endif
#endif
- gl_FragColor.rgb = lightColor * reflectance * NL;
+ gl_FragColor.rgb = lightColor * reflectance * (attenuation * NL);
#if 0
vec3 aSpecular = EnvironmentBRDF(gloss, NE, specular.rgb);
@@ -506,19 +513,23 @@ void main()
// parallax corrected cubemap (cheaper trick)
// from http://seblagarde.wordpress.com/2012/09/29/image-based-lighting-approaches-and-parallax-corrected-cubemap/
- R += u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;
+ vec3 parallax = u_CubeMapInfo.xyz + u_CubeMapInfo.w * viewDir;
- vec3 cubeLightColor = textureCubeLod(u_CubeMap, R, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w;
+ vec3 cubeLightColor = textureCubeLod(u_CubeMap, R + parallax, 7.0 - gloss * 7.0).rgb * u_EnableTextures.w;
- #if defined(USE_LIGHTMAP)
- cubeLightColor *= lightSample.rgb;
- #elif defined (USE_LIGHT_VERTEX)
- cubeLightColor *= var_LightColor;
- #else
- cubeLightColor *= lightColor * NL + ambientColor;
- #endif
+ // normalize cubemap based on lowest mip (~diffuse)
+ // multiplying cubemap values by lighting below depends on either this or the cubemap being normalized at generation
+ //vec3 cubeLightDiffuse = max(textureCubeLod(u_CubeMap, N, 6.0).rgb, 0.5 / 255.0);
+ //cubeLightColor /= dot(cubeLightDiffuse, vec3(0.2125, 0.7154, 0.0721));
+
+ #if defined(r_framebufferGamma)
+ cubeLightColor = pow(cubeLightColor, vec3(r_framebufferGamma));
+ #endif
+
+ // multiply cubemap values by lighting
+ // not technically correct, but helps make reflections look less unnatural
+ //cubeLightColor *= lightColor * (attenuation * NL) + ambientColor;
- //gl_FragColor.rgb += diffuse.rgb * textureCubeLod(u_CubeMap, N, 7.0).rgb * u_EnableTextures.w;
gl_FragColor.rgb += cubeLightColor * reflectance;
#endif
@@ -541,25 +552,43 @@ void main()
reflectance = CalcDiffuse(diffuse.rgb, N, L2, E, NE, NL2, shininess);
reflectance += CalcSpecular(specular.rgb, NH2, NL2, NE, EH2, gloss, shininess);
- lightColor = u_PrimaryLightColor;
+ lightColor = u_PrimaryLightColor * var_Color.rgb;
- // enable when point lights are supported as primary lights
- //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), u_PrimaryLightDir.w / sqrLightDist);
+ #if defined(r_lightGamma)
+ lightColor = pow(lightColor, vec3(r_lightGamma));
+ #endif
#if defined(USE_SHADOWMAP)
lightColor *= shadowValue;
#endif
+ // enable when point lights are supported as primary lights
+ //lightColor *= CalcLightAttenuation(float(u_PrimaryLightDir.w > 0.0), u_PrimaryLightDir.w / sqrLightDist);
+
gl_FragColor.rgb += lightColor * reflectance * NL2;
#endif
-
- gl_FragColor.a = diffuse.a;
#else
- gl_FragColor = diffuse;
+ lightColor = var_Color.rgb;
+
#if defined(USE_LIGHTMAP)
- gl_FragColor.rgb *= lightColor;
+ lightColor *= lightmapColor.rgb;
#endif
+
+ #if defined(r_lightGamma)
+ lightColor = pow(lightColor, vec3(r_lightGamma));
+ #endif
+
+ #if defined(r_materialGamma)
+ diffuse.rgb = pow(diffuse.rgb, vec3(r_materialGamma));
+ #endif
+
+ gl_FragColor.rgb = diffuse.rgb * lightColor;
+
+#endif
+
+#if defined(r_framebufferGamma)
+ gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(1.0 / r_framebufferGamma));
#endif
- gl_FragColor *= var_Color;
+ gl_FragColor.a = diffuse.a * var_Color.a;
}
diff --git a/src/renderergl2/glsl/lightall_vp.glsl b/src/renderergl2/glsl/lightall_vp.glsl
index 2e1c899c..b9e839de 100644
--- a/src/renderergl2/glsl/lightall_vp.glsl
+++ b/src/renderergl2/glsl/lightall_vp.glsl
@@ -83,10 +83,6 @@ varying vec3 var_ViewDir;
#endif
#endif
-#if defined(USE_LIGHT_VERTEX) && !defined(USE_FAST_LIGHT)
-varying vec3 var_LightColor;
-#endif
-
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
varying vec4 var_LightDir;
#endif
@@ -216,10 +212,6 @@ void main()
#endif
var_Color = u_VertColor * attr_Color + u_BaseColor;
-#if defined(USE_LIGHT_VERTEX) && !defined(USE_FAST_LIGHT)
- var_LightColor = var_Color.rgb;
- var_Color.rgb = vec3(1.0);
-#endif
#if defined(USE_LIGHT_VECTOR) && defined(USE_FAST_LIGHT)
float sqrLightDist = dot(L, L);
diff --git a/src/renderergl2/glsl/tonemap_fp.glsl b/src/renderergl2/glsl/tonemap_fp.glsl
index 9b18de8a..4c914aca 100644
--- a/src/renderergl2/glsl/tonemap_fp.glsl
+++ b/src/renderergl2/glsl/tonemap_fp.glsl
@@ -32,6 +32,11 @@ vec3 FilmicTonemap(vec3 x)
void main()
{
vec4 color = texture2D(u_TextureMap, var_TexCoords) * u_Color;
+
+ #if defined(r_framebufferGamma)
+ color.rgb = pow(color.rgb, vec3(r_framebufferGamma));
+ #endif
+
vec3 minAvgMax = texture2D(u_LevelsMap, var_TexCoords).rgb;
vec3 logMinAvgMaxLum = clamp(minAvgMax * 20.0 - 10.0, -u_AutoExposureMinMax.y, -u_AutoExposureMinMax.x);
@@ -44,5 +49,9 @@ void main()
vec3 fWhite = 1.0 / FilmicTonemap(vec3(u_ToneMinAvgMaxLinear.z - u_ToneMinAvgMaxLinear.x));
color.rgb = FilmicTonemap(color.rgb) * fWhite;
+ #if defined(r_tonemapGamma)
+ color.rgb = pow(color.rgb, vec3(1.0 / r_tonemapGamma));
+ #endif
+
gl_FragColor = clamp(color, 0.0, 1.0);
}
diff --git a/src/renderergl2/tr_extensions.c b/src/renderergl2/tr_extensions.c
index 6b59de7c..4e73f66f 100644
--- a/src/renderergl2/tr_extensions.c
+++ b/src/renderergl2/tr_extensions.c
@@ -593,52 +593,6 @@ void GLimp_InitExtraExtensions()
ri.Printf(PRINT_ALL, result[2], extension);
}
- // GL_EXT_texture_sRGB
- extension = "GL_EXT_texture_sRGB";
- glRefConfig.textureSrgb = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- if (r_srgb->integer)
- glRefConfig.textureSrgb = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.textureSrgb], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
- // GL_EXT_framebuffer_sRGB
- extension = "GL_EXT_framebuffer_sRGB";
- glRefConfig.framebufferSrgb = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- if (r_srgb->integer)
- glRefConfig.framebufferSrgb = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.framebufferSrgb], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
- // GL_EXT_texture_sRGB_decode
- extension = "GL_EXT_texture_sRGB_decode";
- glRefConfig.textureSrgbDecode = qfalse;
- if (GLimp_HaveExtension(extension))
- {
- if (r_srgb->integer)
- glRefConfig.textureSrgbDecode = qtrue;
-
- ri.Printf(PRINT_ALL, result[glRefConfig.textureSrgbDecode], extension);
- }
- else
- {
- ri.Printf(PRINT_ALL, result[2], extension);
- }
-
-
glRefConfig.textureCompression = TCR_NONE;
// GL_EXT_texture_compression_latc
diff --git a/src/renderergl2/tr_glsl.c b/src/renderergl2/tr_glsl.c
index 33dd0497..58a00e6e 100644
--- a/src/renderergl2/tr_glsl.c
+++ b/src/renderergl2/tr_glsl.c
@@ -321,6 +321,18 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLcharARB *extra, cha
Q_strcat(dest, size,
va("#ifndef r_FBufScale\n#define r_FBufScale vec2(%f, %f)\n#endif\n", fbufWidthScale, fbufHeightScale));
+ if (r_materialGamma->value != 1.0f)
+ Q_strcat(dest, size, va("#ifndef r_materialGamma\n#define r_materialGamma %f\n#endif\n", r_materialGamma->value));
+
+ if (r_lightGamma->value != 1.0f)
+ Q_strcat(dest, size, va("#ifndef r_lightGamma\n#define r_lightGamma %f\n#endif\n", r_lightGamma->value));
+
+ if (r_framebufferGamma->value != 1.0f)
+ Q_strcat(dest, size, va("#ifndef r_framebufferGamma\n#define r_framebufferGamma %f\n#endif\n", r_framebufferGamma->value));
+
+ if (r_tonemapGamma->value != 1.0f)
+ Q_strcat(dest, size, va("#ifndef r_tonemapGamma\n#define r_tonemapGamma %f\n#endif\n", r_tonemapGamma->value));
+
if (extra)
{
Q_strcat(dest, size, extra);
diff --git a/src/renderergl2/tr_image.c b/src/renderergl2/tr_image.c
index af05381d..6f005247 100644
--- a/src/renderergl2/tr_image.c
+++ b/src/renderergl2/tr_image.c
@@ -1858,61 +1858,6 @@ static GLenum RawImage_GetFormat(const byte *data, int numPixels, qboolean light
}
}
}
-
- if (glRefConfig.textureSrgb && (flags & IMGFLAG_SRGB))
- {
- switch(internalFormat)
- {
- case GL_RGB:
- internalFormat = GL_SRGB_EXT;
- break;
-
- case GL_RGB4:
- case GL_RGB5:
- case GL_RGB8:
- internalFormat = GL_SRGB8_EXT;
- break;
-
- case GL_RGBA:
- internalFormat = GL_SRGB_ALPHA_EXT;
- break;
-
- case GL_RGBA4:
- case GL_RGBA8:
- internalFormat = GL_SRGB8_ALPHA8_EXT;
- break;
-
- case GL_LUMINANCE:
- internalFormat = GL_SLUMINANCE_EXT;
- break;
-
- case GL_LUMINANCE8:
- case GL_LUMINANCE16:
- internalFormat = GL_SLUMINANCE8_EXT;
- break;
-
- case GL_LUMINANCE_ALPHA:
- internalFormat = GL_SLUMINANCE_ALPHA_EXT;
- break;
-
- case GL_LUMINANCE8_ALPHA8:
- case GL_LUMINANCE16_ALPHA16:
- internalFormat = GL_SLUMINANCE8_ALPHA8_EXT;
- break;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- internalFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
- break;
-
- case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
- internalFormat = GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
- break;
-
- case GL_COMPRESSED_RGBA_BPTC_UNORM_ARB:
- internalFormat = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB;
- break;
- }
- }
}
return internalFormat;
@@ -1967,13 +1912,9 @@ static void RawImage_UploadTexture( byte *data, int x, int y, int width, int hei
R_MipMapNormalHeight( data, data, width, height, qtrue);
}
}
- else if (flags & IMGFLAG_SRGB)
- {
- R_MipMapsRGB( data, width, height );
- }
else
{
- R_MipMap( data, width, height );
+ R_MipMapsRGB( data, width, height );
}
}
@@ -2050,26 +1991,6 @@ static void Upload32( byte *data, int width, int height, imgType_t type, imgFlag
}
}
- // Convert to RGB if sRGB textures aren't supported in hardware
- if (!glRefConfig.textureSrgb && (flags & IMGFLAG_SRGB))
- {
- byte *in = data;
- int c = width * height;
- while (c--)
- {
- for (i = 0; i < 3; i++)
- {
- float x = ByteToFloat(in[i]);
- x = sRGBtoRGB(x);
- in[i] = FloatToByte(x);
- }
- in += 4;
- }
-
- // FIXME: Probably should mark the image as non-sRGB as well
- flags &= ~IMGFLAG_SRGB;
- }
-
// normals are always swizzled
if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT)
{
@@ -2108,13 +2029,20 @@ static void Upload32( byte *data, int width, int height, imgType_t type, imgFlag
// use the normal mip-mapping function to go down from here
while ( width > scaled_width || height > scaled_height ) {
- if (flags & IMGFLAG_SRGB)
+ if (type == IMGTYPE_NORMAL || type == IMGTYPE_NORMALHEIGHT)
{
- R_MipMapsRGB( (byte *)data, width, height );
+ if (internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT)
+ {
+ R_MipMapLuminanceAlpha( data, data, width, height );
+ }
+ else
+ {
+ R_MipMapNormalHeight( data, data, width, height, qtrue);
+ }
}
else
{
- R_MipMap( (byte *)data, width, height );
+ R_MipMapsRGB( data, width, height );
}
width >>= 1;
@@ -2396,13 +2324,20 @@ void R_UpdateSubImage( image_t *image, byte *pic, int x, int y, int width, int h
// use the normal mip-mapping function to go down from here
while ( width > scaled_width || height > scaled_height ) {
- if (image->flags & IMGFLAG_SRGB)
+ if (image->type == IMGTYPE_NORMAL || image->type == IMGTYPE_NORMALHEIGHT)
{
- R_MipMapsRGB( (byte *)data, width, height );
+ if (image->internalFormat == GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT)
+ {
+ R_MipMapLuminanceAlpha( data, data, width, height );
+ }
+ else
+ {
+ R_MipMapNormalHeight( data, data, width, height, qtrue);
+ }
}
else
{
- R_MipMap( (byte *)data, width, height );
+ R_MipMapsRGB( data, width, height );
}
width >>= 1;
@@ -2594,7 +2529,7 @@ image_t *R_FindImageFile( const char *name, imgType_t type, imgFlags_t flags )
int normalWidth, normalHeight;
imgFlags_t normalFlags;
- normalFlags = (flags & ~(IMGFLAG_GENNORMALMAP | IMGFLAG_SRGB)) | IMGFLAG_NOLIGHTSCALE;
+ normalFlags = (flags & ~IMGFLAG_GENNORMALMAP) | IMGFLAG_NOLIGHTSCALE;
COM_StripExtension(name, normalName, MAX_QPATH);
Q_strcat(normalName, MAX_QPATH, "_n");
@@ -3041,21 +2976,10 @@ void R_SetColorMappings( void ) {
g = r_gamma->value;
for ( i = 0; i < 256; i++ ) {
- int i2;
-
- if (r_srgb->integer)
- {
- i2 = 255 * RGBtosRGB(i/255.0f) + 0.5f;
- }
- else
- {
- i2 = i;
- }
-
if ( g == 1 ) {
- inf = i2;
+ inf = i;
} else {
- inf = 255 * pow ( i2/255.0f, 1.0f / g ) + 0.5f;
+ inf = 255 * pow ( i/255.0f, 1.0f / g ) + 0.5f;
}
if (inf < 0) {
diff --git a/src/renderergl2/tr_init.c b/src/renderergl2/tr_init.c
index d6252f51..43ede98f 100644
--- a/src/renderergl2/tr_init.c
+++ b/src/renderergl2/tr_init.c
@@ -124,7 +124,10 @@ cvar_t *r_forceAutoExposure;
cvar_t *r_forceAutoExposureMin;
cvar_t *r_forceAutoExposureMax;
-cvar_t *r_srgb;
+cvar_t *r_materialGamma;
+cvar_t *r_lightGamma;
+cvar_t *r_framebufferGamma;
+cvar_t *r_tonemapGamma;
cvar_t *r_depthPrepass;
cvar_t *r_ssao;
@@ -1109,7 +1112,10 @@ void R_Register( void )
r_cameraExposure = ri.Cvar_Get( "r_cameraExposure", "0", CVAR_CHEAT );
- r_srgb = ri.Cvar_Get( "r_srgb", "0", CVAR_ARCHIVE | CVAR_LATCH );
+ r_materialGamma = ri.Cvar_Get( "r_materialGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
+ r_lightGamma = ri.Cvar_Get( "r_lightGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
+ r_framebufferGamma = ri.Cvar_Get( "r_framebufferGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
+ r_tonemapGamma = ri.Cvar_Get( "r_tonemapGamma", "1.0", CVAR_ARCHIVE | CVAR_LATCH );
r_depthPrepass = ri.Cvar_Get( "r_depthPrepass", "1", CVAR_ARCHIVE );
r_ssao = ri.Cvar_Get( "r_ssao", "0", CVAR_LATCH | CVAR_ARCHIVE );
diff --git a/src/renderergl2/tr_local.h b/src/renderergl2/tr_local.h
index c5bd47fb..d375c552 100644
--- a/src/renderergl2/tr_local.h
+++ b/src/renderergl2/tr_local.h
@@ -1422,10 +1422,6 @@ typedef struct {
qboolean framebufferMultisample;
qboolean framebufferBlit;
- qboolean textureSrgb;
- qboolean framebufferSrgb;
- qboolean textureSrgbDecode;
-
qboolean depthClamp;
qboolean seamlessCubeMap;
@@ -1789,7 +1785,10 @@ extern cvar_t *r_forceAutoExposureMax;
extern cvar_t *r_cameraExposure;
-extern cvar_t *r_srgb;
+extern cvar_t *r_materialGamma;
+extern cvar_t *r_lightGamma;
+extern cvar_t *r_framebufferGamma;
+extern cvar_t *r_tonemapGamma;
extern cvar_t *r_depthPrepass;
extern cvar_t *r_ssao;
diff --git a/src/renderergl2/tr_main.c b/src/renderergl2/tr_main.c
index 4a6732b1..b03054fb 100644
--- a/src/renderergl2/tr_main.c
+++ b/src/renderergl2/tr_main.c
@@ -2863,7 +2863,7 @@ void R_RenderCubemapSide( int cubemapIndex, int cubemapSide, qboolean subscene )
{
vec3_t ambient, directed, lightDir;
R_LightForPoint(tr.refdef.vieworg, ambient, directed, lightDir);
- tr.refdef.colorScale = 766.0f / (directed[0] + directed[1] + directed[2] + 1.0f);
+ tr.refdef.colorScale = 1.0f; //766.0f / (directed[0] + directed[1] + directed[2] + 1.0f);
// only print message for first side
if (directed[0] + directed[1] + directed[2] == 0 && cubemapSide == 0)
{
diff --git a/src/renderergl2/tr_shader.c b/src/renderergl2/tr_shader.c
index aaed0e63..567d465b 100644
--- a/src/renderergl2/tr_shader.c
+++ b/src/renderergl2/tr_shader.c
@@ -686,9 +686,6 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
{
if (r_genNormalMaps->integer)
flags |= IMGFLAG_GENNORMALMAP;
-
- if (r_srgb->integer)
- flags |= IMGFLAG_SRGB;
}
stage->bundle[0].image[0] = R_FindImageFile( token, type, flags );
@@ -733,9 +730,6 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
{
if (r_genNormalMaps->integer)
flags |= IMGFLAG_GENNORMALMAP;
-
- if (r_srgb->integer)
- flags |= IMGFLAG_SRGB;
}
@@ -777,9 +771,6 @@ static qboolean ParseStage( shaderStage_t *stage, char **text )
if (!shader.noPicMip)
flags |= IMGFLAG_PICMIP;
- if (r_srgb->integer)
- flags |= IMGFLAG_SRGB;
-
stage->bundle[0].image[num] = R_FindImageFile( token, IMGTYPE_COLORALPHA, flags );
if ( !stage->bundle[0].image[num] )
{
@@ -1512,9 +1503,6 @@ static void ParseSkyParms( char **text ) {
int i;
imgFlags_t imgFlags = IMGFLAG_MIPMAP | IMGFLAG_PICMIP;
- if (r_srgb->integer)
- imgFlags |= IMGFLAG_SRGB;
-
// outerbox
token = COM_ParseExt( text, qfalse );
if ( token[0] == 0 ) {
@@ -3334,9 +3322,6 @@ shader_t *R_FindShader( const char *name, int lightmapIndex, qboolean mipRawImag
flags = IMGFLAG_NONE;
- if (r_srgb->integer)
- flags |= IMGFLAG_SRGB;
-
if (mipRawImage)
{
flags |= IMGFLAG_MIPMAP | IMGFLAG_PICMIP;