From: Laurent Aimar Date: Sun, 17 Apr 2011 16:46:38 +0000 (+0200) Subject: Cleared render targets only when needed (direct3d). X-Git-Tag: 1.2.0-pre1~2860 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=7ec2e3f025d1412e38304d43c079b38988e0941a;p=vlc Cleared render targets only when needed (direct3d). --- diff --git a/modules/video_output/msw/common.h b/modules/video_output/msw/common.h index 303f3a2b7e..7bd3d1ea75 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 639c315327..da11e58dd6 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