From fde6e5bf6113e3fb7bce8810df17e14735de54c9 Mon Sep 17 00:00:00 2001 From: Ragnvald Maartmann-Moe IV Date: Sun, 29 Feb 2004 01:49:41 +0000 Subject: [PATCH] Reduce ifs a bit, clean up init a bit. Minor problem with gl_doublebright. LIH. --- libs/video/renderer/gl/gl_lightmap.c | 119 +++++++++++---------------- libs/video/targets/vid_common_gl.c | 12 ++- 2 files changed, 59 insertions(+), 72 deletions(-) diff --git a/libs/video/renderer/gl/gl_lightmap.c b/libs/video/renderer/gl/gl_lightmap.c index 0dd9a2581..343398cf2 100644 --- a/libs/video/renderer/gl/gl_lightmap.c +++ b/libs/video/renderer/gl/gl_lightmap.c @@ -75,6 +75,8 @@ qboolean lightmap_modified[MAX_GLTEXTURES]; glpoly_t *lightmap_polys[MAX_LIGHTMAPS]; glRect_t lightmap_rectchange[MAX_LIGHTMAPS]; +static int lshift, lshift2; + void (*R_BuildLightMap) (msurface_t *surf); @@ -290,31 +292,20 @@ R_BuildLightMap_1 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - switch (gl_overbright->int_val) { - case 2: + if (lshift2) { for (i = 0; i < tmax; i++, dest += stride) { for (j = smax; j; j--) { - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; } } - break; - case 1: + } else { for (i = 0; i < tmax; i++, dest += stride) { for (j = smax; j; j--) { - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; } } - break; - default: - for (i = 0; i < tmax; i++, dest += stride) { - for (j = smax; j; j--) { - *dest++ = min (*bl >> 8, 255); - bl++; - } - } - break; } } @@ -371,43 +362,28 @@ R_BuildLightMap_3 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - switch (gl_overbright->int_val) { - case 2: + if (lshift2) { for (i = 0; i < tmax; i++, dest += stride) { for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; } } - break; - case 1: + } else { for (i = 0; i < tmax; i++, dest += stride) { for (j = 0; j < smax; j++) { - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; } } - break; - default: - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> 8, 255); - bl++; - *dest++ = min (*bl >> 8, 255); - bl++; - *dest++ = min (*bl >> 8, 255); - bl++; - } - } - break; } } @@ -464,46 +440,30 @@ R_BuildLightMap_4 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - switch (gl_overbright->int_val) { - case 2: + if (lshift2) { for (i = 0; i < tmax; i++, dest += stride) { for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; - *dest++ = min (*bl >> 9, 255); + *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); bl++; *dest++ = 255; } } - break; - case 1: + } else { for (i = 0; i < tmax; i++, dest += stride) { for (j = 0; j < smax; j++) { - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; - *dest++ = min ((*bl >> 9) + (*bl >> 10), 255); + *dest++ = min (*bl >> lshift, 255); bl++; *dest++ = 255; } } - break; - default: - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> 8, 255); - bl++; - *dest++ = min (*bl >> 8, 255); - bl++; - *dest++ = min (*bl >> 8, 255); - bl++; - *dest++ = 255; - } - } - break; } } @@ -563,11 +523,7 @@ R_BlendLightmaps (void) glpoly_t *p; qfglDepthMask (GL_FALSE); // don't bother writing Z - - if (gl_doublebright->int_val) - qfglBlendFunc (GL_DST_COLOR, GL_SRC_COLOR); - else - qfglBlendFunc (GL_ZERO, GL_SRC_COLOR); + qfglBlendFunc (lm_src_blend, lm_dest_blend); for (i = 0; i < MAX_LIGHTMAPS; i++) { p = lightmap_polys[i]; @@ -597,9 +553,33 @@ gl_overbright_f (cvar_t *var) model_t *m; msurface_t *fa; + if (!var) + return; if (R_BuildLightMap == 0) return; + switch (var->int_val) { + case 2: + lshift = 8; + lshift2 = 0; + break; + case 1: + lshift = 8; + lshift2 = 9; + break; + default: + lshift = 7; + lshift2 = 0; + break; + } + if (gl_doublebright) { + if (gl_doublebright->int_val) { + lshift++; + if (lshift2) + lshift2++; + } + } + for (i = 0; i < r_numvisedicts; i++) { m = r_visedicts[i]->model; @@ -648,10 +628,7 @@ R_CalcAndBlendLightmaps (void) glpoly_t *p; qfglDepthMask (GL_FALSE); // don't bother writing Z - if (gl_doublebright->int_val) - qfglBlendFunc (GL_DST_COLOR, GL_SRC_COLOR); - else - qfglBlendFunc (GL_ZERO, GL_SRC_COLOR); + qfglBlendFunc (lm_src_blend, lm_dest_blend); for (i = 0; i < MAX_LIGHTMAPS; i++) { p = lightmap_polys[i]; diff --git a/libs/video/targets/vid_common_gl.c b/libs/video/targets/vid_common_gl.c index 7aed39f86..6c6bc84de 100644 --- a/libs/video/targets/vid_common_gl.c +++ b/libs/video/targets/vid_common_gl.c @@ -95,6 +95,7 @@ qboolean gl_mtex_fullbright = false; // Combine qboolean gl_combine_capable = false; +int lm_src_blend, lm_dest_blend; QF_glColorTableEXT qglColorTableEXT = NULL; qboolean is8bit = false; @@ -142,10 +143,19 @@ gl_doublebright_f (cvar_t *var) return; if (var->int_val) { - if (!gl_combine_capable && gl_mtex_capable) + if (!gl_combine_capable && gl_mtex_capable) { Con_Printf ("Warning: gl_doublebright has no effect with " "gl_multitexture enabled if you don't have " "GL_COMBINE_ARB support in your driver.\n"); + lm_src_blend = GL_ZERO; + lm_dest_blend = GL_SRC_COLOR; + } else { + lm_src_blend = GL_DST_COLOR; + lm_dest_blend = GL_SRC_COLOR; + } + } else { + lm_src_blend = GL_ZERO; + lm_dest_blend = GL_SRC_COLOR; } }