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));
|
||||
}
|
||||
|
||||
// Reverse interior indices for early Z optimizations.
|
||||
// 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;*/
|
||||
partitioner.library_mut().optimize();
|
||||
|
||||
let time_elapsed = timestamp_before.elapsed();
|
||||
|
||||
|
|
|
@ -49,6 +49,36 @@ impl MeshLibrary {
|
|||
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.
|
||||
///
|
||||
/// RIFF is a dead-simple extensible binary format documented here:
|
||||
|
|
Loading…
Reference in New Issue