Reenable early Z optimizations
This commit is contained in:
parent
f3f893302a
commit
092b46e056
|
@ -242,20 +242,7 @@ impl PathPartitioningResult {
|
||||||
path_indices.push(PartitionPathIndices::new(index_ranges));
|
path_indices.push(PartitionPathIndices::new(index_ranges));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reverse interior indices for early Z optimizations.
|
partitioner.library_mut().optimize();
|
||||||
// FIXME(pcwalton): Reenable!
|
|
||||||
/*let mut new_cover_interior_indices = Vec::with_capacity(cover_interior_indices.len());
|
|
||||||
for path_indices in path_indices.iter_mut().rev() {
|
|
||||||
let old_byte_start = path_indices.cover_interior_indices.start * mem::size_of::<u32>();
|
|
||||||
let old_byte_end = path_indices.cover_interior_indices.end * mem::size_of::<u32>();
|
|
||||||
let new_start_index = new_cover_interior_indices.len() / mem::size_of::<u32>();
|
|
||||||
new_cover_interior_indices.extend(
|
|
||||||
cover_interior_indices[old_byte_start..old_byte_end].into_iter());
|
|
||||||
let new_end_index = new_cover_interior_indices.len() / mem::size_of::<u32>();
|
|
||||||
path_indices.cover_interior_indices.start = new_start_index;
|
|
||||||
path_indices.cover_interior_indices.end = new_end_index;
|
|
||||||
}
|
|
||||||
cover_interior_indices = new_cover_interior_indices;*/
|
|
||||||
|
|
||||||
let time_elapsed = timestamp_before.elapsed();
|
let time_elapsed = timestamp_before.elapsed();
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,36 @@ impl MeshLibrary {
|
||||||
self.edge_indices.clear();
|
self.edge_indices.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Reverses interior indices so that they draw front-to-back.
|
||||||
|
///
|
||||||
|
/// This enables early Z optimizations.
|
||||||
|
pub fn optimize(&mut self) {
|
||||||
|
let mut new_cover_interior_indices =
|
||||||
|
Vec::with_capacity(self.cover_indices.interior_indices.len());
|
||||||
|
let mut last_cover_interior_index_index = self.cover_indices.interior_indices.len();
|
||||||
|
while last_cover_interior_index_index != 0 {
|
||||||
|
let mut first_cover_interior_index_index = last_cover_interior_index_index - 1;
|
||||||
|
let path_id =
|
||||||
|
self.b_vertex_path_ids[self.cover_indices
|
||||||
|
.interior_indices[first_cover_interior_index_index] as
|
||||||
|
usize];
|
||||||
|
while first_cover_interior_index_index != 0 {
|
||||||
|
let prev_path_id = self.b_vertex_path_ids[
|
||||||
|
self.cover_indices.interior_indices[first_cover_interior_index_index - 1] as
|
||||||
|
usize];
|
||||||
|
if prev_path_id != path_id {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
first_cover_interior_index_index -= 1
|
||||||
|
}
|
||||||
|
let range = first_cover_interior_index_index..last_cover_interior_index_index;
|
||||||
|
new_cover_interior_indices.extend_from_slice(&self.cover_indices
|
||||||
|
.interior_indices[range]);
|
||||||
|
last_cover_interior_index_index = first_cover_interior_index_index;
|
||||||
|
}
|
||||||
|
self.cover_indices.interior_indices = new_cover_interior_indices
|
||||||
|
}
|
||||||
|
|
||||||
/// Writes this mesh library to a RIFF file.
|
/// Writes this mesh library to a RIFF file.
|
||||||
///
|
///
|
||||||
/// RIFF is a dead-simple extensible binary format documented here:
|
/// RIFF is a dead-simple extensible binary format documented here:
|
||||||
|
|
Loading…
Reference in New Issue