From 0b629eb905cbd8e95d2edc86ae797880e01b315d Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 10:58:46 +0100 Subject: [PATCH 01/15] GLCanvas3DManager moved from being a static member of _3DScene to be a normal member of GUI_App --- src/PrusaSlicer.cpp | 2 + src/libslic3r/Technologies.hpp | 7 +- src/slic3r/GUI/3DBed.cpp | 3 + src/slic3r/GUI/3DScene.cpp | 4 + src/slic3r/GUI/3DScene.hpp | 10 + src/slic3r/GUI/GLCanvas3D.cpp | 268 ++++++++++++++++++- src/slic3r/GUI/GLCanvas3D.hpp | 25 +- src/slic3r/GUI/GLCanvas3DManager.cpp | 84 +++++- src/slic3r/GUI/GLCanvas3DManager.hpp | 77 +++++- src/slic3r/GUI/GLSelectionRectangle.cpp | 11 + src/slic3r/GUI/GLTexture.cpp | 3 + src/slic3r/GUI/GLToolbar.cpp | 31 ++- src/slic3r/GUI/GUI_App.cpp | 21 +- src/slic3r/GUI/GUI_App.hpp | 12 + src/slic3r/GUI/GUI_Preview.cpp | 69 ++++- src/slic3r/GUI/GUI_Preview.hpp | 23 +- src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp | 16 ++ src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 19 +- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 12 + src/slic3r/GUI/MainFrame.cpp | 2 + src/slic3r/GUI/Plater.cpp | 37 ++- src/slic3r/GUI/Plater.hpp | 12 +- src/slic3r/GUI/Selection.cpp | 6 + src/slic3r/GUI/SysInfoDialog.cpp | 8 + 24 files changed, 738 insertions(+), 24 deletions(-) diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index 048aea8869..6b6c3de093 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -527,8 +527,10 @@ int CLI::run(int argc, char **argv) gui->mainframe->load_config(m_extra_config); }); int result = wxEntry(argc, argv); +#if !ENABLE_NON_STATIC_CANVAS_MANAGER //FIXME this is a workaround for the PrusaSlicer 2.1 release. _3DScene::destroy(); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER return result; #else /* SLIC3R_GUI */ // No GUI support. Just print out a help. diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 8ebfc3472f..e7f463ce83 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -43,9 +43,12 @@ //================== -// 2.2.0.beta1 techs +// 2.2.0.final techs //================== -#define ENABLE_2_2_0_BETA1 1 +#define ENABLE_2_2_0_FINAL 1 + +// Moves GLCanvas3DManager from being a static member of _3DScene to be a normal member of GUI_App +#define ENABLE_NON_STATIC_CANVAS_MANAGER (1 && ENABLE_2_2_0_FINAL) #endif // _technologies_h_ diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 23acd18ef7..5ac3899c1d 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -10,6 +10,9 @@ #include "PresetBundle.hpp" #include "Gizmos/GLGizmoBase.hpp" #include "GLCanvas3D.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "GLCanvas3DManager.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 9f36ab5371..177a448a74 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1822,7 +1822,9 @@ void _3DScene::point3_to_verts(const Vec3crd& point, double width, double height thick_point_to_verts(point, width, height, volume); } +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GUI::GLCanvas3DManager _3DScene::s_canvas_mgr; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER GLModel::GLModel() : m_filename("") @@ -2105,6 +2107,7 @@ bool GLBed::on_init_from_file(const std::string& filename) return true; } +#if !ENABLE_NON_STATIC_CANVAS_MANAGER std::string _3DScene::get_gl_info(bool format_as_html, bool extensions) { return Slic3r::GUI::GLCanvas3DManager::get_gl_info().to_string(format_as_html, extensions); @@ -2139,5 +2142,6 @@ GUI::GLCanvas3D* _3DScene::get_canvas(wxGLCanvas* canvas) { return s_canvas_mgr.get_canvas(canvas); } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER } // namespace Slic3r diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index aed907004f..a35b4dca96 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -7,7 +7,9 @@ #include "libslic3r/TriangleMesh.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" +#if !ENABLE_NON_STATIC_CANVAS_MANAGER #include "slic3r/GUI/GLCanvas3DManager.hpp" +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER #include #include @@ -645,10 +647,17 @@ protected: bool on_init_from_file(const std::string& filename) override; }; +#if ENABLE_NON_STATIC_CANVAS_MANAGER +struct _3DScene +#else class _3DScene +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { +#if !ENABLE_NON_STATIC_CANVAS_MANAGER static GUI::GLCanvas3DManager s_canvas_mgr; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +#if !ENABLE_NON_STATIC_CANVAS_MANAGER public: static std::string get_gl_info(bool format_as_html, bool extensions); @@ -660,6 +669,7 @@ public: static void destroy(); static GUI::GLCanvas3D* get_canvas(wxGLCanvas* canvas); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER static void thick_lines_to_verts(const Lines& lines, const std::vector& widths, const std::vector& heights, bool closed, double top_z, GLVolume& volume); static void thick_lines_to_verts(const Lines3& lines, const std::vector& widths, const std::vector& heights, bool closed, GLVolume& volume); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index adc1e2e447..abca4efa5d 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -22,6 +22,10 @@ #include "slic3r/GUI/PresetBundle.hpp" #include "slic3r/GUI/Tab.hpp" #include "slic3r/GUI/GUI_Preview.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "slic3r/GUI/GLCanvas3DManager.hpp" +#include "slic3r/GUI/Camera.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" @@ -357,7 +361,11 @@ Rect GLCanvas3D::LayersEditing::get_bar_rect_viewport(const GLCanvas3D& canvas) float half_w = 0.5f * (float)cnv_size.get_width(); float half_h = 0.5f * (float)cnv_size.get_height(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)canvas.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER return Rect((half_w - thickness_bar_width(canvas)) * inv_zoom, half_h * inv_zoom, half_w * inv_zoom, -half_h * inv_zoom); } @@ -849,7 +857,11 @@ void GLCanvas3D::WarningTexture::render(const GLCanvas3D& canvas) const if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0)) { const Size& cnv_size = canvas.get_canvas_size(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)canvas.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float left = (-0.5f * (float)m_original_width) * inv_zoom; float top = (-0.5f * (float)cnv_size.get_height() + (float)m_original_height + 2.0f) * inv_zoom; float right = left + (float)m_original_width * inv_zoom; @@ -1216,7 +1228,11 @@ void GLCanvas3D::LegendTexture::render(const GLCanvas3D& canvas) const if ((m_id > 0) && (m_original_width > 0) && (m_original_height > 0) && (m_width > 0) && (m_height > 0)) { const Size& cnv_size = canvas.get_canvas_size(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)canvas.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float left = (-0.5f * (float)cnv_size.get_width()) * inv_zoom; float top = (0.5f * (float)cnv_size.get_height()) * inv_zoom; float right = left + (float)m_original_width * inv_zoom; @@ -1242,7 +1258,11 @@ void GLCanvas3D::Labels::render(const std::vector& sorted_ if (!m_enabled || !is_shown()) return; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); +#else const Camera& camera = m_canvas.get_camera(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const Model* model = m_canvas.get_model(); if (model == nullptr) return; @@ -1403,16 +1423,22 @@ wxDEFINE_EVENT(EVT_GLCANVAS_RELOAD_FROM_DISK, SimpleEvent); const double GLCanvas3D::DefaultCameraZoomToBoxMarginFactor = 1.25; #endif // ENABLE_THUMBNAIL_GENERATOR +#if ENABLE_NON_STATIC_CANVAS_MANAGER +GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) +#else GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER : m_canvas(canvas) , m_context(nullptr) #if ENABLE_RETINA_GL , m_retina_helper(nullptr) #endif , m_in_render(false) +#if !ENABLE_NON_STATIC_CANVAS_MANAGER , m_bed(bed) , m_camera(camera) , m_view_toolbar(view_toolbar) +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER , m_main_toolbar(GLToolbar::Normal, "Top") , m_undoredo_toolbar(GLToolbar::Normal, "Top") , m_gizmos(*this) @@ -1560,6 +1586,18 @@ void GLCanvas3D::reset_volumes() if (!m_initialized) return; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_volumes.empty()) + return; + + _set_current(); + + m_selection.clear(); + m_volumes.clear(); + m_dirty = true; + + _set_warning_texture(WarningTexture::ObjectOutside, false); +#else _set_current(); if (!m_volumes.empty()) @@ -1570,6 +1608,7 @@ void GLCanvas3D::reset_volumes() } _set_warning_texture(WarningTexture::ObjectOutside, false); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } int GLCanvas3D::check_volumes_outside_state() const @@ -1651,7 +1690,11 @@ void GLCanvas3D::set_model(Model* model) void GLCanvas3D::bed_shape_changed() { refresh_camera_scene_box(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_camera().requires_zoom_to_bed = true; +#else m_camera.requires_zoom_to_bed = true; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; } @@ -1660,6 +1703,13 @@ void GLCanvas3D::set_color_by(const std::string& value) m_color_by = value; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +void GLCanvas3D::refresh_camera_scene_box() +{ + wxGetApp().plater()->get_camera().set_scene_box(scene_bounding_box()); +} +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + BoundingBoxf3 GLCanvas3D::volumes_bounding_box() const { BoundingBoxf3 bb; @@ -1674,7 +1724,11 @@ BoundingBoxf3 GLCanvas3D::volumes_bounding_box() const BoundingBoxf3 GLCanvas3D::scene_bounding_box() const { BoundingBoxf3 bb = volumes_bounding_box(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bb.merge(wxGetApp().plater()->get_bed().get_bounding_box(true)); +#else bb.merge(m_bed.get_bounding_box(true)); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER if (m_config != nullptr) { @@ -1787,7 +1841,11 @@ void GLCanvas3D::allow_multisample(bool allow) void GLCanvas3D::zoom_to_bed() { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + _zoom_to_box(wxGetApp().plater()->get_bed().get_bounding_box(false)); +#else _zoom_to_box(m_bed.get_bounding_box(false)); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } void GLCanvas3D::zoom_to_volumes() @@ -1805,7 +1863,11 @@ void GLCanvas3D::zoom_to_selection() void GLCanvas3D::select_view(const std::string& direction) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_camera().select_view(direction); +#else m_camera.select_view(direction); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) m_canvas->Refresh(); } @@ -1833,14 +1895,26 @@ void GLCanvas3D::render() return; // ensures this canvas is current and initialized +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (!_is_shown_on_screen() || !_set_current() || !wxGetApp().init_opengl()) + return; + + if (!is_initialized() && !init()) + return; +#else if (! _is_shown_on_screen() || !_set_current() || !_3DScene::init(m_canvas)) return; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_RENDER_STATISTICS auto start_time = std::chrono::high_resolution_clock::now(); #endif // ENABLE_RENDER_STATISTICS +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (wxGetApp().plater()->get_bed().get_shape().empty()) +#else if (m_bed.get_shape().empty()) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { // this happens at startup when no data is still saved under <>\AppData\Roaming\Slic3rPE post_event(SimpleEvent(EVT_GLCANVAS_UPDATE_BED_SHAPE)); @@ -1852,6 +1926,20 @@ void GLCanvas3D::render() // to preview, this was called before canvas had its final size. It reported zero width // and the viewport was set incorrectly, leading to tripping glAsserts further down // the road (in apply_projection). That's why the minimum size is forced to 10. +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Camera& camera = wxGetApp().plater()->get_camera(); + camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height())); + + if (camera.requires_zoom_to_bed) + { + zoom_to_bed(); + _resize((unsigned int)cnv_size.get_width(), (unsigned int)cnv_size.get_height()); + camera.requires_zoom_to_bed = false; + } + + camera.apply_view_matrix(); + camera.apply_projection(_max_bounding_box(true, true)); +#else m_camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height())); if (m_camera.requires_zoom_to_bed) @@ -1863,6 +1951,7 @@ void GLCanvas3D::render() m_camera.apply_view_matrix(); m_camera.apply_projection(_max_bounding_box(true, true)); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER GLfloat position_cam[4] = { 1.0f, 0.0f, 1.0f, 0.0f }; glsafe(::glLightfv(GL_LIGHT1, GL_POSITION, position_cam)); @@ -1892,7 +1981,11 @@ void GLCanvas3D::render() _render_objects(); _render_sla_slices(); _render_selection(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + _render_bed(!camera.is_looking_downward(), true); +#else _render_bed(!m_camera.is_looking_downward(), true); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_RENDER_SELECTION_CENTER _render_selection_center(); @@ -1958,8 +2051,13 @@ void GLCanvas3D::render_thumbnail(ThumbnailData& thumbnail_data, unsigned int w, { switch (GLCanvas3DManager::get_framebuffers_type()) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + case GLCanvas3DManager::EFramebufferType::Arb: { _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only, show_bed, transparent_background); break; } + case GLCanvas3DManager::EFramebufferType::Ext: { _render_thumbnail_framebuffer_ext(thumbnail_data, w, h, printable_only, parts_only, show_bed, transparent_background); break; } +#else case GLCanvas3DManager::FB_Arb: { _render_thumbnail_framebuffer(thumbnail_data, w, h, printable_only, parts_only, show_bed, transparent_background); break; } case GLCanvas3DManager::FB_Ext: { _render_thumbnail_framebuffer_ext(thumbnail_data, w, h, printable_only, parts_only, show_bed, transparent_background); break; } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER default: { _render_thumbnail_legacy(thumbnail_data, w, h, printable_only, parts_only, show_bed, transparent_background); break; } } } @@ -2065,8 +2163,15 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re if ((m_canvas == nullptr) || (m_config == nullptr) || (m_model == nullptr)) return; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (!m_initialized) + return; + + _set_current(); +#else if (m_initialized) _set_current(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER struct ModelVolumeState { ModelVolumeState(const GLVolume* volume) : @@ -2662,8 +2767,13 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt) m_dirty |= m_main_toolbar.update_items_state(); m_dirty |= m_undoredo_toolbar.update_items_state(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_dirty |= wxGetApp().plater()->get_view_toolbar().update_items_state(); + bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera()); +#else m_dirty |= m_view_toolbar.update_items_state(); bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(m_camera); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty |= mouse3d_controller_applied; if (!m_dirty) @@ -2809,7 +2919,11 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case 'I': case 'i': { _update_camera_zoom(1.0); break; } case 'K': +#if ENABLE_NON_STATIC_CANVAS_MANAGER + case 'k': { wxGetApp().plater()->get_camera().select_next_type(); m_dirty = true; break; } +#else case 'k': { m_camera.select_next_type(); m_dirty = true; break; } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER case 'O': case 'o': { _update_camera_zoom(-1.0); break; } #if ENABLE_RENDER_PICKING_PASS @@ -2936,7 +3050,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) Vec3d displacement; if (camera_space) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Eigen::Matrix inv_view_3x3 = wxGetApp().plater()->get_camera().get_view_matrix().inverse().matrix().block(0, 0, 3, 3); +#else Eigen::Matrix inv_view_3x3 = m_camera.get_view_matrix().inverse().matrix().block(0, 0, 3, 3); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER displacement = multiplier * (inv_view_3x3 * direction); displacement(2) = 0.0; } @@ -3190,6 +3308,11 @@ std::string format_mouse_event_debug_message(const wxMouseEvent &evt) void GLCanvas3D::on_mouse(wxMouseEvent& evt) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (!m_initialized) + return; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + #if ENABLE_RETINA_GL const float scale = m_retina_helper->get_scale_factor(); evt.SetX(evt.GetX() * scale); @@ -3242,7 +3365,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (wxGetApp().plater()->get_view_toolbar().on_mouse(evt, *this)) +#else if (m_view_toolbar.on_mouse(evt, *this)) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) mouse_up_cleanup(); @@ -3405,7 +3532,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag if (m_selection.contains_volume(get_first_hover_volume_idx())) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); + if (std::abs(camera.get_dir_forward()(2)) < EPSILON) +#else if (std::abs(m_camera.get_dir_forward()(2)) < EPSILON) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { // side view -> move selected volumes orthogonally to camera view direction Linef3 ray = mouse_ray(pos); @@ -3418,8 +3550,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // vector from the starting position to the found intersection Vec3d inters_vec = inters - m_mouse.drag.start_position_3D; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Vec3d camera_right = camera.get_dir_right(); + Vec3d camera_up = camera.get_dir_up(); +#else Vec3d camera_right = m_camera.get_dir_right(); Vec3d camera_up = m_camera.get_dir_up(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER // finds projection of the vector along the camera axes double projection_x = inters_vec.dot(camera_right); @@ -3467,10 +3604,17 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) const Vec3d& orig = m_mouse.drag.start_position_3D; double x = Geometry::deg2rad(pos(0) - orig(0)) * (double)TRACKBALLSIZE; double y = Geometry::deg2rad(pos(1) - orig(1)) * (double)TRACKBALLSIZE; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (wxGetApp().plater()->get_mouse3d_controller().is_running() || (wxGetApp().app_config->get("use_free_camera") == "1")) + wxGetApp().plater()->get_camera().rotate_local_around_target(Vec3d(y, x, 0.0)); + else + wxGetApp().plater()->get_camera().rotate_on_sphere(x, y, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); +#else if (wxGetApp().plater()->get_mouse3d_controller().is_running() || (wxGetApp().app_config->get("use_free_camera") == "1")) m_camera.rotate_local_around_target(Vec3d(y, x, 0.0)); else m_camera.rotate_on_sphere(x, y, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; } @@ -3485,7 +3629,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) float z = 0.0f; const Vec3d& cur_pos = _mouse_to_3d(pos, &z); Vec3d orig = _mouse_to_3d(m_mouse.drag.start_position_2D, &z); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Camera& camera = wxGetApp().plater()->get_camera(); + camera.set_target(camera.get_target() + orig - cur_pos); +#else m_camera.set_target(m_camera.get_target() + orig - cur_pos); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; } @@ -3578,7 +3727,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) tooltip = m_undoredo_toolbar.get_tooltip(); if (tooltip.empty()) +#if ENABLE_NON_STATIC_CANVAS_MANAGER + tooltip = wxGetApp().plater()->get_view_toolbar().get_tooltip(); +#else tooltip = m_view_toolbar.get_tooltip(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER set_tooltip(tooltip); @@ -3932,7 +4085,12 @@ void GLCanvas3D::handle_layers_data_focus_event(const t_layer_height_range range void GLCanvas3D::update_ui_from_settings() { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Camera& camera = wxGetApp().plater()->get_camera(); + camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); +#else m_camera.set_type(wxGetApp().app_config->get("use_perspective_camera")); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; #if ENABLE_RETINA_GL @@ -3946,7 +4104,11 @@ void GLCanvas3D::update_ui_from_settings() if (new_scaling != orig_scaling) { BOOST_LOG_TRIVIAL(debug) << "GLCanvas3D: Scaling factor: " << new_scaling; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + camera.set_zoom(camera.get_zoom() * new_scaling / orig_scaling); +#else m_camera.set_zoom(m_camera.get_zoom() * new_scaling / orig_scaling); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER _refresh_if_shown_on_screen(); } #endif @@ -3981,7 +4143,11 @@ Linef3 GLCanvas3D::mouse_ray(const Point& mouse_pos) double GLCanvas3D::get_size_proportional_to_max_bed_size(double factor) const { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + return factor * wxGetApp().plater()->get_bed().get_bounding_box(false).max_size(); +#else return factor * m_bed.get_bounding_box(false).max_size(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } void GLCanvas3D::set_cursor(ECursorType type) @@ -4042,7 +4208,11 @@ void GLCanvas3D::_render_undo_redo_stack(const bool is_undo, float pos_x) const { ImGuiWrapper* imgui = wxGetApp().imgui(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const float x = pos_x * (float)wxGetApp().plater()->get_camera().get_zoom() + 0.5f * (float)get_canvas_size().get_width(); +#else const float x = pos_x * (float)get_camera().get_zoom() + 0.5f * (float)get_canvas_size().get_width(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER imgui->set_next_window_pos(x, m_undoredo_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); std::string title = is_undo ? L("Undo History") : L("Redo History"); imgui->begin(_(title), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse); @@ -4138,7 +4308,11 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, bool // extends the near and far z of the frustrum to avoid the bed being clipped // box in eye space +#if ENABLE_NON_STATIC_CANVAS_MANAGER + BoundingBoxf3 t_bed_box = wxGetApp().plater()->get_bed().get_bounding_box(true).transformed(camera.get_view_matrix()); +#else BoundingBoxf3 t_bed_box = m_bed.get_bounding_box(true).transformed(camera.get_view_matrix()); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER near_z = -t_bed_box.max(2); far_z = -t_bed_box.min(2); } @@ -4415,7 +4589,11 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT // restore the default framebuffer size to avoid flickering on the 3D scene +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_camera().apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height()); +#else m_camera.apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height()); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } #endif // ENABLE_THUMBNAIL_GENERATOR @@ -4729,14 +4907,22 @@ BoundingBoxf3 GLCanvas3D::_max_bounding_box(bool include_gizmos, bool include_be bb.merge(BoundingBoxf3(sel_bb_center - extend_by, sel_bb_center + extend_by)); } +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bb.merge(wxGetApp().plater()->get_bed().get_bounding_box(include_bed_model)); +#else bb.merge(m_bed.get_bounding_box(include_bed_model)); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER return bb; } #if ENABLE_THUMBNAIL_GENERATOR void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box, double margin_factor) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_camera().zoom_to_box(box, margin_factor); +#else m_camera.zoom_to_box(box, margin_factor); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; } #else @@ -4750,7 +4936,11 @@ void GLCanvas3D::_zoom_to_box(const BoundingBoxf3& box) void GLCanvas3D::_update_camera_zoom(double zoom) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_camera().update_zoom(zoom); +#else m_camera.update_zoom(zoom); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_dirty = true; } @@ -4941,7 +5131,11 @@ void GLCanvas3D::_render_bed(float theta, bool show_axes) const #if ENABLE_RETINA_GL scale_factor = m_retina_helper->get_scale_factor(); #endif // ENABLE_RETINA_GL +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_bed().render(const_cast(*this), theta, scale_factor, show_axes); +#else m_bed.render(const_cast(*this), theta, scale_factor, show_axes); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } void GLCanvas3D::_render_objects() const @@ -4963,7 +5157,11 @@ void GLCanvas3D::_render_objects() const if (m_config != nullptr) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const BoundingBoxf3& bed_bb = wxGetApp().plater()->get_bed().get_bounding_box(false); +#else const BoundingBoxf3& bed_bb = m_bed.get_bounding_box(false); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_volumes.set_print_box((float)bed_bb.min(0), (float)bed_bb.min(1), 0.0f, (float)bed_bb.max(0), (float)bed_bb.max(1), (float)m_config->opt_float("max_print_height")); m_volumes.check_outside_state(m_config, nullptr); } @@ -4979,19 +5177,37 @@ void GLCanvas3D::_render_objects() const m_shader.start_using(); if (m_picking_enabled && !m_gizmos.is_dragging() && m_layers_editing.is_enabled() && (m_layers_editing.last_object_id != -1) && (m_layers_editing.object_max_z() > 0.0f)) { int object_id = m_layers_editing.last_object_id; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_volumes.render(GLVolumeCollection::Opaque, false, wxGetApp().plater()->get_camera().get_view_matrix(), [object_id](const GLVolume& volume) { + // Which volume to paint without the layer height profile shader? + return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); + }); +#else m_volumes.render(GLVolumeCollection::Opaque, false, m_camera.get_view_matrix(), [object_id](const GLVolume& volume) { // Which volume to paint without the layer height profile shader? return volume.is_active && (volume.is_modifier || volume.composite_id.object_id != object_id); }); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER // Let LayersEditing handle rendering of the active object using the layer height profile shader. m_layers_editing.render_volumes(*this, this->m_volumes); } else { // do not cull backfaces to show broken geometry, if any +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_volumes.render(GLVolumeCollection::Opaque, m_picking_enabled, wxGetApp().plater()->get_camera().get_view_matrix(), [this](const GLVolume& volume) { + return (m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0); + }); +#else m_volumes.render(GLVolumeCollection::Opaque, m_picking_enabled, m_camera.get_view_matrix(), [this](const GLVolume& volume) { return (m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0); }); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } + +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_volumes.render(GLVolumeCollection::Transparent, false, wxGetApp().plater()->get_camera().get_view_matrix()); +#else m_volumes.render(GLVolumeCollection::Transparent, false, m_camera.get_view_matrix()); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_shader.stop_using(); m_camera_clipping_plane = ClippingPlane::ClipsNothing(); @@ -5024,9 +5240,16 @@ void GLCanvas3D::_render_overlays() const glsafe(::glPushMatrix()); glsafe(::glLoadIdentity()); // ensure that the textures are renderered inside the frustrum +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); + glsafe(::glTranslated(0.0, 0.0, -(camera.get_near_z() + 0.005))); + // ensure that the overlay fits the frustrum near z plane + double gui_scale = camera.get_gui_scale(); +#else glsafe(::glTranslated(0.0, 0.0, -(m_camera.get_near_z() + 0.005))); // ensure that the overlay fits the frustrum near z plane double gui_scale = m_camera.get_gui_scale(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER glsafe(::glScaled(gui_scale, gui_scale, 1.0)); _render_gizmos_overlay(); @@ -5076,7 +5299,11 @@ void GLCanvas3D::_render_volumes_for_picking() const glsafe(::glEnableClientState(GL_VERTEX_ARRAY)); glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Transform3d& view_matrix = wxGetApp().plater()->get_camera().get_view_matrix(); +#else const Transform3d& view_matrix = m_camera.get_view_matrix(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER for (size_t type = 0; type < 2; ++ type) { GLVolumeWithIdAndZList to_render = volumes_to_render(m_volumes.volumes, (type == 0) ? GLVolumeCollection::Opaque : GLVolumeCollection::Transparent, view_matrix); for (const GLVolumeWithIdAndZ& volume : to_render) @@ -5136,7 +5363,11 @@ void GLCanvas3D::_render_main_toolbar() const #endif // ENABLE_RETINA_GL Size cnv_size = get_canvas_size(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)m_camera.get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; float left = -0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width()) * inv_zoom; @@ -5162,7 +5393,11 @@ void GLCanvas3D::_render_undoredo_toolbar() const #endif // ENABLE_RETINA_GL Size cnv_size = get_canvas_size(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)m_camera.get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float top = 0.5f * (float)cnv_size.get_height() * inv_zoom; float left = (m_main_toolbar.get_width() - 0.5f * (m_main_toolbar.get_width() + m_undoredo_toolbar.get_width())) * inv_zoom; @@ -5172,25 +5407,50 @@ void GLCanvas3D::_render_undoredo_toolbar() const void GLCanvas3D::_render_view_toolbar() const { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + GLToolbar& view_toolbar = wxGetApp().plater()->get_view_toolbar(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + #if ENABLE_RETINA_GL // m_view_toolbar.set_scale(m_retina_helper->get_scale_factor()); const float scale = m_retina_helper->get_scale_factor() * wxGetApp().toolbar_icon_scale(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + view_toolbar.set_scale(scale); //! #ys_FIXME_experiment +#else m_view_toolbar.set_scale(scale); //! #ys_FIXME_experiment +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #else // m_view_toolbar.set_scale(m_canvas->GetContentScaleFactor()); // m_view_toolbar.set_scale(wxGetApp().em_unit()*0.1f); const float size = int(GLGizmosManager::Default_Icons_Size * wxGetApp().toolbar_icon_scale()); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + view_toolbar.set_icons_size(size); //! #ys_FIXME_experiment +#else m_view_toolbar.set_icons_size(size); //! #ys_FIXME_experiment +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #endif // ENABLE_RETINA_GL Size cnv_size = get_canvas_size(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)m_camera.get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER // places the toolbar on the bottom-left corner of the 3d scene +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float top = (-0.5f * (float)cnv_size.get_height() + view_toolbar.get_height()) * inv_zoom; +#else float top = (-0.5f * (float)cnv_size.get_height() + m_view_toolbar.get_height()) * inv_zoom; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float left = -0.5f * (float)cnv_size.get_width() * inv_zoom; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + view_toolbar.set_position(top, left); + view_toolbar.render(*this); +#else m_view_toolbar.set_position(top, left); m_view_toolbar.render(*this); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } #if ENABLE_SHOW_CAMERA_TARGET @@ -5469,10 +5729,16 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z) if (m_canvas == nullptr) return Vec3d(DBL_MAX, DBL_MAX, DBL_MAX); - +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); + const std::array& viewport = camera.get_viewport(); + const Transform3d& modelview_matrix = camera.get_view_matrix(); + const Transform3d& projection_matrix = camera.get_projection_matrix(); +#else const std::array& viewport = m_camera.get_viewport(); const Transform3d& modelview_matrix = m_camera.get_view_matrix(); const Transform3d& projection_matrix = m_camera.get_projection_matrix(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER GLint y = viewport[3] - (GLint)mouse_pos(1); GLfloat mouse_z; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 9ae1278800..0526c874b8 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -8,7 +8,9 @@ #include "GLToolbar.hpp" #include "Event.hpp" #include "3DBed.hpp" +#if !ENABLE_NON_STATIC_CANVAS_MANAGER #include "Camera.hpp" +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER #include "Selection.hpp" #include "Gizmos/GLGizmosManager.hpp" #include "GUI_ObjectLayers.hpp" @@ -26,6 +28,9 @@ class wxMouseEvent; class wxTimerEvent; class wxPaintEvent; class wxGLCanvas; +#if ENABLE_NON_STATIC_CANVAS_MANAGER +class wxGLContext; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER // Support for Retina OpenGL on Mac OS #define ENABLE_RETINA_GL __APPLE__ @@ -406,9 +411,11 @@ private: LegendTexture m_legend_texture; WarningTexture m_warning_texture; wxTimer m_timer; +#if !ENABLE_NON_STATIC_CANVAS_MANAGER Bed3D& m_bed; Camera& m_camera; GLToolbar& m_view_toolbar; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER LayersEditing m_layers_editing; Shader m_shader; Mouse m_mouse; @@ -469,9 +476,17 @@ private: Labels m_labels; public: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + explicit GLCanvas3D(wxGLCanvas* canvas); +#else GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER ~GLCanvas3D(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bool is_initialized() const { return m_initialized; } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + void set_context(wxGLContext* context) { m_context = context; } wxGLCanvas* get_wxglcanvas() { return m_canvas; } @@ -518,9 +533,14 @@ public: void set_color_by(const std::string& value); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + void refresh_camera_scene_box(); +#else + void refresh_camera_scene_box() { m_camera.set_scene_box(scene_bounding_box()); } const Camera& get_camera() const { return m_camera; } - const Shader& get_shader() const { return m_shader; } Camera& get_camera() { return m_camera; } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + const Shader& get_shader() const { return m_shader; } BoundingBoxf3 volumes_bounding_box() const; BoundingBoxf3 scene_bounding_box() const; @@ -614,7 +634,9 @@ public: void update_ui_from_settings(); +#if !ENABLE_NON_STATIC_CANVAS_MANAGER float get_view_toolbar_height() const { return m_view_toolbar.get_height(); } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER int get_move_volume_id() const { return m_mouse.drag.move_volume_idx; } int get_first_hover_volume_idx() const { return m_hover_volume_idxs.empty() ? -1 : m_hover_volume_idxs.front(); } @@ -646,7 +668,6 @@ public: Linef3 mouse_ray(const Point& mouse_pos); void set_mouse_as_dragging() { m_mouse.dragging = true; } - void refresh_camera_scene_box() { m_camera.set_scene_box(scene_bounding_box()); } bool is_mouse_dragging() const { return m_mouse.dragging; } double get_size_proportional_to_max_bed_size(double factor) const; diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index a5d75d6012..73a82f699a 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -1,3 +1,4 @@ +#include "libslic3r/libslic3r.h" #include "GLCanvas3DManager.hpp" #include "../../slic3r/GUI/GUI.hpp" #include "../../slic3r/GUI/AppConfig.hpp" @@ -23,6 +24,7 @@ namespace Slic3r { namespace GUI { +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::GLInfo::GLInfo() : m_detected(false) , m_version("") @@ -33,6 +35,7 @@ GLCanvas3DManager::GLInfo::GLInfo() , m_max_anisotropy(0.0f) { } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER const std::string& GLCanvas3DManager::GLInfo::get_version() const { @@ -188,22 +191,35 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten return out.str(); } -GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown; -bool GLCanvas3DManager::s_compressed_textures_supported = false; -GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None; GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info; +bool GLCanvas3DManager::s_compressed_textures_supported = false; +#if ENABLE_NON_STATIC_CANVAS_MANAGER +GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::EMultisampleState::Unknown; +GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::EFramebufferType::None; +#else +GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown; +GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::GLCanvas3DManager() : m_context(nullptr) , m_gl_initialized(false) { } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::~GLCanvas3DManager() { - this->destroy(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_context != nullptr) + delete m_context; +#else + this->destroy(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } +#if !ENABLE_NON_STATIC_CANVAS_MANAGER bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar) { if (canvas == nullptr) @@ -255,28 +271,50 @@ void GLCanvas3DManager::remove_all() m_canvases.clear(); } -unsigned int GLCanvas3DManager::count() const +size_t GLCanvas3DManager::count() const { - return (unsigned int)m_canvases.size(); + return m_canvases.size(); } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +#if ENABLE_NON_STATIC_CANVAS_MANAGER +bool GLCanvas3DManager::init_gl() +#else void GLCanvas3DManager::init_gl() +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (!m_gl_initialized) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (glewInit() != GLEW_OK) + { + BOOST_LOG_TRIVIAL(error) << "Unable to init glew library"; + return false; + } +#else glewInit(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_gl_initialized = true; if (GLEW_EXT_texture_compression_s3tc) s_compressed_textures_supported = true; else s_compressed_textures_supported = false; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (GLEW_ARB_framebuffer_object) + s_framebuffers_type = EFramebufferType::Arb; + else if (GLEW_EXT_framebuffer_object) + s_framebuffers_type = EFramebufferType::Ext; + else + s_framebuffers_type = EFramebufferType::None; +#else if (GLEW_ARB_framebuffer_object) s_framebuffers_type = FB_Arb; else if (GLEW_EXT_framebuffer_object) s_framebuffers_type = FB_Ext; else s_framebuffers_type = FB_None; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER if (! s_gl_info.is_version_greater_or_equal_to(2, 0)) { // Complain about the OpenGL version. @@ -292,8 +330,21 @@ void GLCanvas3DManager::init_gl() wxMessageBox(message, wxString("PrusaSlicer - ") + _(L("Unsupported OpenGL version")), wxOK | wxICON_ERROR); } } + +#if ENABLE_NON_STATIC_CANVAS_MANAGER + return true; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +wxGLContext* GLCanvas3DManager::init_glcontext(wxGLCanvas& canvas) +{ + if (m_context == nullptr) + m_context = new wxGLContext(&canvas); + + return m_context; +} +#else bool GLCanvas3DManager::init(wxGLCanvas* canvas) { CanvasesMap::const_iterator it = do_get_canvas(canvas); @@ -311,14 +362,21 @@ void GLCanvas3DManager::destroy() m_context = nullptr; } } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3D* GLCanvas3DManager::get_canvas(wxGLCanvas* canvas) { CanvasesMap::const_iterator it = do_get_canvas(canvas); return (it != m_canvases.end()) ? it->second : nullptr; } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +#if ENABLE_NON_STATIC_CANVAS_MANAGER +wxGLCanvas* GLCanvas3DManager::create_wxglcanvas(wxWindow& parent) +#else wxGLCanvas* GLCanvas3DManager::create_wxglcanvas(wxWindow *parent) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { int attribList[] = { WX_GL_RGBA, @@ -336,7 +394,11 @@ wxGLCanvas* GLCanvas3DManager::create_wxglcanvas(wxWindow *parent) 0 }; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (s_multisample == EMultisampleState::Unknown) +#else if (s_multisample == MS_Unknown) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { detect_multisample(attribList); // // debug output @@ -346,9 +408,14 @@ wxGLCanvas* GLCanvas3DManager::create_wxglcanvas(wxWindow *parent) if (! can_multisample()) attribList[12] = 0; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + return new wxGLCanvas(&parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS); +#else return new wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER } +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::CanvasesMap::iterator GLCanvas3DManager::do_get_canvas(wxGLCanvas* canvas) { return (canvas == nullptr) ? m_canvases.end() : m_canvases.find(canvas); @@ -366,12 +433,17 @@ bool GLCanvas3DManager::init(GLCanvas3D& canvas) return canvas.init(); } +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER void GLCanvas3DManager::detect_multisample(int* attribList) { int wxVersion = wxMAJOR_VERSION * 10000 + wxMINOR_VERSION * 100 + wxRELEASE_NUMBER; bool enable_multisample = wxVersion >= 30003; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + s_multisample = (enable_multisample && wxGLCanvas::IsDisplaySupported(attribList)) ? EMultisampleState::Enabled : EMultisampleState::Disabled; +#else s_multisample = (enable_multisample && wxGLCanvas::IsDisplaySupported(attribList)) ? MS_Enabled : MS_Disabled; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER // Alternative method: it was working on previous version of wxWidgets but not with the latest, at least on Windows // s_multisample = enable_multisample && wxGLCanvas::IsExtensionSupported("WGL_ARB_multisample"); } diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp index 940e0230ae..9b983dbb1a 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -23,22 +23,43 @@ class PrintObject; namespace GUI { class GLCanvas3D; +#if !ENABLE_NON_STATIC_CANVAS_MANAGER class Bed3D; class GLToolbar; struct Camera; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER class GLCanvas3DManager { public: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + enum class EFramebufferType : unsigned char + { + None, + Arb, + Ext + }; +#else enum EFramebufferType : unsigned char { FB_None, FB_Arb, FB_Ext }; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER class GLInfo { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + mutable bool m_detected{ false }; + mutable int m_max_tex_size{ 0 }; + mutable float m_max_anisotropy{ 0.0f }; + + mutable std::string m_version; + mutable std::string m_glsl_version; + mutable std::string m_vendor; + mutable std::string m_renderer; +#else mutable bool m_detected; mutable std::string m_version; @@ -48,9 +69,14 @@ public: mutable int m_max_tex_size; mutable float m_max_anisotropy; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER public: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + GLInfo() = default; +#else GLInfo(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const std::string& get_version() const; const std::string& get_glsl_version() const; @@ -69,6 +95,14 @@ public: }; private: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + enum class EMultisampleState : unsigned char + { + Unknown, + Enabled, + Disabled + }; +#else enum EMultisampleState : unsigned char { MS_Unknown, @@ -77,46 +111,79 @@ private: }; typedef std::map CanvasesMap; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER - CanvasesMap m_canvases; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bool m_gl_initialized{ false }; + wxGLContext* m_context{ nullptr }; +#else wxGLContext* m_context; - static GLInfo s_gl_info; bool m_gl_initialized; - static EMultisampleState s_multisample; + CanvasesMap m_canvases; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + static GLInfo s_gl_info; static bool s_compressed_textures_supported; + static EMultisampleState s_multisample; static EFramebufferType s_framebuffers_type; public: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + GLCanvas3DManager() = default; +#else GLCanvas3DManager(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER ~GLCanvas3DManager(); +#if !ENABLE_NON_STATIC_CANVAS_MANAGER bool add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar); bool remove(wxGLCanvas* canvas); void remove_all(); - unsigned int count() const; + size_t count() const; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bool init_gl(); +#else void init_gl(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGLContext* init_glcontext(wxGLCanvas& canvas); +#else bool init(wxGLCanvas* canvas); void destroy(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +#if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3D* get_canvas(wxGLCanvas* canvas); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER - static bool can_multisample() { return s_multisample == MS_Enabled; } static bool are_compressed_textures_supported() { return s_compressed_textures_supported; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER + static bool can_multisample() { return s_multisample == EMultisampleState::Enabled; } + static bool are_framebuffers_supported() { return (s_framebuffers_type != EFramebufferType::None); } +#else + static bool can_multisample() { return s_multisample == MS_Enabled; } static bool are_framebuffers_supported() { return (s_framebuffers_type != FB_None); } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER static EFramebufferType get_framebuffers_type() { return s_framebuffers_type; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER + static wxGLCanvas* create_wxglcanvas(wxWindow& parent); +#else static wxGLCanvas* create_wxglcanvas(wxWindow *parent); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER static const GLInfo& get_gl_info() { return s_gl_info; } private: +#if !ENABLE_NON_STATIC_CANVAS_MANAGER CanvasesMap::iterator do_get_canvas(wxGLCanvas* canvas); CanvasesMap::const_iterator do_get_canvas(wxGLCanvas* canvas) const; bool init(GLCanvas3D& canvas); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER static void detect_multisample(int* attribList); }; diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp index a8b69d75a1..a3103af3af 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.cpp +++ b/src/slic3r/GUI/GLSelectionRectangle.cpp @@ -2,6 +2,9 @@ #include "Camera.hpp" #include "3DScene.hpp" #include "GLCanvas3D.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "GUI_App.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include @@ -35,7 +38,11 @@ namespace GUI { m_state = Off; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); +#else const Camera& camera = canvas.get_camera(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const std::array& viewport = camera.get_viewport(); const Transform3d& modelview_matrix = camera.get_view_matrix(); const Transform3d& projection_matrix = camera.get_projection_matrix(); @@ -68,7 +75,11 @@ namespace GUI { if (!is_dragging()) return; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); +#else const Camera& camera = canvas.get_camera(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float inv_zoom = (float)camera.get_inv_zoom(); Size cnv_size = canvas.get_canvas_size(); diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index f178ddc73c..545b066bbe 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -2,6 +2,9 @@ #include "GLTexture.hpp" #include "3DScene.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "GLCanvas3DManager.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 61dba1c19d..1aac1d0b32 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -3,7 +3,13 @@ #include "GLToolbar.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Camera.hpp" +#else #include "../../slic3r/GUI/GLCanvas3D.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include @@ -16,7 +22,6 @@ namespace Slic3r { namespace GUI { - wxDEFINE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE_ALL, SimpleEvent); @@ -626,7 +631,11 @@ std::string GLToolbar::update_hover_state_horizontal(const Vec2d& mouse_pos, GLC { // NB: mouse_pos is already scaled appropriately +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = m_layout.scale * inv_zoom; Size cnv_size = parent.get_canvas_size(); @@ -730,7 +739,11 @@ std::string GLToolbar::update_hover_state_vertical(const Vec2d& mouse_pos, GLCan { // NB: mouse_pos is already scaled appropriately +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = m_layout.scale * inv_zoom; Size cnv_size = parent.get_canvas_size(); @@ -846,7 +859,11 @@ int GLToolbar::contains_mouse_horizontal(const Vec2d& mouse_pos, const GLCanvas3 { // NB: mouse_pos is already scaled appropriately +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = m_layout.scale * inv_zoom; Size cnv_size = parent.get_canvas_size(); @@ -919,7 +936,11 @@ int GLToolbar::contains_mouse_vertical(const Vec2d& mouse_pos, const GLCanvas3D& { // NB: mouse_pos is already scaled appropriately +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = m_layout.scale * inv_zoom; Size cnv_size = parent.get_canvas_size(); @@ -1071,7 +1092,11 @@ void GLToolbar::render_horizontal(const GLCanvas3D& parent) const int tex_width = m_icons_texture.get_width(); int tex_height = m_icons_texture.get_height(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = inv_zoom * m_layout.scale; float scaled_icons_size = m_layout.icons_size * factor; @@ -1119,7 +1144,11 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) const int tex_width = m_icons_texture.get_width(); int tex_height = m_icons_texture.get_height(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float inv_zoom = (float)parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float factor = inv_zoom * m_layout.scale; float scaled_icons_size = m_layout.icons_size * factor; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index e1973049f3..1d51481947 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -169,6 +169,23 @@ GUI_App::~GUI_App() delete preset_updater; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +std::string GUI_App::get_gl_info(bool format_as_html, bool extensions) +{ + return GLCanvas3DManager::get_gl_info().to_string(format_as_html, extensions); +} + +wxGLContext* GUI_App::init_glcontext(wxGLCanvas& canvas) +{ + return m_canvas_mgr.init_glcontext(canvas); +} + +bool GUI_App::init_opengl() +{ + return m_canvas_mgr.init_gl(); +} +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + bool GUI_App::OnInit() { try { @@ -575,7 +592,9 @@ void GUI_App::import_model(wxWindow *parent, wxArrayString& input_files) const bool GUI_App::switch_language() { if (select_language()) { +#if !ENABLE_NON_STATIC_CANVAS_MANAGER _3DScene::remove_all_canvases(); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER recreate_GUI(); return true; } else { @@ -744,7 +763,7 @@ bool GUI_App::load_language(wxString language, bool initial) wxTranslations::Get()->SetLanguage(language_dict); m_wxLocale->AddCatalog(SLIC3R_APP_KEY); m_imgui->set_language(into_u8(language_info->CanonicalName)); - //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. + //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. wxSetlocale(LC_NUMERIC, "C"); Preset::update_suffix_modified(); return true; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 10b09b1da7..d7cd0c9b81 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -7,6 +7,9 @@ #include "MainFrame.hpp" #include "ImGuiWrapper.hpp" #include "ConfigWizard.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "GLCanvas3DManager.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include #include @@ -96,6 +99,9 @@ class GUI_App : public wxApp // Best translation language, provided by Windows or OSX, owned by wxWidgets. const wxLanguageInfo *m_language_info_best = nullptr; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + GLCanvas3DManager m_canvas_mgr; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER std::unique_ptr m_imgui; std::unique_ptr m_printhost_job_queue; ConfigWizard* m_wizard; // Managed by wxWindow tree @@ -107,6 +113,12 @@ public: GUI_App(); ~GUI_App() override; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + static std::string get_gl_info(bool format_as_html, bool extensions); + wxGLContext* init_glcontext(wxGLCanvas& canvas); + bool init_opengl(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + static unsigned get_colour_approx_luma(const wxColour &colour); static bool dark_mode(); void init_label_colours(); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 1ae73a192c..4a2550596a 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -27,31 +27,64 @@ namespace Slic3r { namespace GUI { +#if ENABLE_NON_STATIC_CANVAS_MANAGER +View3D::View3D(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process) + : m_canvas_widget(nullptr) + , m_canvas(nullptr) +{ + init(parent, model, config, process); +} +#else View3D::View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process) : m_canvas_widget(nullptr) , m_canvas(nullptr) { init(parent, bed, camera, view_toolbar, model, config, process); } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER View3D::~View3D() { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_canvas != nullptr) + { + m_canvas->unbind_event_handlers(); + delete m_canvas; + } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_canvas_widget != nullptr) { +#if !ENABLE_NON_STATIC_CANVAS_MANAGER _3DScene::remove_canvas(m_canvas_widget); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER delete m_canvas_widget; m_canvas = nullptr; } } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +bool View3D::init(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process) +#else bool View3D::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (!Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 /* disable wxTAB_TRAVERSAL */)) return false; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_canvas_widget = GLCanvas3DManager::create_wxglcanvas(*this); + if (m_canvas_widget == nullptr) + return false; + + m_canvas = new GLCanvas3D(m_canvas_widget); + m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); + m_canvas->bind_event_handlers(); +#else m_canvas_widget = GLCanvas3DManager::create_wxglcanvas(this); _3DScene::add_canvas(m_canvas_widget, bed, camera, view_toolbar); m_canvas = _3DScene::get_canvas(this->m_canvas_widget); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_canvas->allow_multisample(GLCanvas3DManager::can_multisample()); // XXX: If have OpenGL @@ -163,9 +196,15 @@ void View3D::render() m_canvas->set_as_dirty(); } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +Preview::Preview( + wxWindow* parent, Model* model, DynamicPrintConfig* config, + BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process_func) +#else Preview::Preview( wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process_func) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER : m_canvas_widget(nullptr) , m_canvas(nullptr) , m_double_slider_sizer(nullptr) @@ -190,21 +229,39 @@ Preview::Preview( , m_volumes_cleanup_required(false) #endif // __linux__ { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (init(parent, model)) +#else if (init(parent, bed, camera, view_toolbar, model)) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { show_hide_ui_elements("none"); load_print(); } } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +bool Preview::init(wxWindow* parent, Model* model) +#else bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (!Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 /* disable wxTAB_TRAVERSAL */)) return false; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + m_canvas_widget = GLCanvas3DManager::create_wxglcanvas(*this); + if (m_canvas_widget == nullptr) + return false; + + m_canvas = new GLCanvas3D(m_canvas_widget); + m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); + m_canvas->bind_event_handlers(); +#else m_canvas_widget = GLCanvas3DManager::create_wxglcanvas(this); _3DScene::add_canvas(m_canvas_widget, bed, camera, view_toolbar); m_canvas = _3DScene::get_canvas(this->m_canvas_widget); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_canvas->allow_multisample(GLCanvas3DManager::can_multisample()); m_canvas->set_config(m_config); m_canvas->set_model(model); @@ -313,9 +370,19 @@ Preview::~Preview() { unbind_event_handlers(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_canvas != nullptr) + { + m_canvas->unbind_event_handlers(); + delete m_canvas; + } +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + if (m_canvas_widget != nullptr) { - _3DScene::remove_canvas(m_canvas_widget); +#if !ENABLE_NON_STATIC_CANVAS_MANAGER + _3DScene::remove_canvas(m_canvas_widget); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER delete m_canvas_widget; m_canvas = nullptr; } diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index cc8f153251..2fe26ede9d 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -34,6 +34,9 @@ class GLCanvas3D; class GLToolbar; class Bed3D; struct Camera; +#if ENABLE_NON_STATIC_CANVAS_MANAGER +class Plater; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER class View3D : public wxPanel { @@ -41,7 +44,11 @@ class View3D : public wxPanel GLCanvas3D* m_canvas; public: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + View3D(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process); +#else View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER virtual ~View3D(); wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; } @@ -69,7 +76,11 @@ public: void render(); private: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bool init(wxWindow* parent, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process); +#else bool init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER }; class Preview : public wxPanel @@ -109,8 +120,13 @@ class Preview : public wxPanel DoubleSlider::Control* m_slider {nullptr}; public: - Preview(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Preview(wxWindow* parent, Model* model, DynamicPrintConfig* config, + BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process = []() {}); +#else + Preview(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model, DynamicPrintConfig* config, BackgroundSlicingProcess* process, GCodePreviewData* gcode_preview_data, std::function schedule_background_process = [](){}); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER virtual ~Preview(); wxGLCanvas* get_wxglcanvas() { return m_canvas_widget; } @@ -137,7 +153,11 @@ public: bool is_loaded() const { return m_loaded; } private: +#if ENABLE_NON_STATIC_CANVAS_MANAGER + bool init(wxWindow* parent, Model* model); +#else bool init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar, Model* model); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER void bind_event_handlers(); void unbind_event_handlers(); @@ -170,7 +190,6 @@ private: void load_print_as_sla(); void on_sliders_scroll_changed(wxCommandEvent& event); - }; } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 43f83d11b8..a682191635 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -9,6 +9,9 @@ #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/MeshUtils.hpp" #include "slic3r/GUI/Plater.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "slic3r/GUI/Camera.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include "slic3r/GUI/PresetBundle.hpp" #include "libslic3r/SLAPrint.hpp" #include "libslic3r/TriangleMesh.hpp" @@ -345,7 +348,11 @@ bool GLGizmoHollow::unproject_on_mesh(const Vec2d& mouse_pos, std::pairupdate_from_backend(m_parent, m_c->m_model_object); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); +#else const Camera& camera = m_parent.get_camera(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const Selection& selection = m_parent.get_selection(); const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); Geometry::Transformation trafo = volume->get_instance_transformation(); @@ -460,7 +467,11 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos points_inside.push_back(points[idx].cast()); // Only select/deselect points that are actually visible +#if ENABLE_NON_STATIC_CANVAS_MANAGER + for (size_t idx : m_c->m_mesh_raycaster->get_unobscured_idxs(trafo, wxGetApp().plater()->get_camera(), points_inside, m_c->m_clipping_plane.get())) +#else for (size_t idx : m_c->m_mesh_raycaster->get_unobscured_idxs(trafo, m_parent.get_camera(), points_inside, m_c->m_clipping_plane.get())) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (rectangle_status == GLSelectionRectangle::Deselect) unselect_point(points_idxs[idx]); @@ -1137,8 +1148,13 @@ void GLGizmoHollow::update_clipping_plane(bool keep_normal) const { if (! m_c->m_model_object) return; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Vec3d normal = (keep_normal && m_c->m_clipping_plane->get_normal() != Vec3d::Zero() ? + m_c->m_clipping_plane->get_normal() : -wxGetApp().plater()->get_camera().get_dir_forward()); +#else Vec3d normal = (keep_normal && m_c->m_clipping_plane->get_normal() != Vec3d::Zero() ? m_c->m_clipping_plane->get_normal() : -m_parent.get_camera().get_dir_forward()); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const Vec3d& center = m_c->m_model_object->instances[m_c->m_active_instance]->get_offset() + Vec3d(0., 0., m_z_shift); float dist = normal.dot(center); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index aa9ce50144..e7764db9c7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -13,6 +13,9 @@ #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_ObjectSettings.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "slic3r/GUI/Camera.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include "slic3r/GUI/MeshUtils.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/PresetBundle.hpp" @@ -414,7 +417,11 @@ bool GLGizmoSlaSupports::unproject_on_mesh(const Vec2d& mouse_pos, std::pairm_mesh_raycaster) return false; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const Camera& camera = wxGetApp().plater()->get_camera(); +#else const Camera& camera = m_parent.get_camera(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const Selection& selection = m_parent.get_selection(); const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); Geometry::Transformation trafo = volume->get_instance_transformation(); @@ -524,7 +531,11 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous points_inside.push_back(points[idx].cast()); // Only select/deselect points that are actually visible +#if ENABLE_NON_STATIC_CANVAS_MANAGER + for (size_t idx : m_c->m_mesh_raycaster->get_unobscured_idxs(trafo, wxGetApp().plater()->get_camera(), points_inside, m_c->m_clipping_plane.get())) +#else for (size_t idx : m_c->m_mesh_raycaster->get_unobscured_idxs(trafo, m_parent.get_camera(), points_inside, m_c->m_clipping_plane.get())) +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER { if (rectangle_status == GLSelectionRectangle::Deselect) unselect_point(points_idxs[idx]); @@ -1321,8 +1332,14 @@ void GLGizmoSlaSupports::update_clipping_plane(bool keep_normal) const { if (! m_c->m_model_object) return; + +#if ENABLE_NON_STATIC_CANVAS_MANAGER Vec3d normal = (keep_normal && m_c->m_clipping_plane->get_normal() != Vec3d::Zero() ? - m_c->m_clipping_plane->get_normal() : -m_parent.get_camera().get_dir_forward()); + m_c->m_clipping_plane->get_normal() : -wxGetApp().plater()->get_camera().get_dir_forward()); +#else + Vec3d normal = (keep_normal && m_c->m_clipping_plane->get_normal() != Vec3d::Zero() ? + m_c->m_clipping_plane->get_normal() : -m_parent.get_camera().get_dir_forward()); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER const Vec3d& center = m_c->m_model_object->instances[m_c->m_active_instance]->get_offset() + Vec3d(0., 0., m_z_shift); float dist = normal.dot(center); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 7d747ceff1..a9e5e2de6a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -2,6 +2,9 @@ #include "GLGizmosManager.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/3DScene.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include "slic3r/GUI/Camera.hpp" +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_ObjectManipulation.hpp" #include "slic3r/GUI/PresetBundle.hpp" @@ -884,8 +887,13 @@ void GLGizmosManager::do_render_overlay() const float cnv_w = (float)m_parent.get_canvas_size().get_width(); float cnv_h = (float)m_parent.get_canvas_size().get_height(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float zoom = (float)wxGetApp().plater()->get_camera().get_zoom(); + float inv_zoom = (float)wxGetApp().plater()->get_camera().get_inv_zoom(); +#else float zoom = (float)m_parent.get_camera().get_zoom(); float inv_zoom = (float)m_parent.get_camera().get_inv_zoom(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER float height = get_scaled_total_height(); float width = get_scaled_total_width(); @@ -936,7 +944,11 @@ void GLGizmosManager::do_render_overlay() const GLTexture::render_sub_texture(icons_texture_id, zoomed_top_x, zoomed_top_x + zoomed_icons_size, zoomed_top_y - zoomed_icons_size, zoomed_top_y, { { u_left, v_bottom }, { u_right, v_bottom }, { u_right, v_top }, { u_left, v_top } }); if (idx == m_current) { +#if ENABLE_NON_STATIC_CANVAS_MANAGER + float toolbar_top = cnv_h - wxGetApp().plater()->get_view_toolbar().get_height(); +#else float toolbar_top = cnv_h - m_parent.get_view_toolbar_height(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER gizmo->render_input_window(width, 0.5f * cnv_h - zoomed_top_y * zoom, toolbar_top); } zoomed_top_y -= zoomed_stride_y; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 966fb7c8e2..550b495ad7 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -122,7 +122,9 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S wxGetApp().app_config->save(); // if (m_plater) // m_plater->print = undef; +#if !ENABLE_NON_STATIC_CANVAS_MANAGER _3DScene::remove_all_canvases(); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER // Slic3r::GUI::deregister_on_request_update_callback(); // set to null tabs and a plater diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 0f9b21b78a..64502bcf9d 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2031,8 +2031,13 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) sla_print.set_status_callback(statuscb); this->q->Bind(EVT_SLICING_UPDATE, &priv::on_slicing_update, this); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + view3D = new View3D(q, &model, config, &background_process); + preview = new Preview(q, &model, config, &background_process, &gcode_preview_data, [this]() { schedule_background_process(); }); +#else view3D = new View3D(q, bed, camera, view_toolbar, &model, config, &background_process); preview = new Preview(q, bed, camera, view_toolbar, &model, config, &background_process, &gcode_preview_data, [this](){ schedule_background_process(); }); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER panels.push_back(view3D); panels.push_back(preview); @@ -2132,7 +2137,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Drop target: q->SetDropTarget(new PlaterDropTarget(q)); // if my understanding is right, wxWindow takes the owenership +#if !ENABLE_NON_STATIC_CANVAS_MANAGER update_ui_from_settings(); +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER q->Layout(); set_current_panel(view3D); @@ -4530,7 +4537,8 @@ void Sidebar::set_btn_label(const ActionButtonType btn_type, const wxString& lab // Plater / Public Plater::Plater(wxWindow *parent, MainFrame *main_frame) - : wxPanel(parent), p(new priv(this, main_frame)) + : wxPanel(parent) + , p(new priv(this, main_frame)) { // Initialization performed in the private c-tor } @@ -5626,6 +5634,33 @@ const Camera& Plater::get_camera() const return p->camera; } +#if ENABLE_NON_STATIC_CANVAS_MANAGER +Camera& Plater::get_camera() +{ + return p->camera; +} + +const Bed3D& Plater::get_bed() const +{ + return p->bed; +} + +Bed3D& Plater::get_bed() +{ + return p->bed; +} + +const GLToolbar& Plater::get_view_toolbar() const +{ + return p->view_toolbar; +} + +GLToolbar& Plater::get_view_toolbar() +{ + return p->view_toolbar; +} +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + const Mouse3DController& Plater::get_mouse3d_controller() const { return p->mouse3d_controller; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 2e4f2ca85e..1222a5f04b 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -280,12 +280,22 @@ public: bool init_view_toolbar(); const Camera& get_camera() const; +#if ENABLE_NON_STATIC_CANVAS_MANAGER + Camera& get_camera(); + + const Bed3D& get_bed() const; + Bed3D& get_bed(); + + const GLToolbar& get_view_toolbar() const; + GLToolbar& get_view_toolbar(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + const Mouse3DController& get_mouse3d_controller() const; Mouse3DController& get_mouse3d_controller(); void set_bed_shape() const; - // ROII wrapper for suppressing the Undo / Redo snapshot to be taken. + // ROII wrapper for suppressing the Undo / Redo snapshot to be taken. class SuppressSnapshots { public: diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index bb81b56c0d..59998a4cc1 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -439,6 +439,12 @@ void Selection::clear() update_type(); this->set_bounding_boxes_dirty(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + // this happens while the application is closing + if (wxGetApp().obj_manipul() == nullptr) + return; +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER + // resets the cache in the sidebar wxGetApp().obj_manipul()->reset_cache(); diff --git a/src/slic3r/GUI/SysInfoDialog.cpp b/src/slic3r/GUI/SysInfoDialog.cpp index a1bae8742e..f26fe7033e 100644 --- a/src/slic3r/GUI/SysInfoDialog.cpp +++ b/src/slic3r/GUI/SysInfoDialog.cpp @@ -145,7 +145,11 @@ SysInfoDialog::SysInfoDialog() "" "" "", bgr_clr_str, text_clr_str, text_clr_str, +#if ENABLE_NON_STATIC_CANVAS_MANAGER + get_mem_info(true) + "
" + wxGetApp().get_gl_info(true, true)); +#else get_mem_info(true) + "
" + _3DScene::get_gl_info(true, true)); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER m_opengl_info_html->SetPage(text); main_sizer->Add(m_opengl_info_html, 1, wxEXPAND | wxBOTTOM, 15); } @@ -198,7 +202,11 @@ void SysInfoDialog::on_dpi_changed(const wxRect &suggested_rect) void SysInfoDialog::onCopyToClipboard(wxEvent &) { wxTheClipboard->Open(); +#if ENABLE_NON_STATIC_CANVAS_MANAGER + const auto text = get_main_info(false) + "\n" + wxGetApp().get_gl_info(false, true); +#else const auto text = get_main_info(false)+"\n"+_3DScene::get_gl_info(false, true); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER wxTheClipboard->SetData(new wxTextDataObject(text)); wxTheClipboard->Close(); } From 10d2193645a4cfa70ebccfb482a20ced42e60835 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 11:40:35 +0100 Subject: [PATCH 02/15] Fixed build on MAC --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ src/slic3r/GUI/GLCanvas3DManager.cpp | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 173000ab08..02fa09fcbe 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1472,7 +1472,11 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar #if ENABLE_RETINA_GL m_retina_helper.reset(new RetinaHelper(canvas)); // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size +#if ENABLE_NON_STATIC_CANVAS_MANAGER + wxGetApp().plater()->get_view_toolbar().set_icons_size(GLGizmosManager::Default_Icons_Size); +#else m_view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #endif } diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 4c9344cd3e..1e53db2f17 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -8,7 +8,9 @@ #include #include - +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#include +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include #include #include From 3f693362043cb66d96ee5d7507efdd1abffe41e2 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 12:13:39 +0100 Subject: [PATCH 03/15] Removed tech ENABLE_HACK_CLOSING_ON_OSX_10_9_5 --- src/libslic3r/Technologies.hpp | 16 ++++---- src/slic3r/GUI/GLCanvas3DManager.cpp | 58 ++++++++++++++++------------ src/slic3r/GUI/GLCanvas3DManager.hpp | 38 +++++++++--------- 3 files changed, 61 insertions(+), 51 deletions(-) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 51f7275a4d..926d515789 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -42,13 +42,15 @@ #define ENABLE_THUMBNAIL_GENERATOR_DEBUG (0 && ENABLE_THUMBNAIL_GENERATOR) -//================== -// 2.2.0.rc1 techs -//================== -#define ENABLE_2_2_0_RC1 1 - -// Enable hack to remove crash when closing on OSX 10.9.5 -#define ENABLE_HACK_CLOSING_ON_OSX_10_9_5 (1 && ENABLE_2_2_0_RC1) +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +////================== +//// 2.2.0.rc1 techs +////================== +//#define ENABLE_2_2_0_RC1 1 +// +//// Enable hack to remove crash when closing on OSX 10.9.5 +//#define ENABLE_HACK_CLOSING_ON_OSX_10_9_5 (1 && ENABLE_2_2_0_RC1) +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //================== diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 1e53db2f17..a4b45dd666 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -19,10 +19,12 @@ #include #include -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -// Part of temporary hack to remove crash when closing on OSX 10.9.5 -#include -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//// Part of temporary hack to remove crash when closing on OSX 10.9.5 +//#include +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #ifdef __APPLE__ #include "../Utils/MacDarkMode.hpp" @@ -211,11 +213,13 @@ GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -#ifdef __APPLE__ -GLCanvas3DManager::OSInfo GLCanvas3DManager::s_os_info; -#endif // __APPLE__ -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//#ifdef __APPLE__ +//GLCanvas3DManager::OSInfo GLCanvas3DManager::s_os_info; +//#endif // __APPLE__ +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::GLCanvas3DManager() @@ -256,14 +260,16 @@ bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLTo if (m_context == nullptr) return false; -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -#ifdef __APPLE__ - // Part of temporary hack to remove crash when closing on OSX 10.9.5 - s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); - s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); - s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); -#endif //__APPLE__ -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//#ifdef __APPLE__ +// // Part of temporary hack to remove crash when closing on OSX 10.9.5 +// s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); +// s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); +// s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); +//#endif //__APPLE__ +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } canvas3D->set_context(m_context); @@ -383,14 +389,16 @@ void GLCanvas3DManager::destroy() { if (m_context != nullptr) { -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -#ifdef __APPLE__ - // this is a temporary ugly hack to solve the crash happening when closing the application on OSX 10.9.5 - // the crash is inside wxGLContext destructor - if (s_os_info.major == 10 && s_os_info.minor == 9 && s_os_info.micro == 5) - return; -#endif //__APPLE__ -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//#ifdef __APPLE__ +// // this is a temporary ugly hack to solve the crash happening when closing the application on OSX 10.9.5 +// // the crash is inside wxGLContext destructor +// if (s_os_info.major == 10 && s_os_info.minor == 9 && s_os_info.micro == 5) +// return; +//#endif //__APPLE__ +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_context; m_context = nullptr; diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp index 2efa646d98..ad27f13397 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -94,16 +94,18 @@ public: void detect() const; }; -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -#ifdef __APPLE__ - struct OSInfo - { - int major{ 0 }; - int minor{ 0 }; - int micro{ 0 }; - }; -#endif //__APPLE__ -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//#ifdef __APPLE__ +// struct OSInfo +// { +// int major{ 0 }; +// int minor{ 0 }; +// int micro{ 0 }; +// }; +//#endif //__APPLE__ +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ private: #if ENABLE_NON_STATIC_CANVAS_MANAGER @@ -129,15 +131,13 @@ private: wxGLContext* m_context{ nullptr }; #else wxGLContext* m_context; -<<<<<<< HEAD -======= - static GLInfo s_gl_info; -#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -#ifdef __APPLE__ - static OSInfo s_os_info; -#endif //__APPLE__ -#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 ->>>>>>> 11bd62a3e6887741701eb908e0fd0cc0b6afb576 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//#ifdef __APPLE__ +// static OSInfo s_os_info; +//#endif //__APPLE__ +//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool m_gl_initialized; CanvasesMap m_canvases; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER From 595128a90d19d5211e5e89cd426f406073989ae5 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 12:45:04 +0100 Subject: [PATCH 04/15] View toolbar's initialization of icon size moved from GLCanvas3D::GLCanvas3D() to Plater::priv::priv() for OSX build --- src/slic3r/GUI/GLCanvas3D.cpp | 8 +++----- src/slic3r/GUI/Plater.cpp | 10 ++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 02fa09fcbe..1cb212f243 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1471,13 +1471,11 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar m_timer.SetOwner(m_canvas); #if ENABLE_RETINA_GL m_retina_helper.reset(new RetinaHelper(canvas)); +#if !ENABLE_NON_STATIC_CANVAS_MANAGER // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size -#if ENABLE_NON_STATIC_CANVAS_MANAGER - wxGetApp().plater()->get_view_toolbar().set_icons_size(GLGizmosManager::Default_Icons_Size); -#else m_view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); -#endif // ENABLE_NON_STATIC_CANVAS_MANAGER -#endif +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER +#endif // ENABLE_RETINA_GL } m_selection.set_volumes(&m_volumes.volumes); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5d6f72fe54..38ca03656c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -82,6 +82,11 @@ #include "../Utils/UndoRedo.hpp" #include "../Utils/Thread.hpp" #include "RemovableDriveManager.hpp" +#if ENABLE_NON_STATIC_CANVAS_MANAGER +#ifdef __APPLE__ +#include "Gizmos/GLGizmosManager.hpp" +#endif // __APPLE__ +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include // Needs to be last because reasons :-/ #include "WipeTowerDialog.hpp" @@ -2039,6 +2044,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) #if ENABLE_NON_STATIC_CANVAS_MANAGER view3D = new View3D(q, &model, config, &background_process); preview = new Preview(q, &model, config, &background_process, &gcode_preview_data, [this]() { schedule_background_process(); }); + +#ifdef __APPLE__ + // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size + m_view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); +#endif // __APPLE__ #else view3D = new View3D(q, bed, camera, view_toolbar, &model, config, &background_process); preview = new Preview(q, bed, camera, view_toolbar, &model, config, &background_process, &gcode_preview_data, [this](){ schedule_background_process(); }); From 9e06a5e8d665ffef575285764e81a4493df86f52 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 13:09:12 +0100 Subject: [PATCH 05/15] Fix build on Linux and MAC --- src/slic3r/GUI/GLCanvas3DManager.cpp | 4 ++-- src/slic3r/GUI/GLCanvas3DManager.hpp | 4 ++-- src/slic3r/GUI/Plater.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index a4b45dd666..f275254271 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -207,7 +207,7 @@ GLCanvas3DManager::GLInfo GLCanvas3DManager::s_gl_info; bool GLCanvas3DManager::s_compressed_textures_supported = false; #if ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::EMultisampleState::Unknown; -GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::EFramebufferType::None; +GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::EFramebufferType::Unknown; #else GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas3DManager::MS_Unknown; GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None; @@ -337,7 +337,7 @@ void GLCanvas3DManager::init_gl() else if (GLEW_EXT_framebuffer_object) s_framebuffers_type = EFramebufferType::Ext; else - s_framebuffers_type = EFramebufferType::None; + s_framebuffers_type = EFramebufferType::Unknown; #else if (GLEW_ARB_framebuffer_object) s_framebuffers_type = FB_Arb; diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp index ad27f13397..5f0c76cb73 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -35,7 +35,7 @@ public: #if ENABLE_NON_STATIC_CANVAS_MANAGER enum class EFramebufferType : unsigned char { - None, + Unknown, Arb, Ext }; @@ -182,7 +182,7 @@ public: static bool are_compressed_textures_supported() { return s_compressed_textures_supported; } #if ENABLE_NON_STATIC_CANVAS_MANAGER static bool can_multisample() { return s_multisample == EMultisampleState::Enabled; } - static bool are_framebuffers_supported() { return (s_framebuffers_type != EFramebufferType::None); } + static bool are_framebuffers_supported() { return (s_framebuffers_type != EFramebufferType::Unknown); } #else static bool can_multisample() { return s_multisample == MS_Enabled; } static bool are_framebuffers_supported() { return (s_framebuffers_type != FB_None); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 38ca03656c..b5a43b7d02 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2047,7 +2047,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) #ifdef __APPLE__ // set default view_toolbar icons size equal to GLGizmosManager::Default_Icons_Size - m_view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); + view_toolbar.set_icons_size(GLGizmosManager::Default_Icons_Size); #endif // __APPLE__ #else view3D = new View3D(q, bed, camera, view_toolbar, &model, config, &background_process); From 0a3555f73b04425b485d310b7913d4cddf53d725 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 14:37:01 +0100 Subject: [PATCH 06/15] Reintroduced tech ENABLE_HACK_CLOSING_ON_OSX_10_9_5 --- src/libslic3r/Technologies.hpp | 16 +++--- src/slic3r/GUI/GLCanvas3DManager.cpp | 76 ++++++++++++++++------------ src/slic3r/GUI/GLCanvas3DManager.hpp | 36 +++++++------ 3 files changed, 67 insertions(+), 61 deletions(-) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 926d515789..90c2525da5 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -42,15 +42,13 @@ #define ENABLE_THUMBNAIL_GENERATOR_DEBUG (0 && ENABLE_THUMBNAIL_GENERATOR) -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -////================== -//// 2.2.0.rc1 techs -////================== -//#define ENABLE_2_2_0_RC1 1 -// -//// Enable hack to remove crash when closing on OSX 10.9.5 -//#define ENABLE_HACK_CLOSING_ON_OSX_10_9_5 (1 && ENABLE_2_2_0_RC1) -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +//================== +// 2.2.0.rc1 techs +//================== +#define ENABLE_2_2_0_RC1 1 + +// Enable hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets +#define ENABLE_HACK_CLOSING_ON_OSX_10_9_5 (1 && ENABLE_2_2_0_RC1) //================== diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index f275254271..6430ed8e77 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -19,12 +19,12 @@ #include #include -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//// Part of temporary hack to remove crash when closing on OSX 10.9.5 -//#include -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ +// Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets +#include +#endif // __APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ #include "../Utils/MacDarkMode.hpp" @@ -213,13 +213,12 @@ GLCanvas3DManager::EMultisampleState GLCanvas3DManager::s_multisample = GLCanvas GLCanvas3DManager::EFramebufferType GLCanvas3DManager::s_framebuffers_type = GLCanvas3DManager::FB_None; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//#ifdef __APPLE__ -//GLCanvas3DManager::OSInfo GLCanvas3DManager::s_os_info; -//#endif // __APPLE__ -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ +// Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets +GLCanvas3DManager::OSInfo GLCanvas3DManager::s_os_info; +#endif // __APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #if !ENABLE_NON_STATIC_CANVAS_MANAGER GLCanvas3DManager::GLCanvas3DManager() @@ -232,8 +231,23 @@ GLCanvas3DManager::GLCanvas3DManager() GLCanvas3DManager::~GLCanvas3DManager() { #if ENABLE_NON_STATIC_CANVAS_MANAGER +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets + // The crash is triggered inside wxGLContext destructor + if (s_os_info.major != 10 || s_os_info.minor != 9 || s_os_info.micro != 5) + { +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 + if (m_context != nullptr) delete m_context; + +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + } +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #else this->destroy(); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER @@ -260,16 +274,14 @@ bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLTo if (m_context == nullptr) return false; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//#ifdef __APPLE__ -// // Part of temporary hack to remove crash when closing on OSX 10.9.5 -// s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); -// s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); -// s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); -//#endif //__APPLE__ -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets + s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); + s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); + s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 } canvas3D->set_context(m_context); @@ -389,16 +401,14 @@ void GLCanvas3DManager::destroy() { if (m_context != nullptr) { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//#ifdef __APPLE__ -// // this is a temporary ugly hack to solve the crash happening when closing the application on OSX 10.9.5 -// // the crash is inside wxGLContext destructor -// if (s_os_info.major == 10 && s_os_info.minor == 9 && s_os_info.micro == 5) -// return; -//#endif //__APPLE__ -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // this is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 + // the crash is inside wxGLContext destructor + if (s_os_info.major == 10 && s_os_info.minor == 9 && s_os_info.micro == 5) + return; +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 delete m_context; m_context = nullptr; diff --git a/src/slic3r/GUI/GLCanvas3DManager.hpp b/src/slic3r/GUI/GLCanvas3DManager.hpp index 5f0c76cb73..428ccd96a4 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -94,18 +94,17 @@ public: void detect() const; }; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//#ifdef __APPLE__ -// struct OSInfo -// { -// int major{ 0 }; -// int minor{ 0 }; -// int micro{ 0 }; -// }; -//#endif //__APPLE__ -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets + struct OSInfo + { + int major{ 0 }; + int minor{ 0 }; + int micro{ 0 }; + }; +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 private: #if ENABLE_NON_STATIC_CANVAS_MANAGER @@ -131,17 +130,16 @@ private: wxGLContext* m_context{ nullptr }; #else wxGLContext* m_context; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//#ifdef __APPLE__ -// static OSInfo s_os_info; -//#endif //__APPLE__ -//#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool m_gl_initialized; CanvasesMap m_canvases; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER static GLInfo s_gl_info; +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets + static OSInfo s_os_info; +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 static bool s_compressed_textures_supported; static EMultisampleState s_multisample; static EFramebufferType s_framebuffers_type; From 8b5a08a64a9920f9448f6724e52ac4ee46765028 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 15:22:41 +0100 Subject: [PATCH 07/15] Added temporary debug output --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ src/slic3r/GUI/GLCanvas3DManager.cpp | 16 ++++++++++++++-- src/slic3r/GUI/GUI_App.cpp | 4 ++++ src/slic3r/GUI/GUI_Preview.cpp | 8 ++++++++ src/slic3r/GUI/ImGuiWrapper.cpp | 4 ++++ src/slic3r/GUI/MainFrame.hpp | 8 +++++++- src/slic3r/GUI/Plater.cpp | 7 +++++++ 7 files changed, 48 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 1cb212f243..cbcae2f900 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1483,6 +1483,10 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar GLCanvas3D::~GLCanvas3D() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3D::~GLCanvas3D()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + reset_volumes(); } diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 6430ed8e77..39bb482e3a 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -230,9 +230,16 @@ GLCanvas3DManager::GLCanvas3DManager() GLCanvas3DManager::~GLCanvas3DManager() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3DManager::~GLCanvas3DManager()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + #if ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "OSX version" << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets // The crash is triggered inside wxGLContext destructor if (s_os_info.major != 10 || s_os_info.minor != 9 || s_os_info.micro != 5) @@ -240,8 +247,13 @@ GLCanvas3DManager::~GLCanvas3DManager() #endif //__APPLE__ #endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 - if (m_context != nullptr) - delete m_context; + if (m_context != nullptr) + { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Destroy wxGLContext\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + delete m_context; + } #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 6b92bb21b7..dd24d5d850 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -159,6 +159,10 @@ GUI_App::GUI_App() GUI_App::~GUI_App() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GUI_App::~GUI_App()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + if (app_config != nullptr) delete app_config; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 4a2550596a..3d315644d8 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -45,6 +45,10 @@ View3D::View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_too View3D::~View3D() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "View3D::~View3D()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) { @@ -368,6 +372,10 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view Preview::~Preview() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Preview::~Preview()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + unbind_event_handlers(); #if ENABLE_NON_STATIC_CANVAS_MANAGER diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 3efa800a92..28c407eee1 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -46,6 +46,10 @@ ImGuiWrapper::ImGuiWrapper() ImGuiWrapper::~ImGuiWrapper() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "ImGuiWrapper::~ImGuiWrapper()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + destroy_font(); ImGui::DestroyContext(); } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index a6d0749ab6..b014b929a8 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -96,7 +96,13 @@ protected: public: MainFrame(); - ~MainFrame() = default; + ~MainFrame() + { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "MainFrame::~MainFrame()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + } +// ~MainFrame() = default; Plater* plater() { return m_plater; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index b5a43b7d02..9cc62b1633 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2173,6 +2173,10 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) Plater::priv::~priv() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Plater::priv::~priv()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + mouse3d_controller.shutdown(); if (config != nullptr) @@ -4560,6 +4564,9 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) Plater::~Plater() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Plater::~Plater()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } Sidebar& Plater::sidebar() { return *p->sidebar; } From a14fe518be4e4f185c8c714bcca316a4afc9fcb3 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 2 Mar 2020 15:55:36 +0100 Subject: [PATCH 08/15] Fixed detection of OSX version --- src/slic3r/GUI/GLCanvas3DManager.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 39bb482e3a..54b889a3d8 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -238,7 +238,7 @@ GLCanvas3DManager::~GLCanvas3DManager() #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "OSX version" << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; + std::cout << "OSX version: " << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets // The crash is triggered inside wxGLContext destructor @@ -395,8 +395,22 @@ void GLCanvas3DManager::init_gl() wxGLContext* GLCanvas3DManager::init_glcontext(wxGLCanvas& canvas) { if (m_context == nullptr) + { m_context = new wxGLContext(&canvas); +#if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 +#ifdef __APPLE__ + // Part of hack to remove crash when closing the application on OSX 10.9.5 when building against newer wxWidgets + s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); + s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); + s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3DManager::init_glcontext() -> OSX version: " << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#endif //__APPLE__ +#endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 + } return m_context; } #else From d12cc6cb77b7dc597677f4b07c8ecee679f3b7e9 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Tue, 3 Mar 2020 08:34:03 +0100 Subject: [PATCH 09/15] Removed temporary debug output --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ---- src/slic3r/GUI/GLCanvas3DManager.cpp | 16 ---------------- src/slic3r/GUI/GUI_App.cpp | 4 ---- src/slic3r/GUI/GUI_Preview.cpp | 8 -------- src/slic3r/GUI/ImGuiWrapper.cpp | 4 ---- src/slic3r/GUI/MainFrame.hpp | 8 +------- src/slic3r/GUI/Plater.cpp | 7 ------- 7 files changed, 1 insertion(+), 50 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index cbcae2f900..1cb212f243 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1483,10 +1483,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar GLCanvas3D::~GLCanvas3D() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3D::~GLCanvas3D()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - reset_volumes(); } diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 54b889a3d8..47812db394 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -230,16 +230,9 @@ GLCanvas3DManager::GLCanvas3DManager() GLCanvas3DManager::~GLCanvas3DManager() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3DManager::~GLCanvas3DManager()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - #if ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "OSX version: " << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // This is an ugly hack needed to solve the crash happening when closing the application on OSX 10.9.5 with newer wxWidgets // The crash is triggered inside wxGLContext destructor if (s_os_info.major != 10 || s_os_info.minor != 9 || s_os_info.micro != 5) @@ -248,12 +241,7 @@ GLCanvas3DManager::~GLCanvas3DManager() #endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 if (m_context != nullptr) - { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Destroy wxGLContext\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_context; - } #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ @@ -404,10 +392,6 @@ wxGLContext* GLCanvas3DManager::init_glcontext(wxGLCanvas& canvas) s_os_info.major = wxPlatformInfo::Get().GetOSMajorVersion(); s_os_info.minor = wxPlatformInfo::Get().GetOSMinorVersion(); s_os_info.micro = wxPlatformInfo::Get().GetOSMicroVersion(); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3DManager::init_glcontext() -> OSX version: " << s_os_info.major << "." << s_os_info.minor << "." << s_os_info.micro << std::endl;; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #endif //__APPLE__ #endif // ENABLE_HACK_CLOSING_ON_OSX_10_9_5 } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index dd24d5d850..6b92bb21b7 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -159,10 +159,6 @@ GUI_App::GUI_App() GUI_App::~GUI_App() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GUI_App::~GUI_App()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - if (app_config != nullptr) delete app_config; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 3d315644d8..4a2550596a 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -45,10 +45,6 @@ View3D::View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_too View3D::~View3D() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "View3D::~View3D()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) { @@ -372,10 +368,6 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view Preview::~Preview() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Preview::~Preview()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - unbind_event_handlers(); #if ENABLE_NON_STATIC_CANVAS_MANAGER diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 28c407eee1..3efa800a92 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -46,10 +46,6 @@ ImGuiWrapper::ImGuiWrapper() ImGuiWrapper::~ImGuiWrapper() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "ImGuiWrapper::~ImGuiWrapper()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - destroy_font(); ImGui::DestroyContext(); } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index b014b929a8..a6d0749ab6 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -96,13 +96,7 @@ protected: public: MainFrame(); - ~MainFrame() - { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "MainFrame::~MainFrame()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - } -// ~MainFrame() = default; + ~MainFrame() = default; Plater* plater() { return m_plater; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 9cc62b1633..b5a43b7d02 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2173,10 +2173,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) Plater::priv::~priv() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Plater::priv::~priv()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - mouse3d_controller.shutdown(); if (config != nullptr) @@ -4564,9 +4560,6 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) Plater::~Plater() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Plater::~Plater()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } Sidebar& Plater::sidebar() { return *p->sidebar; } From 1bff1f746075fff053abe5d9dfabaf1f24a09b55 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 4 Mar 2020 14:19:15 +0100 Subject: [PATCH 10/15] Added temporary debug output to investigate crash on MAC when closing using Command+Q --- src/slic3r/GUI/GLCanvas3D.cpp | 11 +++++++++++ src/slic3r/GUI/GLCanvas3DManager.cpp | 3 +++ src/slic3r/GUI/GUI_App.cpp | 3 +++ src/slic3r/GUI/GUI_Preview.cpp | 6 ++++++ src/slic3r/GUI/ImGuiWrapper.cpp | 3 +++ src/slic3r/GUI/MainFrame.cpp | 8 ++++++++ src/slic3r/GUI/MainFrame.hpp | 8 +++++++- src/slic3r/GUI/Plater.cpp | 6 ++++++ 8 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 1cb212f243..f97bd46e66 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1483,6 +1483,9 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar GLCanvas3D::~GLCanvas3D() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3D::~GLCanvas3D()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ reset_volumes(); } @@ -2732,6 +2735,10 @@ void GLCanvas3D::bind_event_handlers() void GLCanvas3D::unbind_event_handlers() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3D::unbind_event_handlers()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + if (m_canvas != nullptr) { m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this); @@ -3315,6 +3322,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3D::on_mouse()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + #if ENABLE_RETINA_GL const float scale = m_retina_helper->get_scale_factor(); evt.SetX(evt.GetX() * scale); diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index d4522bb076..631a27e313 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -230,6 +230,9 @@ GLCanvas3DManager::GLCanvas3DManager() GLCanvas3DManager::~GLCanvas3DManager() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GLCanvas3DManager::~GLCanvas3DManager()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 24d9123ba3..362ad21a1e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -159,6 +159,9 @@ GUI_App::GUI_App() GUI_App::~GUI_App() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "GUI_App::~GUI_App()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if (app_config != nullptr) delete app_config; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 4a2550596a..f4d8adc702 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -45,6 +45,9 @@ View3D::View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_too View3D::~View3D() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "View3D::~View3D()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) { @@ -368,6 +371,9 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view Preview::~Preview() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Preview::~Preview()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ unbind_event_handlers(); #if ENABLE_NON_STATIC_CANVAS_MANAGER diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 3efa800a92..1abc191c37 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -46,6 +46,9 @@ ImGuiWrapper::ImGuiWrapper() ImGuiWrapper::~ImGuiWrapper() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "ImGuiWrapper::~ImGuiWrapper()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ destroy_font(); ImGui::DestroyContext(); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 1b18ef0ae2..f06d03ed52 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -109,6 +109,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S return; } +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "started wxEVT_CLOSE_WINDOW handler\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + if(m_plater) m_plater->stop_jobs(); // Weird things happen as the Paint messages are floating around the windows being destructed. @@ -134,6 +138,10 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S // propagate event event.Skip(); + +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "completed wxEVT_CLOSE_WINDOW handler\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ }); Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index a6d0749ab6..c8a65110e7 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -96,7 +96,13 @@ protected: public: MainFrame(); - ~MainFrame() = default; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + ~MainFrame() + { + std::cout << "MainFrame::~MainFrame()\n"; + } +// ~MainFrame() = default; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Plater* plater() { return m_plater; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 87f0e1b9c6..03b3061d54 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2173,6 +2173,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) Plater::priv::~priv() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Plater::priv::~priv()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ mouse3d_controller.shutdown(); if (config != nullptr) @@ -4560,6 +4563,9 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) Plater::~Plater() { +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + std::cout << "Plater::~Plater()\n"; +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } Sidebar& Plater::sidebar() { return *p->sidebar; } From dcf3565426e350f214f9509456c4c109b8617420 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 4 Mar 2020 15:19:48 +0100 Subject: [PATCH 11/15] Attempt to fix crash on MAC when closing using Command+Q --- src/slic3r/GUI/GUI_Preview.cpp | 8 ++++++-- src/slic3r/GUI/MainFrame.cpp | 9 +++++++++ src/slic3r/GUI/Plater.cpp | 27 +++++++++++++++++++++++++++ src/slic3r/GUI/Plater.hpp | 5 +++++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index f4d8adc702..7fea1f2689 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -51,7 +51,9 @@ View3D::~View3D() #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) { - m_canvas->unbind_event_handlers(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +// m_canvas->unbind_event_handlers(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_canvas; } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER @@ -379,7 +381,9 @@ Preview::~Preview() #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) { - m_canvas->unbind_event_handlers(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +// m_canvas->unbind_event_handlers(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_canvas; } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index f06d03ed52..d72c201a79 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -115,6 +115,15 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S if(m_plater) m_plater->stop_jobs(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_NON_STATIC_CANVAS_MANAGER + // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC, + // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed, + // causing a crash + if (m_plater) m_plater->unbind_canvas_event_handlers(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + // Weird things happen as the Paint messages are floating around the windows being destructed. // Avoid the Paint messages by hiding the main window. // Also the application closes much faster without these unnecessary screen refreshes. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 03b3061d54..e4cee4e2f9 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1814,6 +1814,11 @@ struct Plater::priv void set_current_canvas_as_dirty(); GLCanvas3D* get_current_canvas3D(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_NON_STATIC_CANVAS_MANAGER + void unbind_canvas_event_handlers(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool init_view_toolbar(); @@ -4089,6 +4094,19 @@ GLCanvas3D* Plater::priv::get_current_canvas3D() return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr); } +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_NON_STATIC_CANVAS_MANAGER +void Plater::priv::unbind_canvas_event_handlers() +{ + if (view3D != nullptr) + view3D->get_canvas3d()->unbind_event_handlers(); + + if (preview != nullptr) + preview->get_canvas3d()->unbind_event_handlers(); +} +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + bool Plater::priv::init_view_toolbar() { if (view_toolbar.get_items_count() > 0) @@ -5527,6 +5545,15 @@ void Plater::set_current_canvas_as_dirty() p->set_current_canvas_as_dirty(); } +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_NON_STATIC_CANVAS_MANAGER +void Plater::unbind_canvas_event_handlers() +{ + p->unbind_canvas_event_handlers(); +} +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + PrinterTechnology Plater::printer_technology() const { return p->printer_technology; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 1ad79978a2..872bb01717 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -253,6 +253,11 @@ public: BoundingBoxf bed_shape_bb() const; void set_current_canvas_as_dirty(); +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ +#if ENABLE_NON_STATIC_CANVAS_MANAGER + void unbind_canvas_event_handlers(); +#endif // ENABLE_NON_STATIC_CANVAS_MANAGER +//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PrinterTechnology printer_technology() const; void set_printer_technology(PrinterTechnology printer_technology); From dc3df3aec7586d485131b4ab04ebcb5863ca2329 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 5 Mar 2020 10:14:12 +0100 Subject: [PATCH 12/15] Removed temporary debug output and clean up --- src/slic3r/GUI/GLCanvas3D.cpp | 11 ----------- src/slic3r/GUI/GLCanvas3DManager.cpp | 3 --- src/slic3r/GUI/GUI_App.cpp | 3 --- src/slic3r/GUI/GUI_Preview.cpp | 16 ---------------- src/slic3r/GUI/ImGuiWrapper.cpp | 3 --- src/slic3r/GUI/MainFrame.cpp | 10 ---------- src/slic3r/GUI/MainFrame.hpp | 8 +------- src/slic3r/GUI/Plater.cpp | 12 ------------ src/slic3r/GUI/Plater.hpp | 2 -- 9 files changed, 1 insertion(+), 67 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index f97bd46e66..1cb212f243 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1483,9 +1483,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar GLCanvas3D::~GLCanvas3D() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3D::~GLCanvas3D()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ reset_volumes(); } @@ -2735,10 +2732,6 @@ void GLCanvas3D::bind_event_handlers() void GLCanvas3D::unbind_event_handlers() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3D::unbind_event_handlers()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - if (m_canvas != nullptr) { m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this); @@ -3322,10 +3315,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3D::on_mouse()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - #if ENABLE_RETINA_GL const float scale = m_retina_helper->get_scale_factor(); evt.SetX(evt.GetX() * scale); diff --git a/src/slic3r/GUI/GLCanvas3DManager.cpp b/src/slic3r/GUI/GLCanvas3DManager.cpp index 631a27e313..d4522bb076 100644 --- a/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -230,9 +230,6 @@ GLCanvas3DManager::GLCanvas3DManager() GLCanvas3DManager::~GLCanvas3DManager() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GLCanvas3DManager::~GLCanvas3DManager()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER #if ENABLE_HACK_CLOSING_ON_OSX_10_9_5 #ifdef __APPLE__ diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 362ad21a1e..24d9123ba3 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -159,9 +159,6 @@ GUI_App::GUI_App() GUI_App::~GUI_App() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "GUI_App::~GUI_App()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if (app_config != nullptr) delete app_config; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 7fea1f2689..704d1ea955 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -45,17 +45,9 @@ View3D::View3D(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view_too View3D::~View3D() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "View3D::~View3D()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) - { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -// m_canvas->unbind_event_handlers(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_canvas; - } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas_widget != nullptr) @@ -373,19 +365,11 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view Preview::~Preview() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Preview::~Preview()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ unbind_event_handlers(); #if ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas != nullptr) - { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -// m_canvas->unbind_event_handlers(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ delete m_canvas; - } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER if (m_canvas_widget != nullptr) diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 1abc191c37..3efa800a92 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -46,9 +46,6 @@ ImGuiWrapper::ImGuiWrapper() ImGuiWrapper::~ImGuiWrapper() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "ImGuiWrapper::~ImGuiWrapper()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ destroy_font(); ImGui::DestroyContext(); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index d72c201a79..dd9665205f 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -109,20 +109,14 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S return; } -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "started wxEVT_CLOSE_WINDOW handler\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - if(m_plater) m_plater->stop_jobs(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER // Unbinding of wxWidgets event handling in canvases needs to be done here because on MAC, // when closing the application using Command+Q, a mouse event is triggered after this lambda is completed, // causing a crash if (m_plater) m_plater->unbind_canvas_event_handlers(); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // Weird things happen as the Paint messages are floating around the windows being destructed. // Avoid the Paint messages by hiding the main window. @@ -147,10 +141,6 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S // propagate event event.Skip(); - -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "completed wxEVT_CLOSE_WINDOW handler\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ }); Bind(wxEVT_ACTIVATE, [this](wxActivateEvent& event) { diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index c8a65110e7..a6d0749ab6 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -96,13 +96,7 @@ protected: public: MainFrame(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - ~MainFrame() - { - std::cout << "MainFrame::~MainFrame()\n"; - } -// ~MainFrame() = default; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + ~MainFrame() = default; Plater* plater() { return m_plater; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e4cee4e2f9..e6cfdb1670 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1814,11 +1814,9 @@ struct Plater::priv void set_current_canvas_as_dirty(); GLCanvas3D* get_current_canvas3D(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER void unbind_canvas_event_handlers(); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool init_view_toolbar(); @@ -2178,9 +2176,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) Plater::priv::~priv() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Plater::priv::~priv()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ mouse3d_controller.shutdown(); if (config != nullptr) @@ -4094,7 +4089,6 @@ GLCanvas3D* Plater::priv::get_current_canvas3D() return (current_panel == view3D) ? view3D->get_canvas3d() : ((current_panel == preview) ? preview->get_canvas3d() : nullptr); } -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER void Plater::priv::unbind_canvas_event_handlers() { @@ -4105,7 +4099,6 @@ void Plater::priv::unbind_canvas_event_handlers() preview->get_canvas3d()->unbind_event_handlers(); } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ bool Plater::priv::init_view_toolbar() { @@ -4581,9 +4574,6 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) Plater::~Plater() { -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - std::cout << "Plater::~Plater()\n"; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ } Sidebar& Plater::sidebar() { return *p->sidebar; } @@ -5545,14 +5535,12 @@ void Plater::set_current_canvas_as_dirty() p->set_current_canvas_as_dirty(); } -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER void Plater::unbind_canvas_event_handlers() { p->unbind_canvas_event_handlers(); } #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PrinterTechnology Plater::printer_technology() const { diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 872bb01717..c932c94c7b 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -253,11 +253,9 @@ public: BoundingBoxf bed_shape_bb() const; void set_current_canvas_as_dirty(); -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER void unbind_canvas_event_handlers(); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PrinterTechnology printer_technology() const; void set_printer_technology(PrinterTechnology printer_technology); From ed0f3b340650a7ecfadee198e0f97ac152b47c12 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Wed, 25 Mar 2020 13:55:17 +0100 Subject: [PATCH 13/15] Small refactoring --- src/slic3r/GUI/3DBed.cpp | 3 --- src/slic3r/GUI/GUI_Preview.cpp | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 5ac3899c1d..23acd18ef7 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -10,9 +10,6 @@ #include "PresetBundle.hpp" #include "Gizmos/GLGizmoBase.hpp" #include "GLCanvas3D.hpp" -#if ENABLE_NON_STATIC_CANVAS_MANAGER -#include "GLCanvas3DManager.hpp" -#endif // ENABLE_NON_STATIC_CANVAS_MANAGER #include diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 704d1ea955..d94cba9745 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -56,7 +56,9 @@ View3D::~View3D() _3DScene::remove_canvas(m_canvas_widget); #endif // !ENABLE_NON_STATIC_CANVAS_MANAGER delete m_canvas_widget; +#if !ENABLE_NON_STATIC_CANVAS_MANAGER m_canvas = nullptr; +#endif // !ENABLE_NON_STATIC_CANVAS_MANAGER } } From bfbcd45209cdcaa0e340780294dfe28efbbf0e96 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Wed, 25 Mar 2020 15:15:20 +0100 Subject: [PATCH 14/15] Fixed build on Mac --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- src/slic3r/GUI/GLToolbar.cpp | 4 ---- src/slic3r/GUI/Plater.hpp | 2 -- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index c54f2cf9a9..ad8579e02c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4229,7 +4229,7 @@ void GLCanvas3D::update_ui_from_settings() BOOST_LOG_TRIVIAL(debug) << "GLCanvas3D: Scaling factor: " << new_scaling; #if ENABLE_NON_STATIC_CANVAS_MANAGER - camera.set_zoom(camera.get_zoom() * new_scaling / orig_scaling); + wxGetApp().plater()->get_camera().set_zoom(camera.get_zoom() * new_scaling / orig_scaling); #else m_camera.set_zoom(m_camera.get_zoom() * new_scaling / orig_scaling); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 15fd6f0e3f..4219fe4822 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -12,10 +12,6 @@ #include "../../slic3r/GUI/Camera.hpp" #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -//#include -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ - #include #include #include diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index d242de8b97..4462d4237c 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -42,12 +42,10 @@ class ObjectList; class GLCanvas3D; class Mouse3DController; struct Camera; -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #if ENABLE_NON_STATIC_CANVAS_MANAGER class Bed3D; class GLToolbar; #endif // ENABLE_NON_STATIC_CANVAS_MANAGER -//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ using t_optgroups = std::vector >; From dd34aef643a9cdd14a4db0ce77f0c3813e25c62c Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Wed, 25 Mar 2020 15:30:25 +0100 Subject: [PATCH 15/15] Follow-up of bfbcd45209cdcaa0e340780294dfe28efbbf0e96 -> completed fix --- src/slic3r/GUI/GLCanvas3D.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index ad8579e02c..cfd5e1e11d 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4229,7 +4229,8 @@ void GLCanvas3D::update_ui_from_settings() BOOST_LOG_TRIVIAL(debug) << "GLCanvas3D: Scaling factor: " << new_scaling; #if ENABLE_NON_STATIC_CANVAS_MANAGER - wxGetApp().plater()->get_camera().set_zoom(camera.get_zoom() * new_scaling / orig_scaling); + Camera& camera = wxGetApp().plater()->get_camera(); + camera.set_zoom(camera.get_zoom() * new_scaling / orig_scaling); #else m_camera.set_zoom(m_camera.get_zoom() * new_scaling / orig_scaling); #endif // ENABLE_NON_STATIC_CANVAS_MANAGER