Skip to content

Commit

Permalink
expose debug-draw params
Browse files Browse the repository at this point in the history
  • Loading branch information
crocdialer committed Nov 15, 2024
1 parent c695caa commit 2fceb90
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 18 deletions.
5 changes: 5 additions & 0 deletions include/vierkant/physics_debug_draw.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ class PhysicsDebugRenderer : public vierkant::SceneRenderer
{
//! internal resolution
glm::uvec2 resolution = {1920, 1080};
bool draw_aabbs = true;
bool draw_meshes = true;
bool draw_lines = true;
bool use_mesh_colors = true;
glm::vec4 overlay_color = glm::vec4(1.f, 1.f, 1.f, .6f);

constexpr bool operator==(const settings_t &lhs) const = default;
constexpr bool operator!=(const settings_t &lhs) const = default;
Expand Down
1 change: 1 addition & 0 deletions src/physics_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,7 @@ PhysicsContext::debug_draw_result_t PhysicsContext::debug_render() const

JPH::BodyManager::DrawSettings ds;
ds.mDrawVelocity = true;
// ds.mDrawGetSupportingFace = true;
m_engine->jolt.physics_system.DrawBodies(ds, m_engine->jolt.debug_render.get());
return {m_engine->jolt.debug_render->line_geometry, m_engine->jolt.debug_render->aabbs,
m_engine->jolt.debug_render->colors, m_engine->jolt.debug_render->triangle_meshes};
Expand Down
42 changes: 24 additions & 18 deletions src/physics_debug_draw.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,37 @@ SceneRenderer::render_result_t PhysicsDebugRenderer::render_scene(vierkant::Rast
auto &frame_context = m_frame_contexts[m_rasterizer.current_index()];
frame_context.semaphore.wait(frame_context.current_semaphore_value);
frame_context.current_semaphore_value++;
frame_context.settings = settings;

for(uint32_t i = 0; i < physics_debug_result.aabbs.size(); ++i)
{
const auto &aabb = physics_debug_result.aabbs[i];
m_draw_context.draw_boundingbox(m_rasterizer, aabb, cam->view_transform(), cam->projection_matrix());
if(frame_context.settings.draw_aabbs)
{
const auto &aabb = physics_debug_result.aabbs[i];
m_draw_context.draw_boundingbox(m_rasterizer, aabb, cam->view_transform(), cam->projection_matrix());
}

const auto &[transform, geom] = physics_debug_result.triangle_meshes[i];
auto &mesh = m_physics_meshes[geom];
if(!mesh)
if(frame_context.settings.draw_meshes)
{
vierkant::Mesh::create_info_t mesh_create_info = {};
mesh_create_info.mesh_buffer_params.use_vertex_colors = true;
mesh = vierkant::Mesh::create_from_geometry(m_rasterizer.device(), geom, mesh_create_info);
mesh->materials.front()->m.blend_mode = vierkant::BlendMode::Blend;
const auto &[transform, geom] = physics_debug_result.triangle_meshes[i];
auto &mesh = m_physics_meshes[geom];
if(!mesh)
{
vierkant::Mesh::create_info_t mesh_create_info = {};
mesh_create_info.mesh_buffer_params.use_vertex_colors = true;
mesh = vierkant::Mesh::create_from_geometry(m_rasterizer.device(), geom, mesh_create_info);
mesh->materials.front()->m.blend_mode = vierkant::BlendMode::Blend;
}
auto color = settings.use_mesh_colors ? physics_debug_result.colors[i] : glm::vec4(1.f);
m_draw_context.draw_mesh(m_rasterizer, mesh, cam->view_transform() * transform, cam->projection_matrix(),
vierkant::ShaderType::UNLIT_COLOR, color, true, true);
}
auto color = physics_debug_result.colors[i];
m_draw_context.draw_mesh(m_rasterizer, mesh, cam->view_transform() * transform, cam->projection_matrix(),
vierkant::ShaderType::UNLIT_COLOR, color, true, true);
}

if(physics_debug_result.lines)
if(frame_context.settings.draw_lines && physics_debug_result.lines)
{
m_draw_context.draw_lines(m_rasterizer, physics_debug_result.lines->positions, physics_debug_result.lines->colors,
cam->view_transform(), cam->projection_matrix());
m_draw_context.draw_lines(m_rasterizer, physics_debug_result.lines->positions,
physics_debug_result.lines->colors, cam->view_transform(), cam->projection_matrix());
}

auto cmd_buf = m_rasterizer.render(frame_context.frame_buffer);
Expand All @@ -59,10 +66,9 @@ SceneRenderer::render_result_t PhysicsDebugRenderer::render_scene(vierkant::Rast
frame_context.frame_buffer.submit({cmd_buf}, m_queue, {signal_info});

// draw overlay-image
constexpr auto overlay_tint = glm::vec4(1.f, 1.f, 1.f, .4f);
m_draw_context.draw_image_fullscreen(renderer, frame_context.frame_buffer.color_attachment(),
frame_context.frame_buffer.depth_attachment(), true, true, overlay_tint,
0.01f);
frame_context.frame_buffer.depth_attachment(), true, true,
frame_context.settings.overlay_color, 0.01f);

vierkant::semaphore_submit_info_t wait_info = {};
wait_info.semaphore = frame_context.semaphore.handle();
Expand Down

0 comments on commit 2fceb90

Please sign in to comment.