]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rsurf.c
added DP_QC_STRFTIME extension
[xonotic/darkplaces.git] / gl_rsurf.c
index 229458d5dabe02bdea592e1612f07cbf52a0f0e3..9a848f879fccf6a24efde1d866c8efee35a0ba99 100644 (file)
@@ -489,7 +489,11 @@ void R_View_WorldVisibility(void)
                                for (p = leaf->portals;p;p = p->next)
                                {
                                        r_refdef.stats.world_portals++;
-                                       if (DotProduct(r_view.origin, p->plane.normal) < (p->plane.dist + 1) && !R_CullBox(p->mins, p->maxs) && !r_viewcache.world_leafvisible[p->past - model->brush.data_leafs] && CHECKPVSBIT(r_viewcache.world_pvsbits, p->past->clusterindex))
+                                       if (DotProduct(r_view.origin, p->plane.normal) < (p->plane.dist + 1)
+                                        && !r_viewcache.world_leafvisible[p->past - model->brush.data_leafs]
+                                        && CHECKPVSBIT(r_viewcache.world_pvsbits, p->past->clusterindex)
+                                        && !R_CullBox(p->mins, p->maxs)
+                                        && leafstackpos < (int)(sizeof(leafstack) / sizeof(leafstack[0])))
                                                leafstack[leafstackpos++] = p->past;
                                }
                        }
@@ -586,7 +590,7 @@ void R_Q1BSP_RecursiveGetLightInfo(r_q1bsp_getlightinfo_t *info, mnode_t *node)
        }
        else
        {
-               if (info->pvs != NULL && !CHECKPVSBIT(info->pvs, leaf->clusterindex))
+               if (r_shadow_frontsidecasting.integer && info->pvs != NULL && !CHECKPVSBIT(info->pvs, leaf->clusterindex))
                        return;
        }
        // inserting occluders does not alter the leaf info
@@ -631,7 +635,7 @@ void R_Q1BSP_RecursiveGetLightInfo(r_q1bsp_getlightinfo_t *info, mnode_t *node)
                                                v[0] = info->model->brush.shadowmesh->vertex3f + e[0] * 3;
                                                v[1] = info->model->brush.shadowmesh->vertex3f + e[1] * 3;
                                                v[2] = info->model->brush.shadowmesh->vertex3f + e[2] * 3;
-                                               if (PointInfrontOfTriangle(info->relativelightorigin, v[0], v[1], v[2])
+                                               if ((!r_shadow_frontsidecasting.integer || PointInfrontOfTriangle(info->relativelightorigin, v[0], v[1], v[2]))
                                                 && info->lightmaxs[0] > min(v[0][0], min(v[1][0], v[2][0]))
                                                 && info->lightmins[0] < max(v[0][0], max(v[1][0], v[2][0]))
                                                 && info->lightmaxs[1] > min(v[0][1], min(v[1][1], v[2][1]))
@@ -764,7 +768,7 @@ void R_Q1BSP_GetLightInfo(entity_render_t *ent, vec3_t relativelightorigin, floa
        VectorCopy(info.relativelightorigin, info.outmaxs);
        memset(outleafpvs, 0, (info.model->brush.num_leafs + 7) >> 3);
        memset(outsurfacepvs, 0, (info.model->nummodelsurfaces + 7) >> 3);
-       if (info.model->brush.GetPVS)
+       if (info.model->brush.GetPVS && r_shadow_frontsidecasting.integer)
                info.pvs = info.model->brush.GetPVS(info.model, info.relativelightorigin);
        else
                info.pvs = NULL;