diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2015-11-13 12:00:59 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2015-12-11 22:53:52 +0000 |
commit | e614a1e88b13a8069ea3cf32eb04be7d43bfb335 (patch) | |
tree | e8108b1aadf0a1c15b05614a7b24bf295f1fb666 /vcl/source | |
parent | 382eafb5f350111a430318f49594e6162ad49495 (diff) |
tdf#93529 - move to a Mac-like double-buffered OpenGL model.
This moves us to always rendering to an off-screen texture, and then
(at idle) blitting this to the screen & swapping buffers. Ideally we
should never see any rendering, or flicker again with this approach.
Several fixes are included:
+ avoid multiple OpenGL contexts being created for the same window,
created excessive flicker problems.
+ de-virtualize UseContext - which context we use is less critical.
+ kill 'mbOffscreen' distinction - all VCL rendering is offscreen.
+ implement 'doFlush' and high priority idle flushing.
+ bind stencil buffer for clipping vs. textures - fixing complex
clopping when rendering to virtual-devices, and off-screen.
+ document environment. variables.
+ use white as default background glClear color, but red or
random color for DBGUTIL.
Change-Id: I6be08595b6c8deb7e6db0dbd81308b2c97d2b4ff
Diffstat (limited to 'vcl/source')
-rw-r--r-- | vcl/source/opengl/OpenGLContext.cxx | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index fb50f90f89ad..ed1347d4b801 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -18,6 +18,8 @@ #include <vcl/bmpacc.hxx> #include <vcl/graph.hxx> +#include <osl/thread.hxx> + #if defined(MACOSX) #include <premac.h> #include "OpenGLWrapper.hxx" @@ -1486,6 +1488,14 @@ void OpenGLContext::swapBuffers() #elif defined( UNX ) glXSwapBuffers(m_aGLWin.dpy, m_aGLWin.win); #endif + + static bool bSleep = getenv("SAL_GL_SLEEP_ON_SWAP"); + if (bSleep) + { + // half a second. + TimeValue aSleep( 0, 500*1000*1000 ); + osl::Thread::wait( aSleep ); + } } void OpenGLContext::sync() |