- if (d_lightstylevalue[sl->style] <= 0)
- continue;
- if (r_shadow_debuglight.integer >= 0 && lnum != r_shadow_debuglight.integer)
- continue;
- cullradius = sl->cullradius;
- lightradius = sl->lightradius;
- if (VIS_CullBox(sl->mins, sl->maxs) || VIS_CullSphere(sl->origin, lightradius))
- continue;
-
- f = d_lightstylevalue[sl->style] * (1.0f / 32768.0f);
- VectorScale(sl->light, f, lightcolor);
-
- if (!visiblevolumes)
- R_Shadow_Stage_ShadowVolumes();
- 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);
- 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_Light();
- ent = &cl_entities[0].render;
- if (ent->model && ent->model->DrawLight)
- {
- Matrix4x4_Transform(&ent->inversematrix, sl->origin, relativelightorigin);
- Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, sl->distbias, sl->subtract, lightcolor);
- }
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent->visframe == r_framecount && ent->model && ent->model->DrawLight
- && 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)
- {
- Matrix4x4_Transform(&ent->inversematrix, sl->origin, relativelightorigin);
- Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius, sl->distbias, sl->subtract, lightcolor);
- }
- }
- }
- }
- }
- */
- for (lnum = 0, rd = r_dlight;lnum < r_numdlights;lnum++, rd++)
- {
- cullradius = rd->cullradius;
- lightradius = rd->cullradius;
- if (VIS_CullSphere(rd->origin, lightradius))
- continue;
-
- VectorScale(rd->light, (1.0f / 8192.0f), lightcolor);
- clipmins[0] = rd->origin[0] - cullradius;
- clipmins[1] = rd->origin[1] - cullradius;
- clipmins[2] = rd->origin[2] - cullradius;
- clipmaxs[0] = rd->origin[0] + cullradius;
- clipmaxs[1] = rd->origin[1] + cullradius;
- clipmaxs[2] = rd->origin[2] + cullradius;
-
- if (R_Shadow_ScissorForBBoxAndSphere(clipmins, clipmaxs, rd->origin, rd->cullradius))
- continue;
-
- if (!visiblevolumes)
- R_Shadow_Stage_ShadowVolumes();
- ent = &cl_entities[0].render;
- R_TestAndDrawShadowVolume(ent, rd->origin, cullradius, lightradius, clipmins, clipmaxs, clipmins, clipmaxs);
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent != rd->ent)
- R_TestAndDrawShadowVolume(ent, rd->origin, cullradius, lightradius, clipmins, clipmaxs, clipmins, clipmaxs);
- }
- }
-
- if (!visiblevolumes)
- {
- R_Shadow_Stage_Light();
- ent = &cl_entities[0].render;
- if (ent->model && ent->model->DrawLight)
- {
- Matrix4x4_Transform(&ent->inversematrix, rd->origin, relativelightorigin);
- Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
- }
- if (r_drawentities.integer)
- {
- for (i = 0;i < r_refdef.numentities;i++)
- {
- ent = r_refdef.entities[i];
- if (ent->visframe == r_framecount && ent->model && ent->model->DrawLight
- && !(ent->effects & EF_ADDITIVE) && ent->alpha == 1)
- {
- Matrix4x4_Transform(&ent->inversematrix, rd->origin, relativelightorigin);
- Matrix4x4_Transform(&ent->inversematrix, r_origin, relativeeyeorigin);
- ent->model->DrawLight(ent, relativelightorigin, relativeeyeorigin, lightradius / ent->scale, lightcolor);
- }
- }
- }
- }