MCPcopy Create free account
hub / github.com/PerroEngine/Perro / apply_font_delta

Method apply_font_delta

perro_source/render_stack/perro_graphics/src/ui/gpu.rs:597–685  ·  view source on GitHub ↗
(
        &mut self,
        device: &wgpu::Device,
        queue: &wgpu::Queue,
        delta: &epaint::ImageDelta,
        texture_size: [u32; 2],
    )

Source from the content-addressed store, hash-verified

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],

Callers 1

prepareMethod · 0.80

Calls 7

font_delta_required_sizeFunction · 0.85
create_textureMethod · 0.80
create_bind_groupMethod · 0.80
lenMethod · 0.45
to_arrayMethod · 0.45
maxMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected