From 8db4fdc24c2fa17f359065038f738e032db23d92 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Wed, 27 Jun 2018 12:36:49 +0200 Subject: [PATCH] 3rd attempt to fix opengl on ubuntu --- lib/Slic3r/GUI/Plater.pm | 20 ++++++++++----- xs/src/slic3r/GUI/3DScene.cpp | 10 ++++---- xs/src/slic3r/GUI/3DScene.hpp | 4 +-- xs/src/slic3r/GUI/GLCanvas3D.cpp | 34 ++++++++++++++++--------- xs/src/slic3r/GUI/GLCanvas3D.hpp | 12 ++++++--- xs/src/slic3r/GUI/GLCanvas3DManager.cpp | 14 +++++----- xs/src/slic3r/GUI/GLCanvas3DManager.hpp | 2 +- xs/xsp/GUI_3DScene.xsp | 7 ----- 8 files changed, 58 insertions(+), 45 deletions(-) diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index 1e32fd8d3..47a060e47 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -186,7 +186,9 @@ sub new { # Initialize 3D toolpaths preview if ($Slic3r::GUI::have_OpenGL) { $self->{preview3D} = Slic3r::GUI::Plater::3DPreview->new($self->{preview_notebook}, $self->{print}, $self->{gcode_preview_data}, $self->{config}); - Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); +#================================================================================================================== +# Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); +#================================================================================================================== Slic3r::GUI::_3DScene::enable_legend_texture($self->{preview3D}->canvas, 1); Slic3r::GUI::_3DScene::register_on_viewport_changed_callback($self->{preview3D}->canvas, sub { Slic3r::GUI::_3DScene::set_viewport_from_scene($self->{canvas3D}, $self->{preview3D}->canvas); }); $self->{preview_notebook}->AddPage($self->{preview3D}, L('Preview')); @@ -202,21 +204,25 @@ sub new { EVT_NOTEBOOK_PAGE_CHANGED($self, $self->{preview_notebook}, sub { my $preview = $self->{preview_notebook}->GetCurrentPage; if (($preview != $self->{preview3D}) && ($preview != $self->{canvas3D})) { - Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); - Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 0); #================================================================================================================== +# Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); +# Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 0); # Slic3r::GUI::_3DScene::reset_current_canvas(); #================================================================================================================== $preview->OnActivate if $preview->can('OnActivate'); } elsif ($preview == $self->{preview3D}) { - Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 1); - Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 0); +#================================================================================================================== +# Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 1); +# Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 0); +#================================================================================================================== $self->{preview3D}->load_print; # sets the canvas as dirty to force a render at the 1st idle event (wxWidgets IsShownOnScreen() is buggy and cannot be used reliably) Slic3r::GUI::_3DScene::set_as_dirty($self->{preview3D}->canvas); } elsif ($preview == $self->{canvas3D}) { - Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 1); - Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); +#================================================================================================================== +# Slic3r::GUI::_3DScene::set_active($self->{canvas3D}, 1); +# Slic3r::GUI::_3DScene::set_active($self->{preview3D}->canvas, 0); +#================================================================================================================== if (Slic3r::GUI::_3DScene::is_reload_delayed($self->{canvas3D})) { my $selections = $self->collect_selections; Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections); diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index 556be56bc..ac2304c69 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -1764,13 +1764,13 @@ bool _3DScene::init(wxGLCanvas* canvas) //{ // s_canvas_mgr.set_current(nullptr, false); //} +// +//void _3DScene::set_active(wxGLCanvas* canvas, bool active) +//{ +// s_canvas_mgr.set_active(canvas, active); +//} //################################################################################################################# -void _3DScene::set_active(wxGLCanvas* canvas, bool active) -{ - s_canvas_mgr.set_active(canvas, active); -} - void _3DScene::set_as_dirty(wxGLCanvas* canvas) { s_canvas_mgr.set_as_dirty(canvas); diff --git a/xs/src/slic3r/GUI/3DScene.hpp b/xs/src/slic3r/GUI/3DScene.hpp index a375bd756..d34a79ee3 100644 --- a/xs/src/slic3r/GUI/3DScene.hpp +++ b/xs/src/slic3r/GUI/3DScene.hpp @@ -519,9 +519,9 @@ public: //################################################################################################################# // static bool set_current(wxGLCanvas* canvas, bool force); // static void reset_current_canvas(); +// +// static void set_active(wxGLCanvas* canvas, bool active); //################################################################################################################# - - static void set_active(wxGLCanvas* canvas, bool active); static void set_as_dirty(wxGLCanvas* canvas); static unsigned int get_volumes_count(wxGLCanvas* canvas); diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp index d44106337..e3a3b1572 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp @@ -1422,7 +1422,9 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas) , m_print(nullptr) , m_model(nullptr) , m_dirty(true) - , m_active(true) +//################################################################################################################# +// , m_active(true) +//################################################################################################################# , m_initialized(false) , m_use_VBOs(false) , m_force_zoom_to_bed_enabled(false) @@ -1552,10 +1554,8 @@ bool GLCanvas3D::set_current() { if ((m_canvas != nullptr) && (m_context != nullptr)) // if (m_active && (m_canvas != nullptr) && (m_context != nullptr)) - { -// std::cout << "set_current: " << (void*)m_canvas << " - " << (void*)m_context << std::endl; return m_canvas->SetCurrent(*m_context); - } + return false; } @@ -1568,10 +1568,12 @@ bool GLCanvas3D::set_current() //} //################################################################################################################# -void GLCanvas3D::set_active(bool active) -{ - m_active = active; -} +//################################################################################################################# +//void GLCanvas3D::set_active(bool active) +//{ +// m_active = active; +//} +//################################################################################################################# void GLCanvas3D::set_as_dirty() { @@ -2753,9 +2755,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } else if (evt.LeftDClick() && (m_hover_volume_id != -1)) { - m_active = false; +//################################################################################################################# +// m_active = false; +//################################################################################################################# m_on_double_click_callback.call(); - m_active = true; +//################################################################################################################# +// m_active = true; +//################################################################################################################# } else if (evt.LeftDown() || evt.RightDown()) { @@ -2853,9 +2859,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // if right clicking on volume, propagate event through callback if (m_volumes.volumes[volume_idx]->hover) { - m_active = false; +//################################################################################################################# +// m_active = false; +//################################################################################################################# m_on_right_click_callback.call(pos.x, pos.y); - m_active = true; +//################################################################################################################# +// m_active = true; +//################################################################################################################# } } } diff --git a/xs/src/slic3r/GUI/GLCanvas3D.hpp b/xs/src/slic3r/GUI/GLCanvas3D.hpp index 181f5d1ac..2ab7863aa 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.hpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.hpp @@ -401,9 +401,11 @@ private: Model* m_model; bool m_dirty; - // the active member has been introduced to overcome a bug in wxWidgets method IsShownOnScreen() which always return true - // when a window is inside a wxNotebook - bool m_active; +//################################################################################################################# +// // the active member has been introduced to overcome a bug in wxWidgets method IsShownOnScreen() which always return true +// // when a window is inside a wxNotebook +// bool m_active; +//################################################################################################################# bool m_initialized; bool m_use_VBOs; bool m_force_zoom_to_bed_enabled; @@ -457,7 +459,9 @@ public: // bool set_current(bool force); //################################################################################################################# - void set_active(bool active); +//################################################################################################################# +// void set_active(bool active); +//################################################################################################################# void set_as_dirty(); unsigned int get_volumes_count() const; diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp b/xs/src/slic3r/GUI/GLCanvas3DManager.cpp index 0021f13eb..660f1f41f 100644 --- a/xs/src/slic3r/GUI/GLCanvas3DManager.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3DManager.cpp @@ -251,15 +251,15 @@ bool GLCanvas3DManager::init(wxGLCanvas* canvas) // m_current = nullptr; // return false; //} +// +//void GLCanvas3DManager::set_active(wxGLCanvas* canvas, bool active) +//{ +// CanvasesMap::iterator it = _get_canvas(canvas); +// if (it != m_canvases.end()) +// it->second->set_active(active); +//} //################################################################################################################# -void GLCanvas3DManager::set_active(wxGLCanvas* canvas, bool active) -{ - CanvasesMap::iterator it = _get_canvas(canvas); - if (it != m_canvases.end()) - it->second->set_active(active); -} - void GLCanvas3DManager::set_as_dirty(wxGLCanvas* canvas) { CanvasesMap::iterator it = _get_canvas(canvas); diff --git a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp b/xs/src/slic3r/GUI/GLCanvas3DManager.hpp index 57e6f503d..c5b03a553 100644 --- a/xs/src/slic3r/GUI/GLCanvas3DManager.hpp +++ b/xs/src/slic3r/GUI/GLCanvas3DManager.hpp @@ -74,8 +74,8 @@ public: //################################################################################################################# // bool set_current(wxGLCanvas* canvas, bool force); +// void set_active(wxGLCanvas* canvas, bool active); //################################################################################################################# - void set_active(wxGLCanvas* canvas, bool active); void set_as_dirty(wxGLCanvas* canvas); unsigned int get_volumes_count(wxGLCanvas* canvas) const; diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index d46c06120..48bd30cd1 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -190,13 +190,6 @@ remove_all_canvases() CODE: _3DScene::remove_all_canvases(); -void -set_active(canvas, active) - SV *canvas; - bool active; - CODE: - _3DScene::set_active((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), active); - void set_as_dirty(canvas) SV *canvas;