Skip to content

Commit 2f36d2c

Browse files
committed
path: Toggle vsibility of steering vectors.
1 parent 9dbc567 commit 2f36d2c

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

libopenage/pathfinding/demo/demo_0.cpp

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
240257
std::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

libopenage/pathfinding/demo/demo_0.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ class RenderManager {
9797
*/
9898
void show_vectors(const std::shared_ptr<path::FlowField> &field);
9999

100+
/**
101+
* Hide drawn steering vectors.
102+
*/
103+
void hide_vectors();
104+
100105
/**
101106
* Get the cell coordinates at a given screen position.
102107
*
@@ -240,6 +245,11 @@ class RenderManager {
240245
*/
241246
std::shared_ptr<renderer::RenderPass> field_pass;
242247

248+
/**
249+
* Vector pass: Renders the steering vectors of a flow field.
250+
*/
251+
std::shared_ptr<renderer::RenderPass> vector_pass;
252+
243253
/**
244254
* Grid pass: Renders a grid on top of the fields.
245255
*/

0 commit comments

Comments
 (0)