frameblend_t frameblend[4];
msurface_t *surface;
surfmesh_t *mesh;
+ static int maxvertices = 0;
+ static float *vertex3f = NULL;
memset(trace, 0, sizeof(*trace));
trace->fraction = 1;
trace->realfraction = 1;
for (i = 0, surface = model->data_surfaces;i < model->num_surfaces;i++, surface++)
{
mesh = surface->groupmesh;
- Mod_Alias_GetMesh_Vertex3f(model, frameblend, mesh, varray_vertex3f);
- Collision_TraceLineTriangleMeshFloat(trace, start, end, mesh->num_triangles, mesh->data_element3i, varray_vertex3f, SUPERCONTENTS_SOLID, segmentmins, segmentmaxs);
+ if (maxvertices < mesh->num_vertices)
+ {
+ if (vertex3f)
+ Z_Free(vertex3f);
+ maxvertices = (mesh->num_vertices + 255) & ~255;
+ vertex3f = Z_Malloc(maxvertices * sizeof(float[3]));
+ }
+ Mod_Alias_GetMesh_Vertex3f(model, frameblend, mesh, vertex3f);
+ Collision_TraceLineTriangleMeshFloat(trace, start, end, mesh->num_triangles, mesh->data_element3i, vertex3f, SUPERCONTENTS_SOLID, 0, surface->texture, segmentmins, segmentmaxs);
}
}
else
VectorAdd(start, boxmaxs, boxstartmaxs);
VectorAdd(end, boxmins, boxendmins);
VectorAdd(end, boxmaxs, boxendmaxs);
- thisbrush_start = Collision_BrushForBox(&identitymatrix, boxstartmins, boxstartmaxs);
- thisbrush_end = Collision_BrushForBox(&identitymatrix, boxendmins, boxendmaxs);
+ thisbrush_start = Collision_BrushForBox(&identitymatrix, boxstartmins, boxstartmaxs, 0, 0, NULL);
+ thisbrush_end = Collision_BrushForBox(&identitymatrix, boxendmins, boxendmaxs, 0, 0, NULL);
for (i = 0, surface = model->data_surfaces;i < model->num_surfaces;i++, surface++)
{
mesh = surface->groupmesh;
- Mod_Alias_GetMesh_Vertex3f(model, frameblend, mesh, varray_vertex3f);
- Collision_TraceBrushTriangleMeshFloat(trace, thisbrush_start, thisbrush_end, mesh->num_triangles, mesh->data_element3i, varray_vertex3f, SUPERCONTENTS_SOLID, segmentmins, segmentmaxs);
+ if (maxvertices < mesh->num_vertices)
+ {
+ if (vertex3f)
+ Z_Free(vertex3f);
+ maxvertices = (mesh->num_vertices + 255) & ~255;
+ vertex3f = Z_Malloc(maxvertices * sizeof(float[3]));
+ }
+ Mod_Alias_GetMesh_Vertex3f(model, frameblend, mesh, vertex3f);
+ Collision_TraceBrushTriangleMeshFloat(trace, thisbrush_start, thisbrush_end, mesh->num_triangles, mesh->data_element3i, vertex3f, SUPERCONTENTS_SOLID, 0, surface->texture, segmentmins, segmentmaxs);
}
}
}