diff --git a/resources/shaders/110/mm_contour.vs b/resources/shaders/110/mm_contour.vs index f75ff1077d..b37394b619 100644 --- a/resources/shaders/110/mm_contour.vs +++ b/resources/shaders/110/mm_contour.vs @@ -2,6 +2,7 @@ uniform mat4 view_model_matrix; uniform mat4 projection_matrix; +uniform float offset; attribute vec3 v_position; @@ -9,6 +10,6 @@ void main() { // Add small epsilon to z to solve z-fighting between painted triangles and contour lines. vec4 clip_position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); - clip_position.z -= 0.00001 * abs(clip_position.w); + clip_position.z -= offset * abs(clip_position.w); gl_Position = clip_position; } diff --git a/resources/shaders/140/mm_contour.vs b/resources/shaders/140/mm_contour.vs index 2f6419b8d5..679291ba6d 100644 --- a/resources/shaders/140/mm_contour.vs +++ b/resources/shaders/140/mm_contour.vs @@ -2,6 +2,7 @@ uniform mat4 view_model_matrix; uniform mat4 projection_matrix; +uniform float offset; in vec3 v_position; @@ -9,6 +10,6 @@ void main() { // Add small epsilon to z to solve z-fighting between painted triangles and contour lines. vec4 clip_position = projection_matrix * view_model_matrix * vec4(v_position, 1.0); - clip_position.z -= 0.00001 * abs(clip_position.w); + clip_position.z -= offset * abs(clip_position.w); gl_Position = clip_position; } diff --git a/resources/shaders/mm_contour.vs b/resources/shaders/mm_contour.vs index f85fefb80e..8423362e46 100644 --- a/resources/shaders/mm_contour.vs +++ b/resources/shaders/mm_contour.vs @@ -1,9 +1,11 @@ #version 110 +uniform float offset; + void main() { // Add small epsilon to z to solve z-fighting between painted triangles and contour lines. vec4 clip_position = gl_ModelViewProjectionMatrix * gl_Vertex; - clip_position.z -= 0.00001 * abs(clip_position.w); + clip_position.z -= offset * abs(clip_position.w); gl_Position = clip_position; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 723ce46d59..4a91522cda 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -9,6 +9,7 @@ #include "slic3r/GUI/format.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/NotificationManager.hpp" +#include "slic3r/GUI/OpenGLManager.hpp" #include "libslic3r/PresetBundle.hpp" #include "libslic3r/Model.hpp" #include "slic3r/Utils/UndoRedo.hpp" @@ -621,6 +622,7 @@ void TriangleSelectorMmGui::render(ImGuiWrapper *imgui) auto *contour_shader = wxGetApp().get_shader("mm_contour"); contour_shader->start_using(); + contour_shader->set_uniform("offset", OpenGLManager::get_gl_info().is_mesa() ? 0.0005 : 0.00001); m_paint_contour.render(); contour_shader->stop_using(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 059d9b0fd5..5b66058f65 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -8,6 +8,7 @@ #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Plater.hpp" +#include "slic3r/GUI/OpenGLManager.hpp" #include "slic3r/Utils/UndoRedo.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/PresetBundle.hpp" @@ -992,6 +993,7 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui) auto *contour_shader = wxGetApp().get_shader("mm_contour"); contour_shader->start_using(); + contour_shader->set_uniform("offset", OpenGLManager::get_gl_info().is_mesa() ? 0.0005 : 0.00001); m_paint_contour.render(); contour_shader->stop_using(); } @@ -1379,6 +1381,7 @@ void TriangleSelectorGUI::render_paint_contour(const Transform3d& matrix) if (contour_shader != nullptr) { contour_shader->start_using(); + contour_shader->set_uniform("offset", OpenGLManager::get_gl_info().is_mesa() ? 0.0005 : 0.00001); const Camera& camera = wxGetApp().plater()->get_camera(); contour_shader->set_uniform("view_model_matrix", camera.get_view_matrix() * matrix); contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix()); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 3ad4d2d83c..bf30c5a503 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -7,6 +7,7 @@ #include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/format.hpp" +#include "slic3r/GUI/OpenGLManager.hpp" #include "libslic3r/AppConfig.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/QuadricEdgeCollapse.hpp" @@ -762,6 +763,7 @@ void GLGizmoSimplify::on_render() if (m_show_wireframe) { auto *contour_shader = wxGetApp().get_shader("mm_contour"); contour_shader->start_using(); + contour_shader->set_uniform("offset", OpenGLManager::get_gl_info().is_mesa() ? 0.0005 : 0.00001); #if ENABLE_LEGACY_OPENGL_REMOVAL contour_shader->set_uniform("view_model_matrix", view_model_matrix); contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix());