#include "csprogs.h"
#include "image.h"
-cvar_t r_ambient = {0, "r_ambient", "0", "brightens map, value is 0-128"};
-cvar_t r_lockpvs = {0, "r_lockpvs", "0", "disables pvs switching, allows you to walk around and inspect what is visible from a given location in the map (anything not visible from your current location will not be drawn)"};
-cvar_t r_lockvisibility = {0, "r_lockvisibility", "0", "disables visibility updates, allows you to walk around and inspect what is visible from a given viewpoint in the map (anything offscreen at the moment this is enabled will not be drawn)"};
-cvar_t r_useportalculling = {0, "r_useportalculling", "2", "improve framerate with r_novis 1 by using portal culling - still not as good as compiled visibility data in the map, but it helps (a value of 2 forces use of this even with vis data, which improves framerates in maps without too much complexity, but hurts in extremely complex maps, which is why 2 is not the default mode)"};
-cvar_t r_usesurfaceculling = {0, "r_usesurfaceculling", "1", "skip off-screen surfaces (1 = cull surfaces if the map is likely to benefit, 2 = always cull surfaces)"};
-cvar_t r_vis_trace = {0, "r_vis_trace", "0", "test if each portal or leaf is visible using tracelines"};
-cvar_t r_vis_trace_samples = {0, "r_vis_trace_samples", "1", "use this many randomly positioned tracelines each frame to refresh the visible timer"};
-cvar_t r_vis_trace_delay = {0, "r_vis_trace_delay", "1", "keep a portal visible for this many seconds"};
-cvar_t r_vis_trace_eyejitter = {0, "r_vis_trace_eyejitter", "8", "use a random offset of this much on the start of each traceline"};
-cvar_t r_vis_trace_enlarge = {0, "r_vis_trace_enlarge", "0", "make portal bounds bigger for tests by (1+this)*size"};
-cvar_t r_vis_trace_expand = {0, "r_vis_trace_expand", "0", "make portal bounds bigger for tests by this many units"};
-cvar_t r_vis_trace_pad = {0, "r_vis_trace_pad", "8", "accept traces that hit within this many units of the portal"};
-cvar_t r_vis_trace_surfaces = {0, "r_vis_trace_surfaces", "0", "also use tracelines to cull surfaces"};
-cvar_t r_q3bsp_renderskydepth = {0, "r_q3bsp_renderskydepth", "0", "draws sky depth masking in q3 maps (as in q1 maps), this means for example that sky polygons can hide other things"};
+cvar_t r_ambient = {CVAR_CLIENT, "r_ambient", "0", "brightens map, value is 0-128"};
+cvar_t r_lockpvs = {CVAR_CLIENT, "r_lockpvs", "0", "disables pvs switching, allows you to walk around and inspect what is visible from a given location in the map (anything not visible from your current location will not be drawn)"};
+cvar_t r_lockvisibility = {CVAR_CLIENT, "r_lockvisibility", "0", "disables visibility updates, allows you to walk around and inspect what is visible from a given viewpoint in the map (anything offscreen at the moment this is enabled will not be drawn)"};
+cvar_t r_useportalculling = {CVAR_CLIENT, "r_useportalculling", "2", "improve framerate with r_novis 1 by using portal culling - still not as good as compiled visibility data in the map, but it helps (a value of 2 forces use of this even with vis data, which improves framerates in maps without too much complexity, but hurts in extremely complex maps, which is why 2 is not the default mode)"};
+cvar_t r_usesurfaceculling = {CVAR_CLIENT, "r_usesurfaceculling", "1", "skip off-screen surfaces (1 = cull surfaces if the map is likely to benefit, 2 = always cull surfaces)"};
+cvar_t r_vis_trace = {CVAR_CLIENT, "r_vis_trace", "0", "test if each portal or leaf is visible using tracelines"};
+cvar_t r_vis_trace_samples = {CVAR_CLIENT, "r_vis_trace_samples", "1", "use this many randomly positioned tracelines each frame to refresh the visible timer"};
+cvar_t r_vis_trace_delay = {CVAR_CLIENT, "r_vis_trace_delay", "1", "keep a portal visible for this many seconds"};
+cvar_t r_vis_trace_eyejitter = {CVAR_CLIENT, "r_vis_trace_eyejitter", "8", "use a random offset of this much on the start of each traceline"};
+cvar_t r_vis_trace_enlarge = {CVAR_CLIENT, "r_vis_trace_enlarge", "0", "make portal bounds bigger for tests by (1+this)*size"};
+cvar_t r_vis_trace_expand = {CVAR_CLIENT, "r_vis_trace_expand", "0", "make portal bounds bigger for tests by this many units"};
+cvar_t r_vis_trace_pad = {CVAR_CLIENT, "r_vis_trace_pad", "8", "accept traces that hit within this many units of the portal"};
+cvar_t r_vis_trace_surfaces = {CVAR_CLIENT, "r_vis_trace_surfaces", "0", "also use tracelines to cull surfaces"};
+cvar_t r_q3bsp_renderskydepth = {CVAR_CLIENT, "r_q3bsp_renderskydepth", "0", "draws sky depth masking in q3 maps (as in q1 maps), this means for example that sky polygons can hide other things"};
/*
===============
R_Mesh_Draw(0, numpoints, 0, numpoints - 2, polygonelement3i, NULL, 0, polygonelement3s, NULL, 0);
}
-// LordHavoc: this is just a nice debugging tool, very slow
+// LadyHavoc: this is just a nice debugging tool, very slow
void R_DrawPortals(void)
{
int i, leafnum;
{
if (ent->model == NULL)
return;
- R_DrawModelSurfaces(ent, true, true, false, false, false);
+ R_DrawModelSurfaces(ent, true, true, false, false, false, false);
}
void R_Q1BSP_DrawAddWaterPlanes(entity_render_t *ent)
dp_model_t *model = ent->model;
if (model == NULL)
return;
- R_DrawModelSurfaces(ent, false, true, false, false, false);
+ R_DrawModelSurfaces(ent, false, true, false, false, false, false);
}
void R_Q1BSP_DrawDepth(entity_render_t *ent)
GL_BlendFunc(GL_ONE, GL_ZERO);
GL_DepthMask(true);
// R_Mesh_ResetTextureState();
- R_DrawModelSurfaces(ent, false, false, true, false, false);
+ R_DrawModelSurfaces(ent, false, false, true, false, false, false);
GL_ColorMask(r_refdef.view.colormask[0], r_refdef.view.colormask[1], r_refdef.view.colormask[2], 1);
}
{
if (ent->model == NULL)
return;
- R_DrawModelSurfaces(ent, false, false, false, true, false);
+ R_DrawModelSurfaces(ent, false, false, false, true, false, false);
}
void R_Q1BSP_DrawPrepass(entity_render_t *ent)
dp_model_t *model = ent->model;
if (model == NULL)
return;
- R_DrawModelSurfaces(ent, false, true, false, false, true);
+ R_DrawModelSurfaces(ent, false, true, false, false, true, false);
}
typedef struct r_q1bsp_getlightinfo_s
if (!castshadow)
continue;
insidebox = BoxInsideBox(surface->mins, surface->maxs, info->lightmins, info->lightmaxs);
- for (triangleindex = 0, t = surface->num_firstshadowmeshtriangle, e = info->model->brush.shadowmesh->element3i + t * 3;triangleindex < surface->num_triangles;triangleindex++, t++, e += 3)
+ for (triangleindex = 0, t = surface->num_firsttriangle, e = info->model->surfmesh.data_element3i + t * 3;triangleindex < surface->num_triangles;triangleindex++, t++, e += 3)
{
- v[0] = info->model->brush.shadowmesh->vertex3f + e[0] * 3;
- v[1] = info->model->brush.shadowmesh->vertex3f + e[1] * 3;
- v[2] = info->model->brush.shadowmesh->vertex3f + e[2] * 3;
+ v[0] = info->model->surfmesh.data_vertex3f + e[0] * 3;
+ v[1] = info->model->surfmesh.data_vertex3f + e[1] * 3;
+ v[2] = info->model->surfmesh.data_vertex3f + e[2] * 3;
VectorCopy(v[0], v2[0]);
VectorCopy(v[1], v2[1]);
VectorCopy(v[2], v2[2]);
currentmaterialflags = R_GetCurrentTexture(surface->texture)->currentmaterialflags;
castshadow = !(currentmaterialflags & MATERIALFLAG_NOSHADOW);
insidebox = BoxInsideBox(surface->mins, surface->maxs, info->lightmins, info->lightmaxs);
- for (triangleindex = 0, t = surface->num_firstshadowmeshtriangle, e = info->model->brush.shadowmesh->element3i + t * 3;triangleindex < surface->num_triangles;triangleindex++, t++, e += 3)
+ for (triangleindex = 0, t = surface->num_firsttriangle, e = info->model->surfmesh.data_element3i + t * 3;triangleindex < surface->num_triangles;triangleindex++, t++, e += 3)
{
- v[0] = info->model->brush.shadowmesh->vertex3f + e[0] * 3;
- v[1] = info->model->brush.shadowmesh->vertex3f + e[1] * 3;
- v[2] = info->model->brush.shadowmesh->vertex3f + e[2] * 3;
+ v[0] = info->model->surfmesh.data_vertex3f + e[0] * 3;
+ v[1] = info->model->surfmesh.data_vertex3f + e[1] * 3;
+ v[2] = info->model->surfmesh.data_vertex3f + e[2] * 3;
VectorCopy(v[0], v2[0]);
VectorCopy(v[1], v2[1]);
VectorCopy(v[2], v2[2]);
surface = info->model->data_surfaces + surfaceindex;
currentmaterialflags = R_GetCurrentTexture(surface->texture)->currentmaterialflags;
castshadow = !(currentmaterialflags & MATERIALFLAG_NOSHADOW);
- t = leaf->itemindex + surface->num_firstshadowmeshtriangle - surface->num_firsttriangle;
- e = info->model->brush.shadowmesh->element3i + t * 3;
- v[0] = info->model->brush.shadowmesh->vertex3f + e[0] * 3;
- v[1] = info->model->brush.shadowmesh->vertex3f + e[1] * 3;
- v[2] = info->model->brush.shadowmesh->vertex3f + e[2] * 3;
+ t = leaf->itemindex;
+ e = info->model->surfmesh.data_element3i + t * 3;
+ v[0] = info->model->surfmesh.data_vertex3f + e[0] * 3;
+ v[1] = info->model->surfmesh.data_vertex3f + e[1] * 3;
+ v[2] = info->model->surfmesh.data_vertex3f + e[2] * 3;
VectorCopy(v[0], v2[0]);
VectorCopy(v[1], v2[1]);
VectorCopy(v[2], v2[2]);
info->outnumsurfaces = 0;
memset(info->outleafpvs, 0, (info->model->brush.num_leafs + 7) >> 3);
memset(info->outsurfacepvs, 0, (info->model->nummodelsurfaces + 7) >> 3);
- if (info->model->brush.shadowmesh)
- memset(info->outshadowtrispvs, 0, (info->model->brush.shadowmesh->numtriangles + 7) >> 3);
- else
- memset(info->outshadowtrispvs, 0, (info->model->surfmesh.num_triangles + 7) >> 3);
+ memset(info->outshadowtrispvs, 0, (info->model->surfmesh.num_triangles + 7) >> 3);
memset(info->outlighttrispvs, 0, (info->model->surfmesh.num_triangles + 7) >> 3);
}
else
memset(visitingleafpvs, 0, (info.model->brush.num_leafs + 7) >> 3);
memset(outleafpvs, 0, (info.model->brush.num_leafs + 7) >> 3);
memset(outsurfacepvs, 0, (info.model->nummodelsurfaces + 7) >> 3);
- if (info.model->brush.shadowmesh)
- memset(outshadowtrispvs, 0, (info.model->brush.shadowmesh->numtriangles + 7) >> 3);
- else
- memset(outshadowtrispvs, 0, (info.model->surfmesh.num_triangles + 7) >> 3);
+ memset(outshadowtrispvs, 0, (info.model->surfmesh.num_triangles + 7) >> 3);
memset(outlighttrispvs, 0, (info.model->surfmesh.num_triangles + 7) >> 3);
if (info.model->brush.GetPVS && !info.noocclusion)
info.pvs = info.model->brush.GetPVS(info.model, info.relativelightorigin);
int surfacelistindex;
int sidetotals[6] = { 0, 0, 0, 0, 0, 0 }, sidemasks = 0;
int i;
- if (!model->brush.shadowmesh)
- return;
// FIXME: the sidetotals code incorrectly assumes that static_meshchain is
// a single mesh - to prevent that from crashing (sideoffsets, sidetotals
// exceeding the number of triangles in a single mesh) we have to make sure
// that we make only a single mesh - so over-estimate the size of the mesh
// to match the model.
- r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap = Mod_ShadowMesh_Begin(r_main_mempool, model->surfmesh.num_vertices, model->surfmesh.num_triangles, NULL, NULL, NULL, false, true);
- R_Shadow_PrepareShadowSides(model->brush.shadowmesh->numtriangles);
+ r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap = Mod_ShadowMesh_Begin(r_main_mempool, model->surfmesh.num_vertices, model->surfmesh.num_triangles);
+ R_Shadow_PrepareShadowSides(model->surfmesh.num_triangles);
for (surfacelistindex = 0;surfacelistindex < numsurfaces;surfacelistindex++)
{
surface = model->data_surfaces + surfacelist[surfacelistindex];
- sidemasks |= R_Shadow_ChooseSidesFromBox(surface->num_firstshadowmeshtriangle, surface->num_triangles, model->brush.shadowmesh->vertex3f, model->brush.shadowmesh->element3i, &r_shadow_compilingrtlight->matrix_worldtolight, relativelightorigin, relativelightdirection, r_shadow_compilingrtlight->cullmins, r_shadow_compilingrtlight->cullmaxs, surface->mins, surface->maxs, surface->texture->basematerialflags & MATERIALFLAG_NOSHADOW ? NULL : sidetotals);
+ sidemasks |= R_Shadow_ChooseSidesFromBox(surface->num_firsttriangle, surface->num_triangles, model->surfmesh.data_vertex3f, model->surfmesh.data_element3i, &r_shadow_compilingrtlight->matrix_worldtolight, relativelightorigin, relativelightdirection, r_shadow_compilingrtlight->cullmins, r_shadow_compilingrtlight->cullmaxs, surface->mins, surface->maxs, surface->texture->basematerialflags & MATERIALFLAG_NOSHADOW ? NULL : sidetotals);
}
- R_Shadow_ShadowMapFromList(model->brush.shadowmesh->numverts, model->brush.shadowmesh->numtriangles, model->brush.shadowmesh->vertex3f, model->brush.shadowmesh->element3i, numshadowsides, sidetotals, shadowsides, shadowsideslist);
- r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap = Mod_ShadowMesh_Finish(r_main_mempool, r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap, false, true);
+ R_Shadow_ShadowMapFromList(model->surfmesh.num_vertices, model->surfmesh.num_triangles, model->surfmesh.data_vertex3f, model->surfmesh.data_element3i, numshadowsides, sidetotals, shadowsides, shadowsideslist);
+ r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap = Mod_ShadowMesh_Finish(r_shadow_compilingrtlight->static_meshchain_shadow_shadowmap, true);
r_shadow_compilingrtlight->static_shadowmap_receivers &= sidemasks;
for(i = 0;i<6;i++)
if(!sidetotals[i])
}
//Made by [515]
-static void R_ReplaceWorldTexture (void)
+static void R_ReplaceWorldTexture_f(cmd_state_t *cmd)
{
dp_model_t *m;
texture_t *t;
}
m = r_refdef.scene.worldmodel;
- if(Cmd_Argc() < 2)
+ if(Cmd_Argc(cmd) < 2)
{
Con_Print("r_replacemaptexture <texname> <newtexname> - replaces texture\n");
Con_Print("r_replacemaptexture <texname> - switch back to default texture\n");
Con_Print("This command works only in singleplayer\n");
return;
}
- r = Cmd_Argv(1);
- newt = Cmd_Argv(2);
+ r = Cmd_Argv(cmd, 1);
+ newt = Cmd_Argv(cmd, 2);
if(!newt[0])
newt = r;
for(i=0,t=m->data_textures;i<m->num_textures;i++,t++)
}
//Made by [515]
-static void R_ListWorldTextures (void)
+static void R_ListWorldTextures_f(cmd_state_t *cmd)
{
dp_model_t *m;
texture_t *t;
Cvar_RegisterVariable(&r_vis_trace_surfaces);
Cvar_RegisterVariable(&r_q3bsp_renderskydepth);
- Cmd_AddCommand ("r_replacemaptexture", R_ReplaceWorldTexture, "override a map texture for testing purposes");
- Cmd_AddCommand ("r_listmaptextures", R_ListWorldTextures, "list all textures used by the current map");
+ Cmd_AddCommand(&cmd_client, "r_replacemaptexture", R_ReplaceWorldTexture_f, "override a map texture for testing purposes");
+ Cmd_AddCommand(&cmd_client, "r_listmaptextures", R_ListWorldTextures_f, "list all textures used by the current map");
//R_RegisterModule("GL_Surf", gl_surf_start, gl_surf_shutdown, gl_surf_newmap);
}