OSDN Git Service

st/wgl: fix issue with SwapBuffers of minimized windows
authorBrian Paul <brianp@vmware.com>
Wed, 17 Apr 2013 22:16:24 +0000 (16:16 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 17 Apr 2013 22:23:19 +0000 (16:23 -0600)
If a window's minimized we get a zero-size window.  Skip the SwapBuffers
in that case to avoid some warning messages with the VMware svga driver.
Internal bug #996695

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/state_trackers/wgl/stw_framebuffer.c
src/gallium/state_trackers/wgl/stw_framebuffer.h

index c22e0f1..18ecb05 100644 (file)
@@ -140,6 +140,8 @@ stw_framebuffer_get_size( struct stw_framebuffer *fb )
    width  = client_rect.right  - client_rect.left;
    height = client_rect.bottom - client_rect.top;
 
+   fb->minimized = width == 0 || height == 0;
+
    if (width <= 0 || height <= 0) {
       /*
        * When the window is minimized GetClientRect will return zeros.  Simply
@@ -530,15 +532,17 @@ DrvPresentBuffers(HDC hdc, PGLPRESENTBUFFERSDATA data)
       }
    }
 
-   if(fb->shared_surface) {
-      stw_dev->stw_winsys->compose(screen,
-                                   res,
-                                   fb->shared_surface,
-                                   &fb->client_rect,
-                                   data->PresentHistoryToken);
-   }
-   else {
-      stw_dev->stw_winsys->present( screen, res, hdc );
+   if (!fb->minimized) {
+      if (fb->shared_surface) {
+         stw_dev->stw_winsys->compose(screen,
+                                      res,
+                                      fb->shared_surface,
+                                      &fb->client_rect,
+                                      data->PresentHistoryToken);
+      }
+      else {
+         stw_dev->stw_winsys->present( screen, res, hdc );
+      }
    }
 
    stw_framebuffer_update(fb);
index 3ba51ba..cee28e8 100644 (file)
@@ -79,6 +79,8 @@ struct stw_framebuffer
    /* FIXME: Make this work for multiple contexts bound to the same framebuffer */
    boolean must_resize;
 
+   boolean minimized;  /**< Is the window currently minimized? */
+
    unsigned width;
    unsigned height;