diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index be3fad9ece..e5e2ce6be9 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -354,23 +354,14 @@ void Preview::load_print(bool keep_z_range) void Preview::reload_print(bool keep_volumes) { -#ifndef __linux__ - if (m_volumes_cleanup_required || !keep_volumes) - { - m_canvas->reset_volumes(); - m_canvas->reset_legend_texture(); - m_loaded = false; - m_volumes_cleanup_required = false; - } -#endif // __linux__ - +#ifdef __linux__ + // We are getting mysterious crashes on Linux in gtk due to OpenGL context activation GH #1874 #1955. + // So we are applying a workaround here: a delayed release of OpenGL vertex buffers. if (!IsShown()) { m_volumes_cleanup_required = !keep_volumes; return; } - -#ifdef __linux__ if (m_volumes_cleanup_required || !keep_volumes) { m_canvas->reset_volumes(); @@ -378,6 +369,13 @@ void Preview::reload_print(bool keep_volumes) m_loaded = false; m_volumes_cleanup_required = false; } +#else // __linux__ + if (!keep_volumes) + { + m_canvas->reset_volumes(); + m_canvas->reset_legend_texture(); + m_loaded = false; + } #endif // __linux__ load_print(); diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 182eaa9528..96c49e54ff 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -84,7 +84,11 @@ class Preview : public wxPanel BackgroundSlicingProcess* m_process; GCodePreviewData* m_gcode_preview_data; +#ifdef __linux__ + // We are getting mysterious crashes on Linux in gtk due to OpenGL context activation GH #1874 #1955. + // So we are applying a workaround here. bool m_volumes_cleanup_required; +#endif /* __linux__ */ // Calling this function object forces Plater::schedule_background_process. std::function m_schedule_background_process;