(
&mut self,
device: &wgpu::Device,
queue: &wgpu::Queue,
delta: &epaint::ImageDelta,
texture_size: [u32; 2],
)
| 595 | self.vertices.clear(); |
| 596 | self.indices.clear(); |
| 597 | self.meshes.reserve(mesh_totals.mesh_count); |
| 598 | self.vertices.reserve(mesh_totals.vertex_count); |
| 599 | self.indices.reserve(mesh_totals.index_count); |
| 600 | self.perf_counters = UiPerfCounters::default(); |
| 601 | let mut uses_depth_test = false; |
| 602 | self.prepared_live_texture_ids.clear(); |
| 603 | for (primitive_index, primitive) in primitives.iter().enumerate() { |
| 604 | let Primitive::Mesh(mesh) = &primitive.primitive else { |
| 605 | continue; |
| 606 | }; |
| 607 | if mesh.vertices.is_empty() || mesh.indices.is_empty() { |
| 608 | continue; |
| 609 | } |
| 610 | if mesh.texture_id != TextureId::default() |
| 611 | && mesh.texture_id != UI_HARFBUZZ_TEXTURE_ID |
| 612 | && !self.ensure_image_texture( |
| 613 | device, |
| 614 | queue, |
| 615 | shared_textures, |
| 616 | resources, |
| 617 | mesh.texture_id, |
| 618 | static_texture_lookup, |
| 619 | ) |
| 620 | { |
| 621 | continue; |
| 622 | } |
| 623 | let clip_rect = clip_rect_scaled(primitive, render_viewport, render_scale); |
| 624 | if clip_rect[2] == 0 || clip_rect[3] == 0 { |
| 625 | continue; |
| 626 | } |
| 627 | if let TextureId::User(raw) = mesh.texture_id { |
| 628 | let texture = TextureID::from_u64(raw); |
| 629 | if self.stream_texture_ids.contains(&texture) |
| 630 | || self.external_image_texture_ids.contains(&texture) |
| 631 | { |
| 632 | self.prepared_live_texture_ids.insert(texture); |
| 633 | } |
| 634 | } |
| 635 | let vertex_offset = self.vertices.len().min(u32::MAX as usize) as u32; |
| 636 | let index_start = self.indices.len().min(u32::MAX as usize) as u32; |
| 637 | self.indices.extend( |
| 638 | mesh.indices |
| 639 | .iter() |
| 640 | .map(|index| index.saturating_add(vertex_offset)), |
| 641 | ); |
| 642 | let depths = primitive_depths |
| 643 | .get(primitive_index) |
| 644 | .and_then(Option::as_deref) |
| 645 | .filter(|depths| depths.len() == mesh.vertices.len()); |
| 646 | uses_depth_test |= depths.is_some(); |
| 647 | self.vertices |
| 648 | .extend( |
| 649 | mesh.vertices |
| 650 | .iter() |
| 651 | .enumerate() |
| 652 | .map(|(index, vertex)| UiVertexGpu { |
| 653 | pos: [ |
| 654 | vertex.pos.x * render_scale[0], |
no test coverage detected