]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
migrated light bounding box generation from r_shadow code to Portal_Visibility code...
authorhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 19 Sep 2003 19:50:51 +0000 (19:50 +0000)
committerhavoc <havoc@d7cf8633-e32d-0410-b094-e92efae38249>
Fri, 19 Sep 2003 19:50:51 +0000 (19:50 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3472 d7cf8633-e32d-0410-b094-e92efae38249

portals.c
portals.h
r_shadow.c

index df4cd3261b2708fdac387fcfe0dceacc107a0d88..ba7de15d6b59d475aadd7187f7ff33a34e266b77 100644 (file)
--- a/portals.c
+++ b/portals.c
@@ -328,6 +328,8 @@ typedef struct portalrecursioninfo_s
        qbyte *leafmark;
        model_t *model;
        vec3_t eye;
+       float *updateleafsmins;
+       float *updateleafsmaxs;
 }
 portalrecursioninfo_t;
 
@@ -388,6 +390,12 @@ void Portal_RecursiveFlow (portalrecursioninfo_t *info, mleaf_t *leaf, int first
        vec3_t center, v1, v2;
        tinyplane_t *newplanes;
 
+       for (i = 0;i < 3;i++)
+       {
+               if (info->updateleafsmins && info->updateleafsmins[i] > leaf->mins[i]) info->updateleafsmins[i] = leaf->mins[i];
+               if (info->updateleafsmaxs && info->updateleafsmaxs[i] < leaf->maxs[i]) info->updateleafsmaxs[i] = leaf->maxs[i];
+       }
+
        if (info->leafmark)
                info->leafmark[leaf - info->model->brushq1.leafs] = true;
 
@@ -462,7 +470,7 @@ void Portal_RecursiveFindLeafForFlow(portalrecursioninfo_t *info, mnode_t *node)
        }
 }
 
-void Portal_Visibility(model_t *model, const vec3_t eye, qbyte *leafmark, qbyte *surfacemark, const mplane_t *frustumplanes, int numfrustumplanes, int exact, float radius)
+void Portal_Visibility(model_t *model, const vec3_t eye, qbyte *leafmark, qbyte *surfacemark, const mplane_t *frustumplanes, int numfrustumplanes, int exact, float radius, float *updateleafsmins, float *updateleafsmaxs)
 {
        int i;
        portalrecursioninfo_t info;
@@ -499,6 +507,8 @@ void Portal_Visibility(model_t *model, const vec3_t eye, qbyte *leafmark, qbyte
        info.model = model;
        VectorCopy(eye, info.eye);
        info.numfrustumplanes = numfrustumplanes;
+       info.updateleafsmins = updateleafsmins;
+       info.updateleafsmaxs = updateleafsmaxs;
 
        Portal_RecursiveFindLeafForFlow(&info, model->brushq1.nodes);
 
index 25d8d3ceaa8363b32d5f4c9768da8d87a379ae7b..928447324389b6251a388488d2f555b45914072f 100644 (file)
--- a/portals.h
+++ b/portals.h
@@ -4,7 +4,7 @@
 
 int Portal_CheckPolygon(model_t *model, vec3_t eye, float *polypoints, int numpoints);
 int Portal_CheckBox(model_t *model, vec3_t eye, vec3_t a, vec3_t b);
-void Portal_Visibility(model_t *model, const vec3_t eye, qbyte *leafmark, qbyte *surfacemark, const mplane_t *frustumplanes, int numfrustumplanes, int exact, float radius);
+void Portal_Visibility(model_t *model, const vec3_t eye, qbyte *leafmark, qbyte *surfacemark, const mplane_t *frustumplanes, int numfrustumplanes, int exact, float radius, float *updateleafsmins, float *updateleafsmaxs);
 
 #endif
 
index 572997ac8a835508251d322cd9ce58580f135faf..160d4cca8f6fbc9ae0d96ba03b5db3fe1276f210 100644 (file)
@@ -1754,14 +1754,15 @@ void R_Shadow_NewWorldLight(vec3_t origin, float radius, vec3_t color, int style
                i = CL_PointQ1Contents(e->origin);
                if (r_shadow_portallight.integer && i != CONTENTS_SOLID && i != CONTENTS_SKY)
                {
-                       qbyte *byteleafpvs;
+                       //qbyte *byteleafpvs;
                        qbyte *bytesurfacepvs;
 
-                       byteleafpvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numleafs);
+                       //byteleafpvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numleafs);
                        bytesurfacepvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numsurfaces);
 
-                       Portal_Visibility(cl.worldmodel, e->origin, byteleafpvs, bytesurfacepvs, NULL, 0, true, RadiusFromBoundsAndOrigin(e->mins, e->maxs, e->origin));
+                       Portal_Visibility(cl.worldmodel, e->origin, NULL/*byteleafpvs*/, bytesurfacepvs, NULL, 0, true, RadiusFromBoundsAndOrigin(e->mins, e->maxs, e->origin), e->mins, e->maxs);
 
+                       /*
                        for (i = 0, leaf = cl.worldmodel->brushq1.leafs;i < cl.worldmodel->brushq1.numleafs;i++, leaf++)
                        {
                                if (byteleafpvs[i] && BoxesOverlap(leaf->mins, leaf->maxs, mins, maxs))
@@ -1773,12 +1774,13 @@ void R_Shadow_NewWorldLight(vec3_t origin, float radius, vec3_t color, int style
                                        }
                                }
                        }
+                       */
 
                        for (i = 0, surf = cl.worldmodel->brushq1.surfaces;i < cl.worldmodel->brushq1.numsurfaces;i++, surf++)
                                if (bytesurfacepvs[i] && BoxesOverlap(surf->poly_mins, surf->poly_maxs, mins, maxs))
                                        surf->castshadow = castshadowcount;
 
-                       Mem_Free(byteleafpvs);
+                       //Mem_Free(byteleafpvs);
                        Mem_Free(bytesurfacepvs);
                }
                else