float r_shadow_attenpower, r_shadow_attenscale;
-float varray_vertex3f2[65536*3];
-
rtlight_t *r_shadow_compilingrtlight;
dlight_t *r_shadow_worldlightchain;
dlight_t *r_shadow_selectedlight;
+dlight_t r_shadow_bufferlight;
vec3_t r_editlights_cursorlocation;
rtexture_t *lighttextures[5];
}
Cmd_AddCommand("r_shadow_help", R_Shadow_Help_f);
R_Shadow_EditLights_Init();
- r_shadow_mempool = Mem_AllocPool("R_Shadow");
+ r_shadow_mempool = Mem_AllocPool("R_Shadow", 0, NULL);
r_shadow_worldlightchain = NULL;
maxshadowelements = 0;
shadowelements = NULL;
// optimize for them as noted above
}
-void R_Shadow_Stage_LightWithoutShadows(void)
+void R_Shadow_Stage_Light(int shadowtest)
{
rmeshstate_t m;
memset(&m, 0, sizeof(m));
qglDepthFunc(GL_EQUAL);
qglCullFace(GL_FRONT); // quake is backwards, this culls back faces
qglEnable(GL_CULL_FACE);
- qglDisable(GL_STENCIL_TEST);
- if (gl_support_stenciltwoside)
- qglDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);
- qglStencilMask(~0);
- qglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
- qglStencilFunc(GL_EQUAL, 128, ~0);
- r_shadowstage = SHADOWSTAGE_LIGHT;
- c_rt_lights++;
-}
-
-void R_Shadow_Stage_LightWithShadows(void)
-{
- rmeshstate_t m;
- memset(&m, 0, sizeof(m));
- R_Mesh_State(&m);
- GL_BlendFunc(GL_ONE, GL_ONE);
- GL_DepthMask(false);
- GL_DepthTest(true);
- qglPolygonOffset(0, 0);
- //qglDisable(GL_POLYGON_OFFSET_FILL);
- GL_Color(1, 1, 1, 1);
- GL_ColorMask(r_refdef.colormask[0], r_refdef.colormask[1], r_refdef.colormask[2], 1);
- qglDepthFunc(GL_EQUAL);
- qglCullFace(GL_FRONT); // quake is backwards, this culls back faces
- qglEnable(GL_STENCIL_TEST);
+ if (shadowtest)
+ qglEnable(GL_STENCIL_TEST);
+ else
+ qglDisable(GL_STENCIL_TEST);
if (gl_support_stenciltwoside)
qglDisable(GL_STENCIL_TEST_TWO_SIDE_EXT);
qglStencilMask(~0);
if (!visiblevolumes)
{
- if (shadow && gl_stencil)
- R_Shadow_Stage_LightWithShadows();
- else
- R_Shadow_Stage_LightWithoutShadows();
+ R_Shadow_Stage_Light(shadow && gl_stencil);
ent = &cl_entities[0].render;
if (ent->model && ent->model->DrawLight)
{
dlight_t *light;
+ if (!r_editlights.integer)
+ {
+ Con_Print("Cannot edit lights when not in editing mode. Set r_editlights to 1.\n");
+ return;
+ }
+
for (light = r_shadow_worldlightchain;light;light = light->next)
{
R_Shadow_SelectLight(light);
);
}
+void R_Shadow_EditLights_CopyInfo_f(void)
+{
+ if (!r_editlights.integer)
+ {
+ Con_Print("Cannot copy light info when not in editing mode. Set r_editlights to 1.\n");
+ return;
+ }
+ if (!r_shadow_selectedlight)
+ {
+ Con_Print("No selected light.\n");
+ return;
+ }
+ VectorCopy(r_shadow_selectedlight->angles, r_shadow_bufferlight.angles);
+ VectorCopy(r_shadow_selectedlight->color, r_shadow_bufferlight.color);
+ r_shadow_bufferlight.radius = r_shadow_selectedlight->radius;
+ r_shadow_bufferlight.style = r_shadow_selectedlight->style;
+ if (r_shadow_selectedlight->cubemapname)
+ strcpy(r_shadow_bufferlight.cubemapname, r_shadow_selectedlight->cubemapname);
+ else
+ r_shadow_bufferlight.cubemapname[0] = 0;
+ r_shadow_bufferlight.shadow = r_shadow_selectedlight->shadow;
+ r_shadow_bufferlight.corona = r_shadow_selectedlight->corona;
+}
+
+void R_Shadow_EditLights_PasteInfo_f(void)
+{
+ vec3_t origin;
+ VectorCopy(r_shadow_selectedlight->origin, origin);
+ if (!r_editlights.integer)
+ {
+ Con_Print("Cannot paste light info when not in editing mode. Set r_editlights to 1.\n");
+ return;
+ }
+ if (!r_shadow_selectedlight)
+ {
+ Con_Print("No selected light.\n");
+ return;
+ }
+ R_Shadow_FreeWorldLight(r_shadow_selectedlight);
+ r_shadow_selectedlight = NULL;
+ R_Shadow_NewWorldLight(origin, r_shadow_bufferlight.angles, r_shadow_bufferlight.color, r_shadow_bufferlight.radius, r_shadow_bufferlight.corona, r_shadow_bufferlight.style, r_shadow_bufferlight.shadow, r_shadow_bufferlight.cubemapname);
+}
+
void R_Shadow_EditLights_Init(void)
{
Cvar_RegisterVariable(&r_editlights);
Cmd_AddCommand("r_editlights_togglecorona", R_Shadow_EditLights_ToggleCorona_f);
Cmd_AddCommand("r_editlights_importlightentitiesfrommap", R_Shadow_EditLights_ImportLightEntitiesFromMap_f);
Cmd_AddCommand("r_editlights_importlightsfile", R_Shadow_EditLights_ImportLightsFile_f);
+ Cmd_AddCommand("r_editlights_copyinfo", R_Shadow_EditLights_CopyInfo_f);
+ Cmd_AddCommand("r_editlights_pasteinfo", R_Shadow_EditLights_PasteInfo_f);
}