[vlc-commits] Cleared render targets only when needed (direct3d).

Laurent Aimar git at videolan.org
Thu Apr 28 23:35:10 CEST 2011


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sun Apr 17 18:46:38 2011 +0200| [7ec2e3f025d1412e38304d43c079b38988e0941a] | committer: Laurent Aimar

Cleared render targets only when needed (direct3d).

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7ec2e3f025d1412e38304d43c079b38988e0941a
---

 modules/video_output/msw/common.h   |    1 +
 modules/video_output/msw/direct3d.c |   24 +++++++++++++-----------
 2 files changed, 14 insertions(+), 11 deletions(-)

diff --git a/modules/video_output/msw/common.h b/modules/video_output/msw/common.h
index 303f3a2..7bd3d1e 100644
--- a/modules/video_output/msw/common.h
+++ b/modules/video_output/msw/common.h
@@ -190,6 +190,7 @@ struct vout_display_sys_t
     /* */
     bool                    reset_device;
     bool                    reopen_device;
+    bool                    clear_scene;
 
     /* It protects the following variables */
     vlc_mutex_t    lock;
diff --git a/modules/video_output/msw/direct3d.c b/modules/video_output/msw/direct3d.c
index 639c315..da11e58 100644
--- a/modules/video_output/msw/direct3d.c
+++ b/modules/video_output/msw/direct3d.c
@@ -473,10 +473,7 @@ static void Manage (vout_display_t *vd)
         vout_display_SendEventPicturesInvalid(vd);
     }
 
-#if 0
-    /*
-     * Position Change
-     */
+    /* Position Change */
     if (sys->changes & DX_POSITION_CHANGE) {
 #if 0 /* need that when bicubic filter is available */
         RECT rect;
@@ -494,9 +491,9 @@ static void Manage (vout_display_t *vd)
                 return VLC_EGENERIC;
         }
 #endif
+        sys->clear_scene = true;
         sys->changes &= ~DX_POSITION_CHANGE;
     }
-#endif
 }
 
 /**
@@ -1023,6 +1020,8 @@ static int Direct3DCreateScene(vout_display_t *vd, const video_format_t *fmt)
     sys->d3dregion_count = 0;
     sys->d3dregion       = NULL;
 
+    sys->clear_scene = true;
+
     // Texture coordinates outside the range [0.0, 1.0] are set
     // to the texture color at 0.0 or 1.0, respectively.
     IDirect3DDevice9_SetSamplerState(d3ddev, 0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
@@ -1373,12 +1372,15 @@ static void Direct3DRenderScene(vout_display_t *vd,
     LPDIRECT3DDEVICE9 d3ddev = sys->d3ddev;
     HRESULT hr;
 
-    /* Clear the backbuffer and the zbuffer */
-    hr = IDirect3DDevice9_Clear(d3ddev, 0, NULL, D3DCLEAR_TARGET,
-                              D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
-    if (FAILED(hr)) {
-        msg_Dbg(vd, "%s:%d (hr=0x%0lX)", __FUNCTION__, __LINE__, hr);
-        return;
+    if (sys->clear_scene) {
+        /* Clear the backbuffer and the zbuffer */
+        hr = IDirect3DDevice9_Clear(d3ddev, 0, NULL, D3DCLEAR_TARGET,
+                                  D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
+        if (FAILED(hr)) {
+            msg_Dbg(vd, "%s:%d (hr=0x%0lX)", __FUNCTION__, __LINE__, hr);
+            return;
+        }
+        sys->clear_scene = false;
     }
 
     // Begin the scene



More information about the vlc-commits mailing list