From b7df0b5278c7f5da5c2a261fb25b7e33fadec40f Mon Sep 17 00:00:00 2001 From: Ragnvald Maartmann-Moe IV Date: Sun, 7 Mar 2004 23:51:29 +0000 Subject: [PATCH] Remove gl_doublebright, remove fractional overbrights, clean up init a bit, uglify init a bit. Stuff for taniwha to look at. Nothing to see here, move along. --- include/QF/GL/qf_rmain.h | 3 + include/QF/GL/qf_vid.h | 9 +- include/r_cvar.h | 1 - libs/video/renderer/gl/gl_lightmap.c | 137 ++++++++++++--------------- libs/video/renderer/gl/gl_rmain.c | 20 ++-- libs/video/targets/vid_common_gl.c | 88 ++++++----------- 6 files changed, 111 insertions(+), 147 deletions(-) diff --git a/include/QF/GL/qf_rmain.h b/include/QF/GL/qf_rmain.h index 328fc71cb..a1f040fc8 100644 --- a/include/QF/GL/qf_rmain.h +++ b/include/QF/GL/qf_rmain.h @@ -30,6 +30,7 @@ #define __QF_GL_rmain_h #include "QF/qtypes.h" +#include "QF/cvar.h" extern qboolean envmap; extern int c_brush_polys, c_alias_polys; @@ -39,6 +40,8 @@ extern float modelalpha; extern vec3_t shadecolor; extern vec3_t lightspot; +extern void gl_multitexture_f (cvar_t *var); + void glrmain_init (void); void R_RotateForEntity (struct entity_s *e); diff --git a/include/QF/GL/qf_vid.h b/include/QF/GL/qf_vid.h index 0a33d74ee..cc43947e3 100644 --- a/include/QF/GL/qf_vid.h +++ b/include/QF/GL/qf_vid.h @@ -41,13 +41,14 @@ extern int gl_mtex_active_tmus; extern qboolean gl_mtex_capable; extern qboolean gl_mtex_fullbright; extern GLenum gl_mtex_enum; -extern int use_bgra; -//extern int use_tmus; extern qboolean gl_combine_capable; -extern float gldepthmin, gldepthmax; +extern float rgb_scale; extern int texture_extension_number; -extern int tess; + extern qboolean gl_feature_mach64; +extern float gldepthmin, gldepthmax; +extern int use_bgra; +extern int tess; void GL_EndRendering (void); void GL_BeginRendering (int *x, int *y, int *width, int *height); diff --git a/include/r_cvar.h b/include/r_cvar.h index c6b6ccff0..47e7a45ca 100644 --- a/include/r_cvar.h +++ b/include/r_cvar.h @@ -19,7 +19,6 @@ extern struct cvar_s *gl_conspin; extern struct cvar_s *gl_constretch; extern struct cvar_s *gl_dlight_polyblend; extern struct cvar_s *gl_dlight_smooth; -extern struct cvar_s *gl_doublebright; extern struct cvar_s *gl_fb_bmodels; extern struct cvar_s *gl_fb_models; extern struct cvar_s *gl_keeptjunctions; diff --git a/libs/video/renderer/gl/gl_lightmap.c b/libs/video/renderer/gl/gl_lightmap.c index 953840693..660346c50 100644 --- a/libs/video/renderer/gl/gl_lightmap.c +++ b/libs/video/renderer/gl/gl_lightmap.c @@ -42,6 +42,7 @@ static __attribute__ ((unused)) const char rcsid[] = #include #include +#include "QF/console.h" #include "QF/cvar.h" #include "QF/render.h" #include "QF/sys.h" @@ -75,10 +76,12 @@ qboolean lightmap_modified[MAX_GLTEXTURES]; glpoly_t *lightmap_polys[MAX_LIGHTMAPS]; glRect_t lightmap_rectchange[MAX_LIGHTMAPS]; -static int lshift = 8, lshift2 = 9; +static int lmshift = 7; void (*R_BuildLightMap) (msurface_t *surf); +extern void gl_multitexture_f (cvar_t *var); + void gl_lightmap_init (void) @@ -292,19 +295,10 @@ R_BuildLightMap_1 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - if (lshift2) { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = smax; j; j--) { - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - } - } - } else { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = smax; j; j--) { - *dest++ = min (*bl >> lshift, 255); - bl++; - } + for (i = 0; i < tmax; i++, dest += stride) { + for (j = smax; j; j--) { + *dest++ = min (*bl >> lmshift, 255); + bl++; } } } @@ -362,27 +356,14 @@ R_BuildLightMap_3 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - if (lshift2) { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - } - } - } else { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> lshift, 255); - bl++; - *dest++ = min (*bl >> lshift, 255); - bl++; - *dest++ = min (*bl >> lshift, 255); - bl++; - } + for (i = 0; i < tmax; i++, dest += stride) { + for (j = 0; j < smax; j++) { + *dest++ = min (*bl >> lmshift, 255); + bl++; + *dest++ = min (*bl >> lmshift, 255); + bl++; + *dest++ = min (*bl >> lmshift, 255); + bl++; } } } @@ -440,29 +421,15 @@ R_BuildLightMap_4 (msurface_t *surf) dest = lightmaps[surf->lightmaptexturenum] + (surf->light_t * BLOCK_WIDTH + surf->light_s) * lightmap_bytes; - if (lshift2) { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - *dest++ = min ((*bl >> lshift) + (*bl >> lshift2), 255); - bl++; - *dest++ = 255; - } - } - } else { - for (i = 0; i < tmax; i++, dest += stride) { - for (j = 0; j < smax; j++) { - *dest++ = min (*bl >> lshift, 255); - bl++; - *dest++ = min (*bl >> lshift, 255); - bl++; - *dest++ = min (*bl >> lshift, 255); - bl++; - *dest++ = 255; - } + for (i = 0; i < tmax; i++, dest += stride) { + for (j = 0; j < smax; j++) { + *dest++ = min (*bl >> lmshift, 255); + bl++; + *dest++ = min (*bl >> lmshift, 255); + bl++; + *dest++ = min (*bl >> lmshift, 255); + bl++; + *dest++ = 255; } } } @@ -573,28 +540,44 @@ gl_overbright_f (cvar_t *var) if (!R_BuildLightMap) 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++; + if (var->int_val) { + if (!gl_combine_capable && gl_mtex_capable) { + Con_Printf ("Warning: gl_overbright has no effect with " + "gl_multitexture enabled if you don't have " + "GL_COMBINE support in your driver.\n"); + lm_src_blend = GL_ZERO; + lm_dest_blend = GL_SRC_COLOR; + lmshift = 7; + rgb_scale = 1.0; + } else { + lm_src_blend = GL_DST_COLOR; + lm_dest_blend = GL_SRC_COLOR; + + switch (var->int_val) { + case 2: + lmshift = 9; + rgb_scale = 4.0; + break; + case 1: + lmshift = 8; + rgb_scale = 2.0; + break; + default: + lmshift = 7; + rgb_scale = 1.0; + break; + } } + } else { + lm_src_blend = GL_ZERO; + lm_dest_blend = GL_SRC_COLOR; + lmshift = 7; + rgb_scale = 1.0; } + if (gl_multitexture) + gl_multitexture_f (gl_multitexture); + for (i = 0; i < r_numvisedicts; i++) { m = r_visedicts[i]->model; diff --git a/libs/video/renderer/gl/gl_rmain.c b/libs/video/renderer/gl/gl_rmain.c index 2af810480..c99300136 100644 --- a/libs/video/renderer/gl/gl_rmain.c +++ b/libs/video/renderer/gl/gl_rmain.c @@ -188,6 +188,10 @@ glrmain_init (void) gldepthmax = 1; qfglDepthFunc (GL_LEQUAL); qfglDepthRange (gldepthmin, gldepthmax); + if (gl_multitexture) + gl_multitexture_f (gl_multitexture); + if (gl_overbright) + gl_overbright_f (gl_overbright); } inline void @@ -280,10 +284,10 @@ R_DrawEntitiesOnList (void) // up in every R_DrawAliasModel()! qglActiveTexture (gl_mtex_enum + 1); qfglEnable (GL_TEXTURE_2D); - if (gl_combine_capable && gl_doublebright->int_val) { - qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0); + if (gl_combine_capable && gl_overbright->int_val) { + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE, rgb_scale); } else { qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } @@ -327,10 +331,10 @@ R_DrawViewModel (void) // up in every R_DrawAliasModel()! qglActiveTexture (gl_mtex_enum + 1); qfglEnable (GL_TEXTURE_2D); - if (gl_combine_capable && gl_doublebright->int_val) { - qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0); + if (gl_combine_capable && gl_overbright->int_val) { + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE, rgb_scale); } else { qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } diff --git a/libs/video/targets/vid_common_gl.c b/libs/video/targets/vid_common_gl.c index 6e677f635..5808f7278 100644 --- a/libs/video/targets/vid_common_gl.c +++ b/libs/video/targets/vid_common_gl.c @@ -47,7 +47,6 @@ static __attribute__ ((unused)) const char rcsid[] = #include "QF/input.h" #include "QF/qargs.h" #include "QF/quakefs.h" -#include "r_cvar.h" // FIXME: for gl_overbright_f #include "QF/sys.h" #include "QF/va.h" #include "QF/vid.h" @@ -58,6 +57,7 @@ static __attribute__ ((unused)) const char rcsid[] = #include "compat.h" #include "d_iface.h" +#include "r_cvar.h" #include "sbar.h" #define WARP_WIDTH 320 @@ -88,7 +88,7 @@ int gl_filter_max = GL_LINEAR; float gldepthmin, gldepthmax; // Multitexture -static qboolean gl_mtex_capable = false; +qboolean gl_mtex_capable = false; static int gl_mtex_tmus = 0; GLenum gl_mtex_enum; int gl_mtex_active_tmus = 0; @@ -97,6 +97,7 @@ qboolean gl_mtex_fullbright = false; // Combine qboolean gl_combine_capable = false; int lm_src_blend, lm_dest_blend; +float rgb_scale = 1.0; QF_glColorTableEXT qglColorTableEXT = NULL; qboolean is8bit = false; @@ -119,6 +120,8 @@ cvar_t *gl_screenshot_byte_swap; cvar_t *vid_mode; cvar_t *vid_use8bit; +void gl_multitexture_f (cvar_t *var); + static void gl_max_size_f (cvar_t *var) @@ -137,31 +140,6 @@ gl_max_size_f (cvar_t *var) } } -static void -gl_doublebright_f (cvar_t *var) -{ - if (!var) - return; - - if (var->int_val) { - 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; - } - if (gl_overbright) - gl_overbright_f (gl_overbright); -} - static void gl_textures_bgra_f (cvar_t *var) { @@ -188,7 +166,7 @@ gl_fb_bmodels_f (cvar_t *var) } } -static void +void gl_multitexture_f (cvar_t *var) { if (!var) @@ -201,6 +179,12 @@ gl_multitexture_f (cvar_t *var) if (gl_fb_bmodels->int_val) { if (gl_mtex_tmus >= 3) { gl_mtex_fullbright = true; + + qglActiveTexture (gl_mtex_enum + 2); + qfglEnable (GL_TEXTURE_2D); + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, + GL_DECAL); + qfglDisable (GL_TEXTURE_2D); } else { gl_mtex_fullbright = false; Con_Printf ("Not enough TMUs for BSP fullbrights.\n"); @@ -209,6 +193,25 @@ gl_multitexture_f (cvar_t *var) } else { gl_mtex_fullbright = false; } + + // Lightmaps + qglActiveTexture (gl_mtex_enum + 1); + qfglEnable (GL_TEXTURE_2D); + if (gl_overbright) { + if (gl_combine_capable && gl_overbright->int_val) { + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); + qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE, rgb_scale); + } else { + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + } + } else { + qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + } + qfglDisable (GL_TEXTURE_2D); + + // Base Texture + qglActiveTexture (gl_mtex_enum + 0); } else { gl_mtex_active_tmus = 0; gl_mtex_fullbright = false; @@ -248,10 +251,6 @@ GL_Common_Init_Cvars (void) gl_textures_bgra = Cvar_Get ("gl_textures_bgra", "0", CVAR_ROM, gl_textures_bgra_f, "If set to 1, try to use " "BGR & BGRA textures instead of RGB & RGBA."); - gl_doublebright = Cvar_Get ("gl_doublebright", "1", CVAR_ARCHIVE, - gl_doublebright_f, "Use different lighting " - "algorithm to increase brightness of map " - "surfaces."); gl_fb_bmodels = Cvar_Get ("gl_fb_bmodels", "1", CVAR_ARCHIVE, gl_fb_bmodels_f, "Toggles fullbright color " "support for bmodels"); @@ -529,31 +528,6 @@ GL_Init_Common (void) CheckTruFormExtensions (); GL_Common_Init_Cvars (); CheckVertexArraySize (); - - if (gl_mtex_capable) { - // Fullbrights - if (gl_mtex_tmus >= 3) { - qglActiveTexture (gl_mtex_enum + 2); - qfglEnable (GL_TEXTURE_2D); - qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); - qfglDisable (GL_TEXTURE_2D); - } - - // Lightmaps - qglActiveTexture (gl_mtex_enum + 1); - qfglEnable (GL_TEXTURE_2D); - if (gl_combine_capable && gl_doublebright->int_val) { - qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); - qfglTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); - qfglTexEnvf (GL_TEXTURE_ENV, GL_RGB_SCALE_ARB, 2.0); - } else { - qfglTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - } - qfglDisable (GL_TEXTURE_2D); - - // Base Texture - qglActiveTexture (gl_mtex_enum + 0); - } } void