summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2014-11-17 21:51:50 +0000
committerMichael Meeks <michael.meeks@collabora.com>2014-11-17 21:51:50 +0000
commita3945b695457cc697ce8264aea24d10e97663ab2 (patch)
tree28bc23d8704cd8fc3a184a38ea2e270829b822ce
parentea95f561a10ea48d63cf94e6ad35b647b083cfb9 (diff)
vcl: make OpenGLContext::makeCurrent unfeasibly faster.
Don't set the same context if it is already set. Apparently this is something that is unbelievably costly on Windows, and very costly on Linux. Instead check if the context is already set, and don't re-set it. Change-Id: If4fed3e555e1388031446be76d6fdfde5b9f13e5
-rw-r--r--vcl/source/opengl/OpenGLContext.cxx12
1 files changed, 10 insertions, 2 deletions
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx
index cf1925875268..b803fd6ba4f2 100644
--- a/vcl/source/opengl/OpenGLContext.cxx
+++ b/vcl/source/opengl/OpenGLContext.cxx
@@ -1092,7 +1092,11 @@ SystemWindowData OpenGLContext::generateWinData(vcl::Window* pParent, bool)
void OpenGLContext::makeCurrent()
{
#if defined( WNT )
- if (!wglMakeCurrent(m_aGLWin.hDC, m_aGLWin.hRC))
+ if (wglGetCurrentContext() == m_aGLWin.hRC)
+ {
+ SAL_INFO("vcl.opengl", "OpenGLContext::makeCurrent(): Avoid setting the same context");
+ }
+ else if (!wglMakeCurrent(m_aGLWin.hDC, m_aGLWin.hRC))
{
SAL_WARN("vcl.opengl", "OpenGLContext::makeCurrent(): wglMakeCurrent failed: " << GetLastError());
}
@@ -1102,7 +1106,11 @@ void OpenGLContext::makeCurrent()
#elif defined( IOS ) || defined( ANDROID )
// nothing
#elif defined( UNX )
- if (!glXMakeCurrent( m_aGLWin.dpy, mbPixmap ? m_aGLWin.glPix : m_aGLWin.win, m_aGLWin.ctx ))
+ if (glXGetCurrentContext() == m_aGLWin.ctx)
+ {
+ SAL_INFO("vcl.opengl", "OpenGLContext::makeCurrent(): Avoid setting the same context");
+ }
+ else if (!glXMakeCurrent( m_aGLWin.dpy, mbPixmap ? m_aGLWin.glPix : m_aGLWin.win, m_aGLWin.ctx ))
SAL_WARN("vcl.opengl", "OpenGLContext::makeCurrent failed");
#endif
}