(&mut self, device: &Device, queue: &Queue, state: &PlotState)
| 1144 | } |
| 1145 | |
| 1146 | if writer.is_empty() { |
| 1147 | return; |
| 1148 | } |
| 1149 | |
| 1150 | let data = writer.as_slice(); |
| 1151 | self.buffers.fills = Some(VertexBuffer { |
| 1152 | buffer: device.create_buffer(&BufferDescriptor { |
| 1153 | label: Some("fill vb"), |
| 1154 | size: data.len() as u64, |
| 1155 | usage: BufferUsages::VERTEX | BufferUsages::COPY_DST, |
| 1156 | mapped_at_creation: false, |
| 1157 | }), |
| 1158 | vertex_count: (data.len() / 24) as u32, |
| 1159 | }); |
| 1160 | |
| 1161 | if let Some(vb) = &self.buffers.fills { |
| 1162 | queue.write_buffer(&vb.buffer, 0, data); |
| 1163 | } |
| 1164 | } |
| 1165 | |
| 1166 | fn rebuild_lines(&mut self, device: &Device, queue: &Queue, state: &PlotState) { |
| 1167 | self.buffers.lines = None; |
| 1168 | if state.series.iter().all(|s| s.line_style.is_none()) { |
| 1169 | return; |
| 1170 | } |
| 1171 | |
| 1172 | let mut writer = VertexWriter::new(); |
| 1173 | let mut segs: Vec<LineSegment> = Vec::new(); |
| 1174 | for s in state.series.iter() { |
| 1175 | let Some(line_style) = s.line_style else { |
| 1176 | continue; |
| 1177 | }; |
| 1178 | if s.len < 2 { |
| 1179 | continue; |
| 1180 | } |
| 1181 | let (line_style_u32, style_param) = line_style_params(line_style); |
| 1182 | let render_style = LineRenderStyle { |
| 1183 | width: line_style.width, |
| 1184 | line_style: line_style_u32, |
| 1185 | style_param, |
| 1186 | }; |
| 1187 | let points_slice = &state.points[s.start..s.start + s.len]; |
| 1188 | let mut poly_positions: Vec<[f32; 2]> = Vec::new(); |
| 1189 | let mut poly_distances: Vec<f32> = Vec::new(); |
| 1190 | let mut poly_colors: Vec<iced::Color> = Vec::new(); |
| 1191 | let mut cumulative_distance = 0.0f32; |
| 1192 | |
| 1193 | for (i, point) in points_slice.iter().enumerate() { |
| 1194 | let break_segment = i > 0 |
| 1195 | && s.point_indices |
| 1196 | .get(i) |
| 1197 | .zip(s.point_indices.get(i - 1)) |
| 1198 | .is_some_and(|(curr, prev)| *curr != *prev + 1); |
| 1199 | |
| 1200 | if break_segment { |
| 1201 | write_polyline_triangles( |
| 1202 | &mut writer, |
| 1203 | &mut segs, |
no test coverage detected