From 98a2ec67a6ff730a9e64e4e5e444f214d7c2feb7 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 20 Jun 2011 09:22:05 +0000 Subject: [PATCH] Merged from svn/trunk. Added sleep before window resizing to make it less likely that the previous frames rendering traversal is still running when the window(s) is resized, something that creates what looks like a glitch in rendering. --- src/osgViewer/ViewerEventHandlers.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/osgViewer/ViewerEventHandlers.cpp b/src/osgViewer/ViewerEventHandlers.cpp index 715bd5988..88054618a 100644 --- a/src/osgViewer/ViewerEventHandlers.cpp +++ b/src/osgViewer/ViewerEventHandlers.cpp @@ -93,8 +93,12 @@ bool WindowSizeHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActio { if (_toggleFullscreen == true && ea.getKey() == _keyEventToggleFullscreen) { - osgViewer::Viewer::Windows windows; + // sleep to allow any viewer rendering threads to complete before we + // resize the window + OpenThreads::Thread::microSleep(100000); + + osgViewer::Viewer::Windows windows; viewer->getWindows(windows); for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr != windows.end(); @@ -108,9 +112,12 @@ bool WindowSizeHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActio } else if (_changeWindowedResolution == true && ea.getKey() == _keyEventWindowedResolutionUp) { + // sleep to allow any viewer rendering threads to complete before we + // resize the window + OpenThreads::Thread::microSleep(100000); + // Increase resolution osgViewer::Viewer::Windows windows; - viewer->getWindows(windows); for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr != windows.end(); @@ -124,9 +131,12 @@ bool WindowSizeHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActio } else if (_changeWindowedResolution == true && ea.getKey() == _keyEventWindowedResolutionDown) { + // sleep to allow any viewer rendering threads to complete before we + // resize the window + OpenThreads::Thread::microSleep(100000); + // Decrease resolution osgViewer::Viewer::Windows windows; - viewer->getWindows(windows); for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr != windows.end();