update model in function

pull/19657/head
deanlee 4 years ago
parent 0834a3ffe7
commit e25db7e28c
  1. 40
      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<float>(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);

Loading…
Cancel
Save