Final version of fix to prevent showing old framebuffer when switching between views on Mac

This commit is contained in:
Enrico Turri 2019-03-08 08:29:54 +01:00
parent 81820fa77f
commit 513256649e
2 changed files with 7 additions and 18 deletions

View file

@ -4118,10 +4118,8 @@ void GLCanvas3D::render()
if (m_canvas == nullptr) if (m_canvas == nullptr)
return; return;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ if (!_is_shown_on_screen())
// if (!_is_shown_on_screen()) return;
// return;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// ensures this canvas is current and initialized // ensures this canvas is current and initialized
if (!_set_current() || !_3DScene::init(m_canvas)) if (!_set_current() || !_3DScene::init(m_canvas))

View file

@ -2222,9 +2222,9 @@ void Plater::priv::set_current_panel(wxPanel* panel)
if (std::find(panels.begin(), panels.end(), panel) == panels.end()) if (std::find(panels.begin(), panels.end(), panel) == panels.end())
return; return;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #ifdef __WXMAC__
bool force_render = (current_panel != nullptr); bool force_render = (current_panel != nullptr);
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #endif // __WXMAC__
if (current_panel == panel) if (current_panel == panel)
return; return;
@ -2234,8 +2234,9 @@ void Plater::priv::set_current_panel(wxPanel* panel)
for (wxPanel* p : panels) for (wxPanel* p : panels)
{ {
if (p == current_panel) if (p == current_panel)
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
{ {
#ifdef __WXMAC__
// On Mac we need also to force a render to avoid flickering when changing view
if (force_render) if (force_render)
{ {
if (p == view3D) if (p == view3D)
@ -2243,11 +2244,9 @@ void Plater::priv::set_current_panel(wxPanel* panel)
else if (p == preview) else if (p == preview)
dynamic_cast<Preview*>(p)->get_canvas3d()->render(); dynamic_cast<Preview*>(p)->get_canvas3d()->render();
} }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #endif // __WXMAC__
p->Show(); p->Show();
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
} }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
} }
// then set to invisible the other // then set to invisible the other
for (wxPanel* p : panels) for (wxPanel* p : panels)
@ -2256,16 +2255,8 @@ void Plater::priv::set_current_panel(wxPanel* panel)
p->Hide(); p->Hide();
} }
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// current_panel->Freeze();
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
panel_sizer->Layout(); panel_sizer->Layout();
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// current_panel->Thaw();
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (current_panel == view3D) if (current_panel == view3D)
{ {
if (view3D->is_reload_delayed()) if (view3D->is_reload_delayed())