changeset 27984:21221fd6d994

Make sure the backbuffer is cleared when the border size might have changed. Patch by Georgi Petrov [gogothebee gmail com]
author reimar
date Mon, 24 Nov 2008 09:44:33 +0000
parents 9d1894ccd09f
children 1c77b86d355d
files libvo/vo_direct3d.c
diffstat 1 files changed, 14 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libvo/vo_direct3d.c	Mon Nov 24 08:43:13 2008 +0000
+++ b/libvo/vo_direct3d.c	Mon Nov 24 09:44:33 2008 +0000
@@ -52,6 +52,8 @@
 static struct global_priv {
     int is_paused;              /**< 1 = Movie is paused,
                                 0 = Movie is not paused */
+    int is_clear_needed;        /**< 1 = Clear the backbuffer before StretchRect
+                                0 = (default) Don't clear it */
     D3DLOCKED_RECT locked_rect; /**< The locked Offscreen surface */
     RECT fs_movie_rect;         /**< Rect (upscaled) of the movie when displayed
                                 in fullscreen */
@@ -153,6 +155,12 @@
     "<vo_direct3d>Fullscreen Movie Rect: t: %ld, l: %ld, r: %ld, b:%ld\r\n",
         priv->fs_movie_rect.top, priv->fs_movie_rect.left,
         priv->fs_movie_rect.right, priv->fs_movie_rect.bottom);
+
+    /* The backbuffer should be cleared before next StretchRect. This is
+     * necessary because our new draw area could be smaller than the
+     * previous one used by StretchRect and without it, leftovers from the
+     * previous frame will be left. */
+    priv->is_clear_needed = 1;
 }
 
 /** @brief Destroy D3D Context related to the current window.
@@ -325,6 +333,12 @@
         return VO_ERROR;
     }
 
+    if (priv->is_clear_needed) {
+        IDirect3DDevice9_Clear (priv->d3d_device, 0, NULL,
+                                D3DCLEAR_TARGET, 0, 0, 0);
+        priv->is_clear_needed = 0;
+    }
+
     if (FAILED(IDirect3DDevice9_StretchRect(priv->d3d_device,
                                             priv->d3d_surface,
                                             &priv->fs_panscan_rect,
@@ -554,7 +568,6 @@
             mp_msg(MSGT_VO,MSGL_V,"<vo_direct3d>Video adapter reinitialized.\n");
 
     }
-    /*IDirect3DDevice9_Clear (priv->d3d_device, 0, NULL, D3DCLEAR_TARGET, 0, 0, 0);*/
 }
 
 /** @brief libvo Callback: Draw OSD/Subtitles,