From 07f01bd7344b261ccf304d2583276ca72e381378 Mon Sep 17 00:00:00 2001
From: Thomas Geymayer <tomgey@gmail.com>
Date: Sun, 10 Mar 2013 20:43:04 +0100
Subject: [PATCH] Ensure immediate canvas update inside GUI windows.

Ensure canvas displayed inside GUI windows are updated in the same
frame as the according window is made visible. This prevents
showing previous contents for the first frame.
---
 src/Canvas/window.cxx | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/src/Canvas/window.cxx b/src/Canvas/window.cxx
index d0d72f509..80ef5677e 100644
--- a/src/Canvas/window.cxx
+++ b/src/Canvas/window.cxx
@@ -79,6 +79,17 @@ namespace canvas
         _capture_events = node->getBoolValue();
       else
         handled = false;
+
+      // Ensure canvas is redrawn before the window is displayed after it has
+      // been hidden. We can't rely on the cull callback as it gets called too
+      // late (GUI camera is attached as POST_RENDER whereas canvas contents are
+      // rendered during PRE_RENDER).
+      if( node->getNameString() == "visible" && node->getBoolValue() )
+      {
+        simgear::canvas::CanvasPtr canvas = getCanvas().lock();
+        if( canvas )
+          canvas->enableRendering();
+      }
     }
 
     if( !handled )