[Libreoffice-commits] core.git: include/vcl vcl/inc vcl/opengl vcl/source

Markus Mohrhard markus.mohrhard at collabora.co.uk
Tue Dec 2 13:01:46 PST 2014


 include/vcl/opengl/OpenGLContext.hxx |    3 +++
 vcl/inc/openglgdiimpl.hxx            |    4 +---
 vcl/opengl/gdiimpl.cxx               |   21 ++++++++++++++-------
 vcl/source/opengl/OpenGLContext.cxx  |   12 ++++++++++++
 4 files changed, 30 insertions(+), 10 deletions(-)

New commits:
commit 8091457a237bad0fd95a8b4d2c93650ce7847169
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date:   Tue Dec 2 21:51:50 2014 +0100

    Revert "use boost::shared_ptr instead of manual ref counting"
    
    This reverts commit 8eeb02dcc1a4bc99b083b1a591b4a70003a1604f.
    
    Conflicts:
    	include/vcl/opengl/OpenGLContext.hxx
    	vcl/inc/openglgdiimpl.hxx
    	vcl/opengl/gdiimpl.cxx
    
    Change-Id: I85cc7a46876ffba5ab861f6dd83b07da466b212b

diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
index f7afe97..9c39ec2 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -211,6 +211,8 @@ public:
     bool               AcquireFramebuffer( OpenGLFramebuffer* pFramebuffer );
     OpenGLFramebuffer* AcquireFramebuffer( const OpenGLTexture& rTexture );
     void               ReleaseFramebuffer( OpenGLFramebuffer* pFramebuffer );
+    void AddRef();
+    void DeRef();
 
     // retrieve a program from the cache or compile/link it
     OpenGLProgram*      GetProgram( const OUString& rVertexShader, const OUString& rFragmentShader );
@@ -260,6 +262,7 @@ private:
     SystemChildWindow* m_pChildWindow;
     boost::scoped_ptr<SystemChildWindow> m_pChildWindowGC;
     bool mbInitialized;
+    int  mnRefCount;
     bool mbRequestLegacyContext;
     bool mbUseDoubleBufferedRendering;
     bool mbRequestVirtualDevice;
diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx
index 3f3ef4e..d328ab7 100644
--- a/vcl/inc/openglgdiimpl.hxx
+++ b/vcl/inc/openglgdiimpl.hxx
@@ -32,8 +32,6 @@
 #include <tools/poly.hxx>
 #include <vcl/opengl/OpenGLContext.hxx>
 
-#include <boost/shared_ptr.hpp>
-
 class SalFrame;
 class SalVirtualDevice;
 
@@ -41,7 +39,7 @@ class VCL_PLUGIN_PUBLIC OpenGLSalGraphicsImpl : public SalGraphicsImpl
 {
 protected:
 
-    boost::shared_ptr<OpenGLContext> mpContext;
+    OpenGLContext* mpContext;
     /// Pointer to the SalFrame or SalVirtualDevice
     SalGeometryProvider* mpParent;
     OpenGLFramebuffer* mpFramebuffer;
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 46d72dc6..970957c 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -51,20 +51,23 @@ OpenGLSalGraphicsImpl::OpenGLSalGraphicsImpl(SalGeometryProvider* pParent)
 
 OpenGLSalGraphicsImpl::~OpenGLSalGraphicsImpl()
 {
+    ReleaseContext();
 }
 
 OpenGLContext* OpenGLSalGraphicsImpl::GetOpenGLContext()
 {
     if( !mpContext )
         AcquireContext();
-    return mpContext.get();
+    return mpContext;
 }
 
 bool OpenGLSalGraphicsImpl::AcquireContext( )
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    mpContext.reset();
+    if( mpContext )
+        mpContext->DeRef();
+
 
     OpenGLContext* pContext = pSVData->maGDIData.mpLastContext;
     while( pContext )
@@ -75,16 +78,20 @@ bool OpenGLSalGraphicsImpl::AcquireContext( )
         pContext = pContext->mpPrevContext;
     }
 
-    if (!pContext)
+    if( pContext )
+        pContext->AddRef();
+    else
         pContext = mbOffscreen ? CreatePixmapContext() : CreateWinContext();
 
-    mpContext.reset(pContext);
-    return (mpContext != nullptr);
+    mpContext = pContext;
+    return (mpContext != NULL);
 }
 
 bool OpenGLSalGraphicsImpl::ReleaseContext()
 {
-    mpContext.reset();
+    if( mpContext )
+        mpContext->DeRef();
+    mpContext = NULL;
     return true;
 }
 
@@ -95,7 +102,7 @@ void OpenGLSalGraphicsImpl::Init()
     // check if we can simply re-use the same context
     if( mpContext )
     {
-        if( !UseContext( mpContext.get() ) )
+        if( !UseContext( mpContext ) )
             ReleaseContext();
     }
 
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index 41eae3b..1de58cf 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -53,6 +53,7 @@ OpenGLContext::OpenGLContext():
     mpWindow(NULL),
     m_pChildWindow(NULL),
     mbInitialized(false),
+    mnRefCount(1),
     mbRequestLegacyContext(false),
     mbUseDoubleBufferedRendering(true),
     mbRequestVirtualDevice(false),
@@ -121,6 +122,17 @@ OpenGLContext::~OpenGLContext()
 #endif
 }
 
+void OpenGLContext::AddRef()
+{
+    mnRefCount++;
+}
+
+void OpenGLContext::DeRef()
+{
+    if( --mnRefCount == 0 )
+        delete this;
+}
+
 void OpenGLContext::requestLegacyContext()
 {
     mbRequestLegacyContext = true;


More information about the Libreoffice-commits mailing list