avmedia/source/opengl/oglplayer.cxx | 1 + canvas/source/opengl/ogl_spritedevicehelper.cxx | 2 +- include/vcl/opengl/OpenGLContext.hxx | 1 + vcl/source/opengl/OpenGLContext.cxx | 9 +++++++++ vcl/source/window/openglwin.cxx | 10 ++++++++-- 5 files changed, 20 insertions(+), 3 deletions(-)
New commits: commit 56ece7860dc16b244cb7d409ff4ffcb2dd88f76a Author: Michael Meeks <michael.me...@collabora.com> Date: Tue Sep 8 15:57:55 2015 +0100 tdf#94006 - need an explicit dispose for GLContext's SystemChildWindow. Previously we would get an explicit ~OpenGLContext - and potentially leave FMR's around for other OGC users, now we treat the other users properly - we need an explicit dispose() to get Window::dispose ordering right. Reviewed-on: https://gerrit.libreoffice.org/18412 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Conflicts: vcl/source/window/openglwin.cxx Change-Id: I5edcbd73399b6db3dbcfb391570f364f9ab0c70d Reviewed-on: https://gerrit.libreoffice.org/18414 Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx index 7d04807..7ddaa50 100644 --- a/avmedia/source/opengl/oglplayer.cxx +++ b/avmedia/source/opengl/oglplayer.cxx @@ -41,6 +41,7 @@ OGLPlayer::~OGLPlayer() { m_xContext->makeCurrent(); gltf_renderer_release(m_pHandle); + m_xContext->dispose(); } releaseInputFiles(); } diff --git a/canvas/source/opengl/ogl_spritedevicehelper.cxx b/canvas/source/opengl/ogl_spritedevicehelper.cxx index 091279c..e76b86e 100644 --- a/canvas/source/opengl/ogl_spritedevicehelper.cxx +++ b/canvas/source/opengl/ogl_spritedevicehelper.cxx @@ -92,7 +92,7 @@ namespace oglcanvas {} SpriteDeviceHelper::~SpriteDeviceHelper() - {} + { mxContext->dispose(); } void SpriteDeviceHelper::init( vcl::Window& rWindow, SpriteCanvas& rSpriteCanvas, diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index 5d1c4b4..a5a6905 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -175,6 +175,7 @@ public: ~OpenGLContext(); void acquire() { mnRefCount++; } void release() { if ( --mnRefCount == 0 ) delete this; } + void dispose(); void requestLegacyContext(); void requestSingleBufferedRendering(); diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 5ca7704..e14e013 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -112,6 +112,13 @@ OpenGLContext::~OpenGLContext() assert (mnRefCount == 1); } +// release associated child-window if we have one +void OpenGLContext::dispose() +{ + reset(); + m_pChildWindow.disposeAndClear(); +} + rtl::Reference<OpenGLContext> OpenGLContext::Create() { return rtl::Reference<OpenGLContext>(new OpenGLContext); @@ -1279,6 +1286,7 @@ void OpenGLContext::reset() wglMakeCurrent(NULL, NULL); wglDeleteContext( m_aGLWin.hRC ); ReleaseDC( m_aGLWin.hWnd, m_aGLWin.hDC ); + m_aGLWin.hRC = 0; } #elif defined( MACOSX ) OpenGLWrapper::resetCurrent(); @@ -1300,6 +1308,7 @@ void OpenGLContext::reset() if (mbPixmap && m_aGLWin.glPix != None) glXDestroyPixmap(m_aGLWin.dpy, m_aGLWin.glPix); + m_aGLWin.ctx = 0; } #endif } diff --git a/vcl/source/window/openglwin.cxx b/vcl/source/window/openglwin.cxx index 37d1ea5..9af4c0f 100644 --- a/vcl/source/window/openglwin.cxx +++ b/vcl/source/window/openglwin.cxx @@ -15,8 +15,8 @@ class OpenGLWindowImpl { public: - OpenGLWindowImpl(vcl::Window* pWindow); - ~OpenGLWindowImpl() { mxChildWindow.disposeAndClear(); } + explicit OpenGLWindowImpl(vcl::Window* pWindow); + ~OpenGLWindowImpl(); OpenGLContext& getContext() { return *mxContext.get(); } private: rtl::Reference<OpenGLContext> mxContext; @@ -33,6 +33,12 @@ OpenGLWindowImpl::OpenGLWindowImpl(vcl::Window* pWindow) pWindow->SetMouseTransparent(false); } +OpenGLWindowImpl::~OpenGLWindowImpl() +{ + mxContext->dispose(); + mxChildWindow.disposeAndClear(); +} + OpenGLWindow::OpenGLWindow(vcl::Window* pParent): Window(pParent, 0), mxImpl(new OpenGLWindowImpl(this)), _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits