[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