Hopefully a workaround for crashes and hang ups at closing on Windows.

Release the OpenGL contexts not by a destructor of a static class,
but explicitely (predictively).
This commit is contained in:
bubnikv 2019-08-22 20:02:25 +02:00
parent c6604ff55d
commit 0de566e2a2
5 changed files with 22 additions and 6 deletions

View file

@ -2007,6 +2007,11 @@ bool _3DScene::init(wxGLCanvas* canvas)
return s_canvas_mgr.init(canvas);
}
void _3DScene::destroy()
{
s_canvas_mgr.destroy();
}
GUI::GLCanvas3D* _3DScene::get_canvas(wxGLCanvas* canvas)
{
return s_canvas_mgr.get_canvas(canvas);

View file

@ -647,6 +647,7 @@ public:
static void remove_all_canvases();
static bool init(wxGLCanvas* canvas);
static void destroy();
static GUI::GLCanvas3D* get_canvas(wxGLCanvas* canvas);

View file

@ -197,11 +197,7 @@ GLCanvas3DManager::GLCanvas3DManager()
GLCanvas3DManager::~GLCanvas3DManager()
{
if (m_context != nullptr)
{
delete m_context;
m_context = nullptr;
}
this->destroy();
}
bool GLCanvas3DManager::add(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar)
@ -282,6 +278,15 @@ bool GLCanvas3DManager::init(wxGLCanvas* canvas)
return false;
}
void GLCanvas3DManager::destroy()
{
if (m_context != nullptr)
{
delete m_context;
m_context = nullptr;
}
}
GLCanvas3D* GLCanvas3DManager::get_canvas(wxGLCanvas* canvas)
{
CanvasesMap::const_iterator it = do_get_canvas(canvas);

View file

@ -91,6 +91,7 @@ public:
void init_gl();
bool init(wxGLCanvas* canvas);
void destroy();
GLCanvas3D* get_canvas(wxGLCanvas* canvas);