summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2015-12-11 18:18:50 +0000
committerMichael Meeks <michael.meeks@collabora.com>2015-12-11 22:41:06 +0000
commit0f1ce0e8d4fa3f75fc3be70b2cdbe7a44ea87381 (patch)
tree7b0b4d62abd51cfc03ab9e3ce75bce1b3e0da77d
parentbd3b666b12e840d7f7381c273fb8afc846cd4876 (diff)
vcl: use a custom tag for VCL OpenGLContext's to avoid re-use. feature/5-1-pick
Other code is out of legacy mode now, so can't legacy as a proxy for VCL usage. Change-Id: Ie3807a3af680b707f2f08d058db955bc9cae6c2b Reviewed-on: https://gerrit.libreoffice.org/20649 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
-rw-r--r--include/vcl/opengl/OpenGLContext.hxx5
-rw-r--r--vcl/inc/openglgdiimpl.hxx5
-rw-r--r--vcl/opengl/gdiimpl.cxx7
-rw-r--r--vcl/opengl/win/gdiimpl.cxx1
-rw-r--r--vcl/opengl/x11/gdiimpl.cxx1
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx1
6 files changed, 9 insertions, 11 deletions
diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
index fb09bd586b85..a6d753f0a391 100644
--- a/include/vcl/opengl/OpenGLContext.hxx
+++ b/include/vcl/opengl/OpenGLContext.hxx
@@ -204,6 +204,10 @@ public:
return mbRequestLegacyContext;
}
+ /// VCL promiscuously re-uses its own contexts:
+ void setVCLOnly() { mbVCLOnly = true; }
+ bool isVCLOnly() { return mbVCLOnly; }
+
bool supportMultiSampling() const;
static SystemWindowData generateWinData(vcl::Window* pParent, bool bRequestLegacyContext);
@@ -229,6 +233,7 @@ private:
int mnRefCount;
bool mbRequestLegacyContext;
bool mbUseDoubleBufferedRendering;
+ bool mbVCLOnly;
int mnFramebufferCount;
OpenGLFramebuffer* mpCurrentFramebuffer;
diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx
index a1c2a2539352..3e5ec94769ed 100644
--- a/vcl/inc/openglgdiimpl.hxx
+++ b/vcl/inc/openglgdiimpl.hxx
@@ -72,9 +72,6 @@ protected:
OpenGLFramebuffer* mpFramebuffer;
OpenGLProgram* mpProgram;
- /// Is it someone else's context we shouldn't be fiddling with ?
- static bool IsForeignContext(const rtl::Reference<OpenGLContext> &xContext);
-
/// This idle handler is used to swap buffers after rendering.
OpenGLFlushIdle *mpFlush;
@@ -174,7 +171,7 @@ protected:
bool UseContext( const rtl::Reference<OpenGLContext> &pContext )
{
return pContext->isInitialized() && // not released by the OS etc.
- IsForeignContext( pContext ); // a genuine VCL context.
+ pContext->isVCLOnly();
}
public:
diff --git a/vcl/opengl/gdiimpl.cxx b/vcl/opengl/gdiimpl.cxx
index 380417d1aa70..f1068721a887 100644
--- a/vcl/opengl/gdiimpl.cxx
+++ b/vcl/opengl/gdiimpl.cxx
@@ -2092,11 +2092,4 @@ void OpenGLSalGraphicsImpl::doFlush()
VCL_GL_INFO( "flushAndSwap - end." );
}
-bool OpenGLSalGraphicsImpl::IsForeignContext(const rtl::Reference<OpenGLContext> &xContext)
-{
- // so far a blunt heuristic: vcl uses shiny new contexts.
- return xContext->requestedLegacy();
-}
-
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/opengl/win/gdiimpl.cxx b/vcl/opengl/win/gdiimpl.cxx
index 666cdbfa393e..9ca266a6604a 100644
--- a/vcl/opengl/win/gdiimpl.cxx
+++ b/vcl/opengl/win/gdiimpl.cxx
@@ -29,6 +29,7 @@ void WinOpenGLSalGraphicsImpl::copyBits( const SalTwoRect& rPosAry, SalGraphics*
rtl::Reference<OpenGLContext> WinOpenGLSalGraphicsImpl::CreateWinContext()
{
rtl::Reference<OpenGLContext> pContext = OpenGLContext::Create();
+ pContext->setVCLOnly();
pContext->init( mrParent.mhLocalDC, mrParent.mhWnd );
return pContext;
}
diff --git a/vcl/opengl/x11/gdiimpl.cxx b/vcl/opengl/x11/gdiimpl.cxx
index 595ca45ca4b0..effc81b3c815 100644
--- a/vcl/opengl/x11/gdiimpl.cxx
+++ b/vcl/opengl/x11/gdiimpl.cxx
@@ -53,6 +53,7 @@ rtl::Reference<OpenGLContext> X11OpenGLSalGraphicsImpl::CreateWinContext()
Window aWin = pProvider->GetX11Window();
rtl::Reference<OpenGLContext> pContext = OpenGLContext::Create();
+ pContext->setVCLOnly();
pContext->init( mrParent.GetXDisplay(), aWin,
mrParent.m_nXScreen.getXScreen() );
return pContext;
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index ed1347d4b801..771b548f1eb8 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -62,6 +62,7 @@ OpenGLContext::OpenGLContext():
mnRefCount(0),
mbRequestLegacyContext(false),
mbUseDoubleBufferedRendering(true),
+ mbVCLOnly(false),
mnFramebufferCount(0),
mpCurrentFramebuffer(nullptr),
mpFirstFramebuffer(nullptr),