Fix #138521: Overlay: Edit Mode Curves display in front of meshes
The lines were not drawn inside a depth aware framebuffer. Splitting the display into 2 draw pass fixes the issue.
This commit is contained in:
@@ -27,13 +27,17 @@ namespace blender::draw::overlay {
|
|||||||
class Curves : Overlay {
|
class Curves : Overlay {
|
||||||
private:
|
private:
|
||||||
PassSimple edit_curves_ps_ = {"Curve Edit"};
|
PassSimple edit_curves_ps_ = {"Curve Edit"};
|
||||||
PassSimple::Sub *edit_curves_points_ = nullptr;
|
|
||||||
PassSimple::Sub *edit_curves_lines_ = nullptr;
|
PassSimple::Sub *edit_curves_lines_ = nullptr;
|
||||||
|
|
||||||
|
PassSimple edit_legacy_curve_handles_ps_ = {"Curve Edit Handles"};
|
||||||
|
PassSimple::Sub *edit_curves_points_ = nullptr;
|
||||||
PassSimple::Sub *edit_curves_handles_ = nullptr;
|
PassSimple::Sub *edit_curves_handles_ = nullptr;
|
||||||
|
|
||||||
PassSimple edit_legacy_curve_ps_ = {"Legacy Curve Edit"};
|
PassSimple edit_legacy_curve_ps_ = {"Legacy Curve Edit"};
|
||||||
PassSimple::Sub *edit_legacy_curve_wires_ = nullptr;
|
PassSimple::Sub *edit_legacy_curve_wires_ = nullptr;
|
||||||
PassSimple::Sub *edit_legacy_curve_normals_ = nullptr;
|
PassSimple::Sub *edit_legacy_curve_normals_ = nullptr;
|
||||||
|
|
||||||
|
PassSimple edit_curves_handles_ps_ = {"Legacy Curve Edit Handles"};
|
||||||
PassSimple::Sub *edit_legacy_curve_points_ = nullptr;
|
PassSimple::Sub *edit_legacy_curve_points_ = nullptr;
|
||||||
PassSimple::Sub *edit_legacy_curve_handles_ = nullptr;
|
PassSimple::Sub *edit_legacy_curve_handles_ = nullptr;
|
||||||
|
|
||||||
@@ -76,6 +80,13 @@ class Curves : Overlay {
|
|||||||
sub.push_constant("use_grease_pencil", false);
|
sub.push_constant("use_grease_pencil", false);
|
||||||
edit_curves_lines_ = ⊂
|
edit_curves_lines_ = ⊂
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto &pass = edit_curves_handles_ps_;
|
||||||
|
pass.init();
|
||||||
|
pass.bind_ubo(OVERLAY_GLOBALS_SLOT, &res.globals_buf);
|
||||||
|
pass.bind_ubo(DRW_CLIPPING_UBO_SLOT, &res.clip_planes_buf);
|
||||||
{
|
{
|
||||||
auto &sub = pass.sub("Handles");
|
auto &sub = pass.sub("Handles");
|
||||||
sub.state_set(DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA, state.clipping_plane_count);
|
sub.state_set(DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA, state.clipping_plane_count);
|
||||||
@@ -127,6 +138,13 @@ class Curves : Overlay {
|
|||||||
else {
|
else {
|
||||||
edit_legacy_curve_normals_ = nullptr;
|
edit_legacy_curve_normals_ = nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto &pass = edit_legacy_curve_handles_ps_;
|
||||||
|
pass.init();
|
||||||
|
pass.bind_ubo(OVERLAY_GLOBALS_SLOT, &res.globals_buf);
|
||||||
|
pass.bind_ubo(DRW_CLIPPING_UBO_SLOT, &res.clip_planes_buf);
|
||||||
{
|
{
|
||||||
auto &sub = pass.sub("Handles");
|
auto &sub = pass.sub("Handles");
|
||||||
sub.state_set(DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA, state.clipping_plane_count);
|
sub.state_set(DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA, state.clipping_plane_count);
|
||||||
@@ -247,6 +265,8 @@ class Curves : Overlay {
|
|||||||
view_edit_cage.sync(view.viewmat(), offset_data_.winmat_polygon_offset(view.winmat(), 0.5f));
|
view_edit_cage.sync(view.viewmat(), offset_data_.winmat_polygon_offset(view.winmat(), 0.5f));
|
||||||
|
|
||||||
GPU_framebuffer_bind(framebuffer);
|
GPU_framebuffer_bind(framebuffer);
|
||||||
|
manager.submit(edit_legacy_curve_ps_, view);
|
||||||
|
manager.submit(edit_curves_ps_, view_edit_cage);
|
||||||
manager.submit(edit_legacy_surface_handles_ps, view);
|
manager.submit(edit_legacy_surface_handles_ps, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,8 +279,8 @@ class Curves : Overlay {
|
|||||||
view_edit_cage.sync(view.viewmat(), offset_data_.winmat_polygon_offset(view.winmat(), 0.5f));
|
view_edit_cage.sync(view.viewmat(), offset_data_.winmat_polygon_offset(view.winmat(), 0.5f));
|
||||||
|
|
||||||
GPU_framebuffer_bind(framebuffer);
|
GPU_framebuffer_bind(framebuffer);
|
||||||
manager.submit(edit_legacy_curve_ps_, view);
|
manager.submit(edit_legacy_curve_handles_ps_, view);
|
||||||
manager.submit(edit_curves_ps_, view_edit_cage);
|
manager.submit(edit_curves_handles_ps_, view_edit_cage);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -512,7 +512,9 @@ VERTEX_IN(1, uint, data)
|
|||||||
VERTEX_OUT(overlay_edit_flat_color_iface)
|
VERTEX_OUT(overlay_edit_flat_color_iface)
|
||||||
PUSH_CONSTANT(bool, show_curve_handles)
|
PUSH_CONSTANT(bool, show_curve_handles)
|
||||||
PUSH_CONSTANT(int, curve_handle_display)
|
PUSH_CONSTANT(int, curve_handle_display)
|
||||||
|
DEFINE("LINE_OUTPUT")
|
||||||
FRAGMENT_OUT(0, float4, frag_color)
|
FRAGMENT_OUT(0, float4, frag_color)
|
||||||
|
FRAGMENT_OUT(1, float4, line_output)
|
||||||
VERTEX_SOURCE("overlay_edit_curve_point_vert.glsl")
|
VERTEX_SOURCE("overlay_edit_curve_point_vert.glsl")
|
||||||
FRAGMENT_SOURCE("overlay_point_varying_color_frag.glsl")
|
FRAGMENT_SOURCE("overlay_point_varying_color_frag.glsl")
|
||||||
ADDITIONAL_INFO(draw_view)
|
ADDITIONAL_INFO(draw_view)
|
||||||
@@ -530,7 +532,9 @@ VERTEX_IN(2, float3, tangent)
|
|||||||
VERTEX_IN(3, float, rad)
|
VERTEX_IN(3, float, rad)
|
||||||
PUSH_CONSTANT(float, normal_size)
|
PUSH_CONSTANT(float, normal_size)
|
||||||
VERTEX_OUT(overlay_edit_flat_color_iface)
|
VERTEX_OUT(overlay_edit_flat_color_iface)
|
||||||
|
DEFINE("LINE_OUTPUT")
|
||||||
FRAGMENT_OUT(0, float4, frag_color)
|
FRAGMENT_OUT(0, float4, frag_color)
|
||||||
|
FRAGMENT_OUT(1, float4, line_output)
|
||||||
VERTEX_SOURCE("overlay_edit_curve_wire_vert.glsl")
|
VERTEX_SOURCE("overlay_edit_curve_wire_vert.glsl")
|
||||||
FRAGMENT_SOURCE("overlay_varying_color.glsl")
|
FRAGMENT_SOURCE("overlay_varying_color.glsl")
|
||||||
ADDITIONAL_INFO(draw_view)
|
ADDITIONAL_INFO(draw_view)
|
||||||
@@ -553,7 +557,9 @@ PUSH_CONSTANT(int2, gpu_attr_3)
|
|||||||
PUSH_CONSTANT(float, normal_size)
|
PUSH_CONSTANT(float, normal_size)
|
||||||
PUSH_CONSTANT(bool, use_hq_normals)
|
PUSH_CONSTANT(bool, use_hq_normals)
|
||||||
VERTEX_OUT(overlay_edit_flat_color_iface)
|
VERTEX_OUT(overlay_edit_flat_color_iface)
|
||||||
|
DEFINE("LINE_OUTPUT")
|
||||||
FRAGMENT_OUT(0, float4, frag_color)
|
FRAGMENT_OUT(0, float4, frag_color)
|
||||||
|
FRAGMENT_OUT(1, float4, line_output)
|
||||||
VERTEX_SOURCE("overlay_edit_curve_normals_vert.glsl")
|
VERTEX_SOURCE("overlay_edit_curve_normals_vert.glsl")
|
||||||
FRAGMENT_SOURCE("overlay_varying_color.glsl")
|
FRAGMENT_SOURCE("overlay_varying_color.glsl")
|
||||||
ADDITIONAL_INFO(draw_view)
|
ADDITIONAL_INFO(draw_view)
|
||||||
|
|||||||
Reference in New Issue
Block a user