quakeforge/libs/video/renderer/r_cvar.c

336 lines
11 KiB
C
Raw Normal View History

/*
r_cvar.c
renderer cvar definitions
Copyright (C) 2000 Bill Currie
Ragnvald Maartmann-Moe IV
Author: Bill Currie
Ragnvald Maartmann-Moe IV
Date: 2001/5/17
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "QF/cvar.h"
#include "QF/model.h"
#include "QF/qendian.h"
#include "QF/render.h"
#include "compat.h"
#include "r_internal.h"
cvar_t *cl_crossx;
cvar_t *cl_crossy;
cvar_t *cl_verstring;
cvar_t *crosshair;
cvar_t *crosshaircolor;
cvar_t *d_mipcap;
cvar_t *d_mipscale;
cvar_t *r_aliasstats;
cvar_t *r_aliastransadj;
cvar_t *r_aliastransbase;
cvar_t *r_ambient;
cvar_t *r_clearcolor;
cvar_t *r_dlight_lightmap;
cvar_t *r_dlight_max;
cvar_t *r_drawentities;
cvar_t *r_drawexplosions;
cvar_t *r_drawflat;
cvar_t *r_drawviewmodel;
cvar_t *r_dspeeds;
cvar_t *r_dynamic;
cvar_t *r_explosionclip;
cvar_t *r_farclip;
cvar_t *r_firecolor;
cvar_t *r_flatlightstyles;
cvar_t *r_graphheight;
cvar_t *r_lightmap_components;
cvar_t *r_maxedges;
cvar_t *r_maxsurfs;
cvar_t *r_mirroralpha;
cvar_t *r_nearclip;
cvar_t *r_norefresh;
cvar_t *r_novis;
cvar_t *r_numedges;
cvar_t *r_numsurfs;
cvar_t *r_particles;
cvar_t *r_particles_max;
cvar_t *r_particles_nearclip;
cvar_t *r_reportedgeout;
cvar_t *r_reportsurfout;
cvar_t *r_shadows;
cvar_t *r_skyname;
cvar_t *r_speeds;
cvar_t *r_timegraph;
cvar_t *r_wateralpha;
cvar_t *r_waterripple;
cvar_t *r_waterwarp;
cvar_t *r_zgraph;
cvar_t *scr_fov;
cvar_t *scr_fisheye;
cvar_t *scr_fviews;
cvar_t *scr_ffov;
cvar_t *scr_showpause;
cvar_t *scr_showram;
cvar_t *scr_showturtle;
cvar_t *scr_viewsize;
int r_viewsize;
quat_t crosshair_color;
static void
crosshaircolor_update (void *_var, const viddef_t *vid)
{
cvar_t *var = _var;
byte *color;
color = &vid->palette32[bound (0, var->int_val, 255) * 4];
QuatScale (color, 1.0 / 255, crosshair_color);
}
static void
crosshaircolor_f (cvar_t *var)
{
if (!r_data->vid->palette32) {
// palette not initialized yet
return;
}
crosshaircolor_update (var, r_data->vid);
}
static void
r_lightmap_components_f (cvar_t *var)
{
switch (var->int_val) {
case 1:
mod_lightmap_bytes = 1;
break;
case 3:
case 4:
default:
mod_lightmap_bytes = 3;
break;
}
}
static void
r_farclip_f (cvar_t *var)
{
Cvar_SetValue (r_farclip, bound (8.0, var->value, Q_MAXFLOAT));
if (r_particles_nearclip && r_nearclip)
Cvar_SetValue (r_particles_nearclip,
bound (r_nearclip->value, r_particles_nearclip->value,
r_farclip->value));
r_data->vid->recalc_refdef = true;
}
static void
r_nearclip_f (cvar_t *var)
{
Cvar_SetValue (r_nearclip, bound (0.01, var->value, 4.0));
if (r_particles_nearclip && r_farclip)
Cvar_SetValue (r_particles_nearclip,
bound (r_nearclip->value, r_particles_nearclip->value,
r_farclip->value));
r_data->vid->recalc_refdef = true;
}
static void
scr_fov_f (cvar_t *var)
{
SCR_SetFOV (var->value);
}
static void
scr_fisheye_f (cvar_t *var)
{
if (var->int_val)
Cvar_Set (scr_fov, "90");
}
static void
scr_ffov_f (cvar_t *var)
{
if (var->value < 130)
Cvar_Set (scr_fviews, "3");
else if (var->value < 220)
Cvar_Set (scr_fviews, "5");
else
Cvar_Set (scr_fviews, "6");
}
static void
viewsize_f (cvar_t *var)
{
if (var->int_val < 30 || var->int_val > 120) {
Cvar_SetValue (var, bound (30, var->int_val, 120));
} else {
r_data->vid->recalc_refdef = true;
r_viewsize = bound (0, var->int_val, 100);
if (r_data->viewsize_callback)
r_data->viewsize_callback (var);
}
}
static void
r_dlight_max_f (cvar_t *var)
{
r_funcs->R_MaxDlightsCheck (var);
}
void
R_Init_Cvars (void)
{
cl_crossx = Cvar_Get ("cl_crossx", "0", CVAR_ARCHIVE, NULL,
"Sets the position of the crosshair on the X-axis.");
cl_crossy = Cvar_Get ("cl_crossy", "0", CVAR_ARCHIVE, NULL,
"Sets the position of the crosshair on the Y-axis.");
cl_verstring = Cvar_Get ("cl_verstring", PACKAGE_VERSION, CVAR_NONE,
NULL, "Client version string");
2001-05-14 01:22:58 +00:00
crosshair = Cvar_Get ("crosshair", "0", CVAR_ARCHIVE, NULL, "Crosshair "
"type. 0 off, 1 old white, 2 new with colors");
crosshaircolor = Cvar_Get ("crosshaircolor", "79", CVAR_ARCHIVE,
crosshaircolor_f, "Color of the new crosshair");
VID_OnPaletteChange_AddListener (crosshaircolor_update, crosshaircolor);
d_mipcap = Cvar_Get ("d_mipcap", "0", CVAR_NONE, NULL,
"Detail level. 0 is highest, 3 is lowest.");
2001-05-14 01:22:58 +00:00
d_mipscale = Cvar_Get ("d_mipscale", "1", CVAR_NONE, NULL, "Detail level "
2001-05-18 21:05:38 +00:00
"of objects. 0 is highest, 3 is lowest.");
r_aliasstats = Cvar_Get ("r_polymodelstats", "0", CVAR_NONE, NULL,
"Toggles the displays of number of polygon "
"models current being viewed");
2001-05-14 01:22:58 +00:00
r_aliastransadj = Cvar_Get ("r_aliastransadj", "100", CVAR_NONE, NULL,
"Determines how much of an alias model is "
"clipped away and how much is viewable.");
2001-05-14 01:22:58 +00:00
r_aliastransbase = Cvar_Get ("r_aliastransbase", "200", CVAR_NONE, NULL,
"Determines how much of an alias model is "
"clipped away and how much is viewable");
r_ambient = Cvar_Get ("r_ambient", "0", CVAR_NONE, NULL,
"Determines the ambient lighting for a level");
r_clearcolor = Cvar_Get ("r_clearcolor", "2", CVAR_NONE, NULL,
"This sets the color for areas outside of the "
"current map");
r_dlight_lightmap = Cvar_Get ("r_dlight_lightmap", "1", CVAR_ARCHIVE,
NULL, "Set to 1 for high quality dynamic "
"lighting.");
r_dlight_max = Cvar_Get ("r_dlight_max", "32", CVAR_ARCHIVE,
r_dlight_max_f, "Number of dynamic lights.");
r_drawentities = Cvar_Get ("r_drawentities", "1", CVAR_NONE, NULL,
"Toggles drawing of entities (almost "
"everything but the world)");
r_drawexplosions = Cvar_Get ("r_drawexplosions", "1", CVAR_ARCHIVE, NULL,
"Draw explosions.");
r_drawflat = Cvar_Get ("r_drawflat", "0", CVAR_NONE, NULL,
"Toggles the drawing of textures");
2001-05-18 21:05:38 +00:00
r_drawviewmodel = Cvar_Get ("r_drawviewmodel", "1", CVAR_ARCHIVE, NULL,
"Toggles view model drawing (your weapons)");
r_dspeeds = Cvar_Get ("r_dspeeds", "0", CVAR_NONE, NULL,
"Toggles the display of drawing speed information");
r_dynamic = Cvar_Get ("r_dynamic", "1", CVAR_NONE, NULL,
"Set to 0 to disable lightmap changes");
r_explosionclip = Cvar_Get ("r_explosionclip", "0", CVAR_ARCHIVE, NULL,
"Clip explosions.");
r_farclip = Cvar_Get ("r_farclip", "4096", CVAR_ARCHIVE, r_farclip_f,
"Distance of the far clipping plane from the "
"player.");
r_firecolor = Cvar_Get ("r_firecolor", "0.9 0.7 0.0", CVAR_ARCHIVE, NULL,
"color of rocket and lava ball fires");
r_flatlightstyles = Cvar_Get ("r_flatlightstyles", "0", CVAR_NONE, NULL,
"Disable animated lightmaps. 2 = use peak, "
"1 = use average, anything else = normal");
2001-05-18 21:05:38 +00:00
r_graphheight = Cvar_Get ("r_graphheight", "32", CVAR_NONE, NULL,
"Set the number of lines displayed in the "
"various graphs");
r_lightmap_components = Cvar_Get ("r_lightmap_components", "3", CVAR_ROM,
r_lightmap_components_f,
"Lightmap texture components. 1 "
"is greyscale, 3 is RGB, 4 is RGBA.");
r_maxedges = Cvar_Get ("r_maxedges", "0", CVAR_NONE, NULL,
"Sets the maximum number of edges");
r_maxsurfs = Cvar_Get ("r_maxsurfs", "0", CVAR_NONE, NULL,
"Sets the maximum number of surfaces");
r_mirroralpha = Cvar_Get ("r_mirroralpha", "1", CVAR_NONE, NULL, "None");
r_nearclip = Cvar_Get ("r_nearclip", "4", CVAR_ARCHIVE, r_nearclip_f,
"Distance of the near clipping plane from the "
"player.");
r_norefresh = Cvar_Get ("r_norefresh_", "0", CVAR_NONE, NULL,
"Set to 1 to disable display refresh");
r_novis = Cvar_Get ("r_novis", "0", CVAR_NONE, NULL, "Set to 1 to enable "
"runtime visibility checking (SLOW)");
r_numedges = Cvar_Get ("r_numedges", "0", CVAR_NONE, NULL,
"Toggles the displaying of number of edges "
"currently being viewed");
r_numsurfs = Cvar_Get ("r_numsurfs", "0", CVAR_NONE, NULL,
"Toggles the displaying of number of surfaces "
"currently being viewed");
2001-05-14 01:22:58 +00:00
r_reportedgeout = Cvar_Get ("r_reportedgeout", "0", CVAR_NONE, NULL,
"Toggle the display of how many edges were "
"not displayed");
2001-05-14 01:22:58 +00:00
r_reportsurfout = Cvar_Get ("r_reportsurfout", "0", CVAR_NONE, NULL,
"Toggle the display of how many surfaces "
"were not displayed");
2001-05-18 21:05:38 +00:00
r_shadows = Cvar_Get ("r_shadows", "0", CVAR_ARCHIVE, NULL,
"Set to 1 to enable shadows for entities");
2001-05-14 01:22:58 +00:00
r_skyname = Cvar_Get ("r_skyname", "none", CVAR_NONE, NULL,
"name of the current skybox");
r_speeds = Cvar_Get ("r_speeds", "0", CVAR_NONE, NULL, "Display drawing "
"time and statistics of what is being viewed");
r_timegraph = Cvar_Get ("r_timegraph", "0", CVAR_NONE, NULL,
"Toggle the display of a performance graph");
2002-04-25 14:34:15 +00:00
r_wateralpha = Cvar_Get ("r_wateralpha", "1", CVAR_ARCHIVE, NULL,
"Determine the opacity of liquids. 1 = opaque, "
"0 = transparent, otherwise translucent.");
r_waterripple = Cvar_Get ("r_waterripple", "0", CVAR_NONE, NULL,
"Set to make liquids ripple, try setting to 5");
r_waterwarp = Cvar_Get ("r_waterwarp", "1", CVAR_NONE, NULL,
"Toggles whether surfaces are warped in liquid.");
r_zgraph = Cvar_Get ("r_zgraph", "0", CVAR_NONE, NULL,
2001-05-18 21:05:38 +00:00
"Toggle the graph that reports the changes of "
"z-axis position");
scr_fov = Cvar_Get ("fov", "90", CVAR_NONE, scr_fov_f,
"Your field of view in degrees. Smaller than 90 zooms "
"in. Don't touch in fisheye mode, use ffov instead.");
scr_fisheye = Cvar_Get ("fisheye", "0", CVAR_NONE, scr_fisheye_f,
"Toggles fisheye mode.");
scr_fviews = Cvar_Get ("fviews", "6", CVAR_NONE, NULL, "The number of "
"fisheye views.");
scr_ffov = Cvar_Get ("ffov", "180", CVAR_NONE, scr_ffov_f, "Your field of "
"view in degrees in fisheye mode.");
2001-05-14 01:22:58 +00:00
scr_showpause = Cvar_Get ("showpause", "1", CVAR_NONE, NULL,
"Toggles display of pause graphic");
scr_showram = Cvar_Get ("showram", "1", CVAR_NONE, NULL,
2001-05-18 21:05:38 +00:00
"Show RAM icon if game is running low on memory");
2001-05-14 01:22:58 +00:00
scr_showturtle = Cvar_Get ("showturtle", "0", CVAR_NONE, NULL,
2001-05-18 21:05:38 +00:00
"Show a turtle icon if your fps is below 10");
scr_viewsize = Cvar_Get ("viewsize", "100", CVAR_ARCHIVE, viewsize_f,
2001-05-14 01:22:58 +00:00
"Set the screen size 30 minimum, 120 maximum");
r_data->graphheight = r_graphheight;
r_data->scr_viewsize = scr_viewsize;
}