Skip to content

Commit

Permalink
Remove panic from outline drawing to match stencil. Reduce nesting in…
Browse files Browse the repository at this point in the history
…side draw functions.
  • Loading branch information
komadori committed Aug 14, 2023
1 parent bd13ca1 commit 9132426
Showing 1 changed file with 51 additions and 48 deletions.
99 changes: 51 additions & 48 deletions src/draw.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,24 +70,26 @@ pub(crate) fn queue_outline_stencil_mesh(
if stencil_flags.depth_mode == DepthMode::Invalid {
continue; // DepthMode not propagated
}
if let Some(mesh) = render_meshes.get(mesh_handle) {
let key = base_key
.with_primitive_topology(mesh.primitive_topology)
.with_depth_mode(stencil_flags.depth_mode)
.with_offset_zero(stencil_uniform.offset == 0.0)
.with_morph_targets(mesh.morph_targets.is_some());
let pipeline = pipelines
let Some(mesh) = render_meshes.get(mesh_handle) else {
continue; // No mesh
};
let key = base_key
.with_primitive_topology(mesh.primitive_topology)
.with_depth_mode(stencil_flags.depth_mode)
.with_offset_zero(stencil_uniform.offset == 0.0)
.with_morph_targets(mesh.morph_targets.is_some());
let Ok(pipeline) = pipelines
.specialize(&pipeline_cache, &stencil_pipeline, key, &mesh.layout)
.unwrap();
let distance =
rangefinder.distance(&Mat4::from_translation(stencil_uniform.origin));
stencil_phase.add(StencilOutline {
entity,
pipeline,
draw_function: draw_stencil,
distance,
});
}
else {
continue; // No pipeline
};
let distance = rangefinder.distance(&Mat4::from_translation(stencil_uniform.origin));
stencil_phase.add(StencilOutline {
entity,
pipeline,
draw_function: draw_stencil,
distance,
});
}
}
}
Expand Down Expand Up @@ -151,39 +153,40 @@ pub(crate) fn queue_outline_volume_mesh(
if volume_flags.depth_mode == DepthMode::Invalid {
continue; // DepthMode not propagated
}
if let Some(mesh) = render_meshes.get(mesh_handle) {
let transparent = fragment_uniform.colour[3] < 1.0;
let key = base_key
.with_primitive_topology(mesh.primitive_topology)
.with_pass_type(if transparent {
PassType::Transparent
} else {
PassType::Opaque
})
.with_depth_mode(volume_flags.depth_mode)
.with_offset_zero(volume_uniform.offset == 0.0)
.with_hdr_format(view.hdr)
.with_morph_targets(mesh.morph_targets.is_some());
let Ok(pipeline) = pipelines
let Some(mesh) = render_meshes.get(mesh_handle) else {
continue; // No mesh
};
let transparent = fragment_uniform.colour[3] < 1.0;
let key = base_key
.with_primitive_topology(mesh.primitive_topology)
.with_pass_type(if transparent {
PassType::Transparent
} else {
PassType::Opaque
})
.with_depth_mode(volume_flags.depth_mode)
.with_offset_zero(volume_uniform.offset == 0.0)
.with_hdr_format(view.hdr)
.with_morph_targets(mesh.morph_targets.is_some());
let Ok(pipeline) = pipelines
.specialize(&pipeline_cache, &outline_pipeline, key, &mesh.layout) else {
continue;
continue; // No pipeline
};
let distance = rangefinder.distance(&Mat4::from_translation(volume_uniform.origin));
if transparent {
transparent_phase.add(TransparentOutline {
entity,
pipeline,
draw_function: draw_transparent_outline,
distance,
});
} else {
opaque_phase.add(OpaqueOutline {
entity,
pipeline,
draw_function: draw_opaque_outline,
distance,
});
}
let distance = rangefinder.distance(&Mat4::from_translation(volume_uniform.origin));
if transparent {
transparent_phase.add(TransparentOutline {
entity,
pipeline,
draw_function: draw_transparent_outline,
distance,
});
} else {
opaque_phase.add(OpaqueOutline {
entity,
pipeline,
draw_function: draw_opaque_outline,
distance,
});
}
}
}
Expand Down

0 comments on commit 9132426

Please sign in to comment.