cvar_t r_drawentities = {0, "r_drawentities","1"};
cvar_t r_drawviewmodel = {0, "r_drawviewmodel","1"};
cvar_t r_shadows = {CVAR_SAVE, "r_shadows", "1"};
-cvar_t r_staticworldlights = {0, "r_staticworldlights", "1"};
+cvar_t r_shadow_staticworldlights = {0, "r_shadow_staticworldlights", "1"};
cvar_t r_speeds = {0, "r_speeds","0"};
cvar_t r_fullbright = {0, "r_fullbright","0"};
cvar_t r_wateralpha = {CVAR_SAVE, "r_wateralpha","1"};
Cvar_RegisterVariable (&r_drawentities);
Cvar_RegisterVariable (&r_drawviewmodel);
Cvar_RegisterVariable (&r_shadows);
- Cvar_RegisterVariable (&r_staticworldlights);
+ Cvar_RegisterVariable (&r_shadow_staticworldlights);
Cvar_RegisterVariable (&r_speeds);
Cvar_RegisterVariable (&r_fullbrights);
Cvar_RegisterVariable (&r_wateralpha);
Cvar_RegisterVariable (&r_dynamic);
Cvar_RegisterVariable (&r_fullbright);
Cvar_RegisterVariable (&r_textureunits);
- if (gamemode == GAME_NEHAHRA)
+ if (gamemode == GAME_NEHAHRA || gamemode == GAME_NEXIUZ)
Cvar_SetValue("r_fullbrights", 0);
R_RegisterModule("GL_Main", gl_main_start, gl_main_shutdown, gl_main_newmap);
}
R_DrawViewModel
=============
*/
+/*
void R_DrawViewModel (void)
{
entity_render_t *ent;
R_UpdateEntLights(ent);
ent->model->Draw(ent);
}
+*/
void R_DrawNoModel(entity_render_t *ent);
void R_DrawModels ()
if (!r_drawentities.integer)
return;
- R_DrawViewModel();
for (i = 0;i < r_refdef.numentities;i++)
{
ent = r_refdef.entities[i];
memset(&m, 0, sizeof(m));
m.blendfunc1 = GL_ONE;
m.blendfunc2 = GL_ONE;
+ if (r_shadow_realtime.integer >= 3)
+ m.depthdisable = true;
R_Mesh_State(&m);
+ qglDisable(GL_CULL_FACE);
GL_Color(0.0 * r_colorscale, 0.0125 * r_colorscale, 0.1 * r_colorscale, 1);
}
else
if (!visiblevolumes)
R_Shadow_Stage_ShadowVolumes();
- if (wl->shadowvolume && r_staticworldlights.integer)
- R_Shadow_DrawWorldLightShadowVolume(&cl_entities[0].render.matrix, wl);
+ ent = &cl_entities[0].render;
+ if (wl->shadowvolume && r_shadow_staticworldlights.integer)
+ R_Shadow_DrawWorldLightShadowVolume(&ent->matrix, wl);
else
- R_TestAndDrawShadowVolume(&cl_entities[0].render, wl->origin, cullradius, lightradius, clipmins, clipmaxs);
+ R_TestAndDrawShadowVolume(ent, wl->origin, cullradius / ent->scale, lightradius / ent->scale, clipmins, clipmaxs);
if (r_drawentities.integer)
{
for (i = 0;i < r_refdef.numentities;i++)
&& ent->maxs[1] >= wl->mins[1] && ent->mins[1] <= wl->maxs[1]
&& ent->maxs[2] >= wl->mins[2] && ent->mins[2] <= wl->maxs[2]
&& !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- R_TestAndDrawShadowVolume(r_refdef.entities[i], wl->origin, cullradius, lightradius, clipmins, clipmaxs);
+ R_TestAndDrawShadowVolume(r_refdef.entities[i], wl->origin, cullradius / ent->scale, lightradius / ent->scale, clipmins, clipmaxs);
}
}
if (wl->numsurfaces)
R_Model_Brush_DrawLightForSurfaceList(ent, relativelightorigin, relativeeyeorigin, lightradius, lightcolor, wl->surfaces, wl->numsurfaces);
else
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, lightcolor);
+ ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
}
if (r_drawentities.integer)
{
{
Matrix4x4_Transform(&ent->inversematrix, wl->origin, relativelightorigin);
Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, lightcolor);
- }
- }
- }
-
- if (R_Shadow_Stage_EraseShadowVolumes())
- {
- if (wl->shadowvolume && r_staticworldlights.integer)
- R_Shadow_DrawWorldLightShadowVolume(&cl_entities[0].render.matrix, wl);
- else
- R_TestAndDrawShadowVolume(&cl_entities[0].render, wl->origin, cullradius, lightradius, clipmins, clipmaxs);
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent->maxs[0] >= wl->mins[0] && ent->mins[0] <= wl->maxs[0]
- && ent->maxs[1] >= wl->mins[1] && ent->mins[1] <= wl->maxs[1]
- && ent->maxs[2] >= wl->mins[2] && ent->mins[2] <= wl->maxs[2]
- && !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- R_TestAndDrawShadowVolume(r_refdef.entities[i], wl->origin, cullradius, lightradius, clipmins, clipmaxs);
+ ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
}
}
}
if (!visiblevolumes)
R_Shadow_Stage_ShadowVolumes();
- if (sl->shadowvolume && r_staticworldlights.integer)
+ if (sl->shadowvolume && r_shadow_staticworldlights.integer)
R_DrawWorldLightShadowVolume(&cl_entities[0].render.matrix, sl->shadowvolume);
else
R_TestAndDrawShadowVolume(&cl_entities[0].render, sl->origin, cullradius, lightradius);
}
}
}
-
- R_Shadow_Stage_EraseShadowVolumes();
- if (sl->shadowvolume && r_staticworldlights.integer)
- R_DrawWorldLightShadowVolume(&cl_entities[0].render.matrix, sl->shadowvolume);
- else
- R_TestAndDrawShadowVolume(&cl_entities[0].render, sl->origin, cullradius, lightradius);
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent->maxs[0] >= sl->mins[0] && ent->mins[0] <= sl->maxs[0]
- && ent->maxs[1] >= sl->mins[1] && ent->mins[1] <= sl->maxs[1]
- && ent->maxs[2] >= sl->mins[2] && ent->mins[2] <= sl->maxs[2]
- && !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- R_TestAndDrawShadowVolume(r_refdef.entities[i], sl->origin, cullradius, lightradius);
- }
- }
}
}
*/
if (!visiblevolumes)
R_Shadow_Stage_ShadowVolumes();
- R_TestAndDrawShadowVolume(&cl_entities[0].render, rd->origin, cullradius, lightradius, clipmins, clipmaxs);
+ ent = &cl_entities[0].render;
+ R_TestAndDrawShadowVolume(ent, rd->origin, cullradius / ent->scale, lightradius / ent->scale, clipmins, clipmaxs);
if (r_drawentities.integer)
{
for (i = 0;i < r_refdef.numentities;i++)
{
ent = r_refdef.entities[i];
if (ent != rd->ent && !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- R_TestAndDrawShadowVolume(ent, rd->origin, cullradius, lightradius, clipmins, clipmaxs);
+ R_TestAndDrawShadowVolume(ent, rd->origin, cullradius / ent->scale, lightradius / ent->scale, clipmins, clipmaxs);
}
}
{
Matrix4x4_Transform(&ent->inversematrix, rd->origin, relativelightorigin);
Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, lightcolor);
+ ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
}
if (r_drawentities.integer)
{
{
Matrix4x4_Transform(&ent->inversematrix, rd->origin, relativelightorigin);
Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, lightcolor);
- }
- }
- }
-
- if (R_Shadow_Stage_EraseShadowVolumes())
- {
- R_TestAndDrawShadowVolume(&cl_entities[0].render, rd->origin, cullradius, lightradius, clipmins, clipmaxs);
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent != rd->ent && !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- R_TestAndDrawShadowVolume(ent, rd->origin, cullradius, lightradius, clipmins, clipmaxs);
+ ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
}
}
}
if (!visiblevolumes)
R_Shadow_Stage_End();
+ qglEnable(GL_CULL_FACE);
qglDisable(GL_SCISSOR_TEST);
}
}
else if (!gl_stencil)
{
- Con_Printf("Stencil not enabled, turning off r_shadow_realtime, please type vid_stencil 1;vid_restart and try again\n");
+ Con_Printf("Stencil not enabled, turning off r_shadow_realtime, please type vid_stencil 1;vid_bitsperpixel 32;vid_restart and try again\n");
Cvar_SetValueQuick(&r_shadow_realtime, 0);
}
else if (!gl_combine.integer)
R_DrawModels(r_shadow_lightingmode > 0);
R_TimeReport("models");
- if (r_shadows.integer == 1)
+ if (r_shadows.integer == 1 && r_shadow_lightingmode <= 0)
{
R_DrawFakeShadows();
R_TimeReport("fakeshadow");
R_MeshQueue_Render();
R_MeshQueue_EndScene();
- if (r_shadow_realtime.integer == 2)
+ if (r_shadow_realtime.integer >= 2)
{
R_ShadowVolumeLighting(true);
R_TimeReport("shadowvolume");
// R_DrawNoModelCallback(ent, 0);
}
-void R_CalcBeamVerts (float *vert, vec3_t org1, vec3_t org2, float width)
+void R_CalcBeamVerts (float *vert, const vec3_t org1, const vec3_t org2, float width)
{
vec3_t right1, right2, diff, normal;