]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - r_shadow.c
another attempt to fix quoted strings in windows commandline, but more so a cleanup
[xonotic/darkplaces.git] / r_shadow.c
index a209709ec1cacc82f7cdbc268dedf1c4d6d0b3a4..66ceaa7ae02eaa434130625eca350f3a6fadbdfb 100644 (file)
@@ -205,11 +205,10 @@ int c_rtcached_shadowmeshes, c_rtcached_shadowtris;
 
 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];
@@ -392,7 +391,7 @@ void R_Shadow_Init(void)
        }
        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;
@@ -908,7 +907,7 @@ void R_Shadow_Stage_ShadowVolumes(void)
        // 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));
@@ -923,31 +922,10 @@ void R_Shadow_Stage_LightWithoutShadows(void)
        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);
@@ -2206,10 +2184,7 @@ void R_DrawRTLight(rtlight_t *rtlight, int visiblevolumes)
 
        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)
@@ -3219,6 +3194,12 @@ void R_Shadow_EditLights_EditAll_f(void)
 {
        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);
@@ -3345,6 +3326,49 @@ void R_Shadow_EditLights_Help_f(void)
        );
 }
 
+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);
@@ -3367,5 +3391,7 @@ void R_Shadow_EditLights_Init(void)
        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);
 }