]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - portals.c
optimized surface rendering to surface->groupmesh->data_* array pointers directly...
[xonotic/darkplaces.git] / portals.c
index ddd9bda6ca2673ce4109eb6cc788d531ef5b375b..f6f85766eb912791a7cd3c6a0d0b9c05f966cf15 100644 (file)
--- a/portals.c
+++ b/portals.c
@@ -187,7 +187,7 @@ int Portal_CheckPolygon(model_t *model, vec3_t eye, float *polypoints, int numpo
        vec3_t center, v1, v2;
 
        // if there is no model, it can not block visibility
-       if (model == NULL)
+       if (model == NULL || !model->brushq1.PointInLeaf)
                return true;
 
        portal_markid++;
@@ -345,11 +345,11 @@ void Portal_RecursiveFlow_ExactLeafFaces(portalrecursioninfo_t *info, int *mark,
                {
                        // FIXME?  this assumes q1bsp polygon surfaces
                        surface = info->model->brush.data_surfaces + *mark;
-                       for (j = 0, elements = surface->mesh.data_element3i;j < surface->mesh.num_triangles;j++, elements += 3)
+                       for (j = 0, elements = (surface->groupmesh->data_element3i + 3 * surface->num_firsttriangle);j < surface->num_triangles;j++, elements += 3)
                        {
-                               VectorCopy((surface->mesh.data_vertex3f + elements[0] * 3), trianglepoints[0]);
-                               VectorCopy((surface->mesh.data_vertex3f + elements[1] * 3), trianglepoints[1]);
-                               VectorCopy((surface->mesh.data_vertex3f + elements[2] * 3), trianglepoints[2]);
+                               VectorCopy((surface->groupmesh->data_vertex3f + elements[0] * 3), trianglepoints[0]);
+                               VectorCopy((surface->groupmesh->data_vertex3f + elements[1] * 3), trianglepoints[1]);
+                               VectorCopy((surface->groupmesh->data_vertex3f + elements[2] * 3), trianglepoints[2]);
                                if (PointInfrontOfTriangle(info->eye, trianglepoints[0], trianglepoints[1], trianglepoints[2]))
                                {
                                        trimins[0] = min(trianglepoints[0][0], min(trianglepoints[1][0], trianglepoints[2][0]));
@@ -363,7 +363,7 @@ void Portal_RecursiveFlow_ExactLeafFaces(portalrecursioninfo_t *info, int *mark,
                                                        break;
                                }
                        }
-                       if (j == surface->mesh.num_triangles)
+                       if (j == surface->num_triangles)
                                continue;
                        info->surfacemark[*mark] = true;
                }