From e25db7e28c1b543a04c3e837aa44431c42dbb5b2 Mon Sep 17 00:00:00 2001 From: deanlee Date: Tue, 5 Jan 2021 12:59:13 +0000 Subject: [PATCH] update model in function --- selfdrive/ui/paint.cc | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc index 8a530afe9e..1b400403e8 100644 --- a/selfdrive/ui/paint.cc +++ b/selfdrive/ui/paint.cc @@ -195,38 +195,48 @@ static void update_line_data(const UIState *s, const cereal::ModelDataV2::XYZTDa assert(pvd->cnt < std::size(pvd->v)); } +static void update_model(UIState *s) { + const UIScene *scene = &s->scene; + // update lane lines + const auto lane_lines = scene->model.getLaneLines(); + const auto lane_line_probs = scene->model.getLaneLineProbs(); + for (int i = 0; i < std::size(s->lane_line_vertices); i++) { + update_line_data(s, lane_lines[i], 0.025 * lane_line_probs[i], 1.22, &s->lane_line_vertices[i], scene->max_distance); + } + + // update road edges + const auto road_edges = scene->model.getRoadEdges(); + for (int i = 0; i < std::size(s->road_edge_vertices); i++) { + update_line_data(s, road_edges[i], 0.025, 1.22, &s->road_edge_vertices[i], scene->max_distance); + } + + // update path + const float lead_d = s->sm->updated("radarState") ? scene->lead_data[0].getDRel() * 2. : MAX_DRAW_DISTANCE; + float path_length = (lead_d > 0.) ? lead_d - fmin(lead_d * 0.35, 10.) : MAX_DRAW_DISTANCE; + path_length = fmin(path_length, scene->max_distance); + update_line_data(s, scene->model.getPosition(), 0.5, 0, &s->track_vertices, path_length); +} + static void ui_draw_vision_lane_lines(UIState *s) { const UIScene *scene = &s->scene; - const bool model_updated = s->sm->updated("modelV2"); + if (s->sm->updated("modelV2")) { + update_model(s); + } // paint lanelines - const auto lane_lines = scene->model.getLaneLines(); const auto lane_line_probs = scene->model.getLaneLineProbs(); for (int i = 0; i < std::size(s->lane_line_vertices); i++) { - if (model_updated) { - update_line_data(s, lane_lines[i], 0.025 * lane_line_probs[i], 1.22, &s->lane_line_vertices[i], scene->max_distance); - } NVGcolor color = nvgRGBAf(1.0, 1.0, 1.0, lane_line_probs[i]); ui_draw_line(s, s->lane_line_vertices[i].v, s->lane_line_vertices[i].cnt, &color, nullptr); } // paint road edges - const auto road_edges = scene->model.getRoadEdges(); const auto road_edge_stds = scene->model.getRoadEdgeStds(); for (int i = 0; i < std::size(s->road_edge_vertices); i++) { - if (model_updated) { - update_line_data(s, road_edges[i], 0.025, 1.22, &s->road_edge_vertices[i], scene->max_distance); - } NVGcolor color = nvgRGBAf(1.0, 0.0, 0.0, std::clamp(1.0 - road_edge_stds[i], 0.0, 1.0)); ui_draw_line(s, s->road_edge_vertices[i].v, s->road_edge_vertices[i].cnt, &color, nullptr); } // paint path - if (model_updated) { - const float lead_d = s->sm->updated("radarState") ? scene->lead_data[0].getDRel() * 2. : MAX_DRAW_DISTANCE; - float path_length = (lead_d > 0.) ? lead_d - fmin(lead_d * 0.35, 10.) : MAX_DRAW_DISTANCE; - path_length = fmin(path_length, scene->max_distance); - update_line_data(s, scene->model.getPosition(), 0.5, 0, &s->track_vertices, path_length); - } NVGpaint track_bg = nvgLinearGradient(s->vg, s->fb_w, s->fb_h, s->fb_w, s->fb_h * .4, COLOR_WHITE, COLOR_WHITE_ALPHA(0)); ui_draw_line(s, s->track_vertices.v, s->track_vertices.cnt, nullptr, &track_bg);