diff --git a/code/renderergl2/tr_bsp.c b/code/renderergl2/tr_bsp.c index a4f47cb8..964a6601 100644 --- a/code/renderergl2/tr_bsp.c +++ b/code/renderergl2/tr_bsp.c @@ -286,13 +286,10 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { tr.deluxemaps = ri.Hunk_Alloc( tr.numLightmaps * sizeof(image_t *), h_low ); } - if (r_hdr->integer) - { - if (glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer) - textureInternalFormat = GL_RGBA16F_ARB; - else - textureInternalFormat = GL_RGBA8; - } + if (glRefConfig.floatLightmap) + textureInternalFormat = GL_RGBA16F_ARB; + else + textureInternalFormat = GL_RGBA8; if (r_mergeLightmaps->integer) { @@ -405,12 +402,12 @@ static void R_LoadLightmaps( lump_t *l, lump_t *surfs ) { R_ColorShiftLightingFloats(color, color, 1.0f/255.0f); - if (glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer) + if (glRefConfig.floatLightmap) ColorToRGBA16F(color, (unsigned short *)(&image[j*8])); else ColorToRGBM(color, &image[j*4]); } - else if (glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer) + else if (glRefConfig.floatLightmap) { vec4_t color; diff --git a/code/renderergl2/tr_extensions.c b/code/renderergl2/tr_extensions.c index d7e5f1ba..3d653692 100644 --- a/code/renderergl2/tr_extensions.c +++ b/code/renderergl2/tr_extensions.c @@ -725,4 +725,7 @@ void GLimp_InitExtraExtensions() { ri.Printf(PRINT_ALL, result[2], extension); } + + // use float lightmaps? + glRefConfig.floatLightmap = (glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer && r_hdr->integer); } diff --git a/code/renderergl2/tr_glsl.c b/code/renderergl2/tr_glsl.c index 2212c4fe..4919254f 100644 --- a/code/renderergl2/tr_glsl.c +++ b/code/renderergl2/tr_glsl.c @@ -903,7 +903,7 @@ void GLSL_InitGPUShaders(void) if (i & GENERICDEF_USE_LIGHTMAP) Q_strcat(extradefines, 1024, "#define USE_LIGHTMAP\n"); - if (r_hdr->integer && !(glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer)) + if (r_hdr->integer && !glRefConfig.floatLightmap) Q_strcat(extradefines, 1024, "#define RGBM_LIGHTMAP\n"); if (!GLSL_InitGPUShader(&tr.genericShader[i], "generic", attribs, qtrue, extradefines, qtrue, fallbackShader_generic_vp, fallbackShader_generic_fp)) @@ -1022,7 +1022,7 @@ void GLSL_InitGPUShaders(void) if (1) Q_strcat(extradefines, 1024, "#define SWIZZLE_NORMALMAP\n"); - if (r_hdr->integer && !(glRefConfig.textureFloat && glRefConfig.halfFloatPixel && r_floatLightmap->integer)) + if (r_hdr->integer && !glRefConfig.floatLightmap) Q_strcat(extradefines, 1024, "#define RGBM_LIGHTMAP\n"); if (lightType) diff --git a/code/renderergl2/tr_local.h b/code/renderergl2/tr_local.h index 0fbabd20..12fa10ad 100644 --- a/code/renderergl2/tr_local.h +++ b/code/renderergl2/tr_local.h @@ -1425,6 +1425,8 @@ typedef struct { qboolean seamlessCubeMap; GLenum packedNormalDataType; + + qboolean floatLightmap; } glRefConfig_t;