Optimize mesher
This commit is contained in:
parent
58a8f743be
commit
2b49072de9
1 changed files with 24 additions and 0 deletions
|
@ -49,6 +49,14 @@ impl Triangles {
|
|||
self.indices.push(c);
|
||||
}
|
||||
|
||||
pub fn reserve_triangles(&mut self, additional_triangles: usize) {
|
||||
self.indices.reserve(3 * additional_triangles);
|
||||
}
|
||||
|
||||
pub fn reserve_vertices(&mut self, additional: usize) {
|
||||
self.vertices.reserve(additional);
|
||||
}
|
||||
|
||||
/// Uniformly colored rectangle
|
||||
pub fn add_rect(&mut self, top_left: Vertex, bottom_right: Vertex) {
|
||||
debug_assert_eq!(top_left.color, bottom_right.color);
|
||||
|
@ -312,6 +320,8 @@ pub fn fill_closed_path(
|
|||
color,
|
||||
};
|
||||
if options.anti_alias {
|
||||
triangles.reserve_triangles(3 * n as usize);
|
||||
triangles.reserve_vertices(2 * n as usize);
|
||||
let color_outer = color::TRANSPARENT;
|
||||
let idx_inner = triangles.vertices.len() as u32;
|
||||
let idx_outer = idx_inner + 1;
|
||||
|
@ -329,6 +339,7 @@ pub fn fill_closed_path(
|
|||
i0 = i1;
|
||||
}
|
||||
} else {
|
||||
triangles.reserve_triangles(n as usize);
|
||||
let idx = triangles.vertices.len() as u32;
|
||||
triangles
|
||||
.vertices
|
||||
|
@ -379,6 +390,9 @@ pub fn paint_path_outline(
|
|||
return;
|
||||
}
|
||||
|
||||
triangles.reserve_triangles(4 * n as usize);
|
||||
triangles.reserve_vertices(3 * n as usize);
|
||||
|
||||
let mut i0 = n - 1;
|
||||
for i1 in 0..n {
|
||||
let connect_with_previous = path_type == PathType::Closed || i1 > 0;
|
||||
|
@ -415,6 +429,9 @@ pub fn paint_path_outline(
|
|||
. |-----| inner_rad
|
||||
*/
|
||||
|
||||
triangles.reserve_triangles(6 * n as usize);
|
||||
triangles.reserve_vertices(4 * n as usize);
|
||||
|
||||
let mut i0 = n - 1;
|
||||
for i1 in 0..n {
|
||||
let connect_with_previous = path_type == PathType::Closed || i1 > 0;
|
||||
|
@ -450,6 +467,9 @@ pub fn paint_path_outline(
|
|||
}
|
||||
}
|
||||
} else {
|
||||
triangles.reserve_triangles(2 * n as usize);
|
||||
triangles.reserve_vertices(2 * n as usize);
|
||||
|
||||
let last_index = if path_type == Closed { n } else { n - 1 };
|
||||
for i in 0..last_index {
|
||||
triangles.triangle(
|
||||
|
@ -600,6 +620,10 @@ pub fn paint_command_into_triangles(
|
|||
} => {
|
||||
galley.sanity_check();
|
||||
|
||||
let num_chars = galley.text.chars().count();
|
||||
out.reserve_triangles(num_chars * 2);
|
||||
out.reserve_vertices(num_chars * 4);
|
||||
|
||||
let text_offset = vec2(0.0, 1.0); // Eye-balled for buttons. TODO: why is this needed?
|
||||
|
||||
let font = &fonts[text_style];
|
||||
|
|
Loading…
Reference in a new issue