Browse Source

Optimize mesher

readable-ids
Emil Ernerfeldt 5 years ago
parent
commit
2b49072de9
  1. 24
      emigui/src/paint/mesher.rs

24
emigui/src/paint/mesher.rs

@ -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…
Cancel
Save