(vertices: &[LodVertex], quadrics: &[[f64; 10]], keep: u32, remove: u32)
| 462 | &triangles, |
| 463 | &quadrics, |
| 464 | &scratch.edge_list, |
| 465 | &scratch.adjacency, |
| 466 | &scratch.tri_normals, |
| 467 | metric, |
| 468 | ); |
| 469 | if collapses.is_empty() { |
| 470 | break; |
| 471 | } |
| 472 | let collapse_limit = triangles.len().saturating_sub(keep_tris).div_ceil(2).max(1); |
| 473 | let selected = select_independent_collapses( |
| 474 | &collapses, |
| 475 | &triangles, |
| 476 | &scratch.adjacency, |
| 477 | collapse_limit, |
| 478 | &mut scratch.locked_vertices, |
| 479 | &mut scratch.selected_collapses, |
| 480 | ); |
| 481 | if selected == 0 { |
| 482 | break; |
| 483 | } |
| 484 | let Some(next_len) = apply_best_collapse_prefix( |
| 485 | &triangles, |
| 486 | &scratch.selected_collapses[..selected], |
| 487 | keep_tris, |
| 488 | &mut scratch.next_triangles, |
| 489 | &mut scratch.seen_triangles, |
no test coverage detected