git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@3472
d7cf8633-e32d-0410-b094-
e92efae38249
qbyte *leafmark;
model_t *model;
vec3_t eye;
qbyte *leafmark;
model_t *model;
vec3_t eye;
+ float *updateleafsmins;
+ float *updateleafsmaxs;
vec3_t center, v1, v2;
tinyplane_t *newplanes;
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;
if (info->leafmark)
info->leafmark[leaf - info->model->brushq1.leafs] = true;
-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;
{
int i;
portalrecursioninfo_t info;
info.model = model;
VectorCopy(eye, info.eye);
info.numfrustumplanes = numfrustumplanes;
info.model = model;
VectorCopy(eye, info.eye);
info.numfrustumplanes = numfrustumplanes;
+ info.updateleafsmins = updateleafsmins;
+ info.updateleafsmaxs = updateleafsmaxs;
Portal_RecursiveFindLeafForFlow(&info, model->brushq1.nodes);
Portal_RecursiveFindLeafForFlow(&info, model->brushq1.nodes);
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);
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);
i = CL_PointQ1Contents(e->origin);
if (r_shadow_portallight.integer && i != CONTENTS_SOLID && i != CONTENTS_SKY)
{
i = CL_PointQ1Contents(e->origin);
if (r_shadow_portallight.integer && i != CONTENTS_SOLID && i != CONTENTS_SKY)
{
- byteleafpvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numleafs);
+ //byteleafpvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numleafs);
bytesurfacepvs = Mem_Alloc(tempmempool, cl.worldmodel->brushq1.numsurfaces);
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))
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))
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;
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(bytesurfacepvs);
}
else
Mem_Free(bytesurfacepvs);
}
else