MCPcopy Create free account
hub / github.com/donkeyteethUX/iced_plot / rebuild_markers

Method rebuild_markers

src/plot_renderer/shader.rs:1035–1109  ·  view source on GitHub ↗
(&mut self, device: &Device, queue: &Queue, state: &PlotState)

Source from the content-addressed store, hash-verified

1033 },
1034 }),
1035 write_mask: ColorWrites::ALL,
1036 })],
1037 }),
1038 primitive: PrimitiveState {
1039 topology: PrimitiveTopology::TriangleList,
1040 strip_index_format: None,
1041 front_face: FrontFace::Ccw,
1042 cull_mode: None,
1043 polygon_mode: PolygonMode::Fill,
1044 unclipped_depth: false,
1045 conservative: false,
1046 },
1047 depth_stencil: None,
1048 multisample: MultisampleState::default(),
1049 multiview: None,
1050 cache: None,
1051 });
1052 self.pipelines.composite = Some(pipeline);
1053 }
1054
1055 fn rebuild_markers(&mut self, device: &Device, queue: &Queue, state: &PlotState) {
1056 // Only include series that have markers (marker != u32::MAX)
1057 let marker_series_count: usize = state
1058 .series
1059 .iter()
1060 .filter(|s| s.marker != u32::MAX)
1061 .map(|s| s.len)
1062 .sum();
1063
1064 if marker_series_count == 0 {
1065 self.buffers.markers = None;
1066 return;
1067 }
1068
1069 let mut writer = VertexWriter::with_capacity(marker_series_count * 36);
1070 let mut id_map: Vec<(u32, u32)> = Vec::with_capacity(marker_series_count);
1071
1072 // Iterate series so we can pick per-point color/marker for each point.
1073 for (span_idx, s) in state.series.iter().enumerate() {
1074 // Skip series without markers
1075 if s.marker == u32::MAX {
1076 continue;
1077 }
1078
1079 // safety: ensure span indexes are valid with respect to points slice
1080 let end = s.start + s.len;
1081 if s.len == 0 || end > state.points.len() {
1082 continue;
1083 }
1084
1085 for (local_i, p) in state.points[s.start..end].iter().enumerate() {
1086 // Subtract render_offset for high-precision rendering near zero
1087 let render_pos = self.world_to_render_pos(p.position, &state.camera);
1088 let color_idx = s.start + local_i;
1089 let color = state.point_colors.get(color_idx).unwrap_or(&s.color);
1090 writer.write_position(render_pos);
1091 writer.write_color(color);
1092 writer.write_u32(s.marker);

Callers 1

syncMethod · 0.80

Calls 11

marker_flagsFunction · 0.85
mapMethod · 0.80
world_to_render_posMethod · 0.80
getMethod · 0.80
write_positionMethod · 0.80
write_colorMethod · 0.80
write_u32Method · 0.80
write_f32Method · 0.80
as_sliceMethod · 0.80
sizeMethod · 0.80
set_id_mapMethod · 0.80

Tested by

no test coverage detected