@@ -69,6 +69,10 @@ void path_demo_0(const util::Path &path) {
6969 }
7070 });
7171
72+ // Make steering vector visibility toggleable
73+ auto vectors_visible = false ;
74+
75+ // Enable key callbacks
7276 window->add_key_callback ([&](const QKeyEvent &ev) {
7377 if (ev.type () == QEvent::KeyRelease) {
7478 if (ev.key () == Qt::Key_F1) { // Show cost field
@@ -81,7 +85,14 @@ void path_demo_0(const util::Path &path) {
8185 render_manager->show_flow_field (flow_field);
8286 }
8387 else if (ev.key () == Qt::Key_F4) { // Show steering vectors
84- render_manager->show_vectors (flow_field);
88+ if (vectors_visible) {
89+ render_manager->hide_vectors ();
90+ vectors_visible = false ;
91+ }
92+ else {
93+ render_manager->show_vectors (flow_field);
94+ vectors_visible = true ;
95+ }
8596 }
8697 }
8798 });
@@ -119,6 +130,7 @@ void RenderManager::run() {
119130
120131 this ->renderer ->render (this ->background_pass );
121132 this ->renderer ->render (this ->field_pass );
133+ this ->renderer ->render (this ->vector_pass );
122134 this ->renderer ->render (this ->grid_pass );
123135 this ->renderer ->render (this ->display_pass );
124136
@@ -203,6 +215,7 @@ void RenderManager::show_vectors(const std::shared_ptr<path::FlowField> &field)
203215 {flow_dir_t ::NORTH_WEST, {-0 .25f , 0 .0f , 0 .25f }},
204216 };
205217
218+ this ->vector_pass ->clear_renderables ();
206219 for (size_t y = 0 ; y < field->get_size (); ++y) {
207220 for (size_t x = 0 ; x < field->get_size (); ++x) {
208221 auto cell = field->get_cell (x, y);
@@ -231,12 +244,16 @@ void RenderManager::show_vectors(const std::shared_ptr<path::FlowField> &field)
231244 true ,
232245 true ,
233246 };
234- field_pass ->add_renderables (arrow_renderable);
247+ this -> vector_pass ->add_renderables (arrow_renderable);
235248 }
236249 }
237250 }
238251}
239252
253+ void RenderManager::hide_vectors () {
254+ this ->vector_pass ->clear_renderables ();
255+ }
256+
240257std::pair<int , int > RenderManager::select_tile (double x, double y) {
241258 auto grid_plane_normal = Eigen::Vector3f{0 , 1 , 0 };
242259 auto grid_plane_point = Eigen::Vector3f{0 , 0 , 0 };
@@ -369,7 +386,7 @@ void RenderManager::init_passes() {
369386 };
370387 this ->background_pass = renderer->add_render_pass ({background_obj}, fbo);
371388
372- // Make a framebuffer for the field render passes to draw into
389+ // Make a framebuffer for the field render pass to draw into
373390 auto field_texture = renderer->add_texture (
374391 renderer::resources::Texture2dInfo (size[0 ],
375392 size[1 ],
@@ -381,16 +398,28 @@ void RenderManager::init_passes() {
381398 auto field_fbo = renderer->create_texture_target ({field_texture, depth_texture_2});
382399 this ->field_pass = renderer->add_render_pass ({}, field_fbo);
383400
401+ // Make a framebuffer for the vector render passes to draw into
402+ auto vector_texture = renderer->add_texture (
403+ renderer::resources::Texture2dInfo (size[0 ],
404+ size[1 ],
405+ renderer::resources::pixel_format::rgba8));
406+ auto depth_texture_3 = renderer->add_texture (
407+ renderer::resources::Texture2dInfo (size[0 ],
408+ size[1 ],
409+ renderer::resources::pixel_format::depth24));
410+ auto vector_fbo = renderer->create_texture_target ({vector_texture, depth_texture_3});
411+ this ->vector_pass = renderer->add_render_pass ({}, vector_fbo);
412+
384413 // Make a framebuffer for the grid render passes to draw into
385414 auto grid_texture = renderer->add_texture (
386415 renderer::resources::Texture2dInfo (size[0 ],
387416 size[1 ],
388417 renderer::resources::pixel_format::rgba8));
389- auto depth_texture_3 = renderer->add_texture (
418+ auto depth_texture_4 = renderer->add_texture (
390419 renderer::resources::Texture2dInfo (size[0 ],
391420 size[1 ],
392421 renderer::resources::pixel_format::depth24));
393- auto grid_fbo = renderer->create_texture_target ({grid_texture, depth_texture_3 });
422+ auto grid_fbo = renderer->create_texture_target ({grid_texture, depth_texture_4 });
394423
395424 // Create object for the grid
396425 Eigen::Matrix4f model = Eigen::Matrix4f::Identity ();
@@ -428,6 +457,13 @@ void RenderManager::init_passes() {
428457 true ,
429458 true ,
430459 };
460+ auto vector_texture_unif = display_shader->new_uniform_input (" color_texture" , vector_texture);
461+ renderer::Renderable vector_pass_obj{
462+ vector_texture_unif,
463+ quad,
464+ true ,
465+ true ,
466+ };
431467 auto grid_texture_unif = display_shader->new_uniform_input (" color_texture" , grid_texture);
432468 renderer::Renderable grid_pass_obj{
433469 grid_texture_unif,
@@ -436,7 +472,7 @@ void RenderManager::init_passes() {
436472 true ,
437473 };
438474 this ->display_pass = renderer->add_render_pass (
439- {bg_pass_obj, field_pass_obj, grid_pass_obj},
475+ {bg_pass_obj, field_pass_obj, vector_pass_obj, grid_pass_obj},
440476 renderer->get_display_target ());
441477}
442478
0 commit comments