Ričardas Barkauskas : ddraw: Use helper function to delete attached surfaces.
Alexandre Julliard
julliard at winehq.org
Tue Jun 21 12:25:42 CDT 2011
Module: wine
Branch: master
Commit: 104e68da459490a6e348620651fc181c2177fc9b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=104e68da459490a6e348620651fc181c2177fc9b
Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date: Mon Jun 20 23:46:26 2011 +0300
ddraw: Use helper function to delete attached surfaces.
---
dlls/ddraw/surface.c | 69 +++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 54 insertions(+), 15 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 36c4084..fdb199e 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -1452,14 +1452,12 @@ static HRESULT WINAPI ddraw_surface1_AddAttachedSurface(IDirectDrawSurface *ifac
* DDERR_SURFACENOTATTACHED if the surface isn't attached to
*
*****************************************************************************/
-static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *iface,
- DWORD Flags, IDirectDrawSurface7 *Attach)
+static HRESULT ddraw_surface_delete_attached_surface(IDirectDrawSurfaceImpl *This,
+ IDirectDrawSurfaceImpl *Surf)
{
- IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface);
- IDirectDrawSurfaceImpl *Surf = unsafe_impl_from_IDirectDrawSurface7(Attach);
IDirectDrawSurfaceImpl *Prev = This;
- TRACE("iface %p, flags %#x, attachment %p.\n", iface, Flags, Attach);
+ TRACE("surface %p, attachment %p.\n", This, Surf);
EnterCriticalSection(&ddraw_cs);
if (!Surf || (Surf->first_attached != This) || (Surf == This) )
@@ -1497,21 +1495,44 @@ static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *
{
IDirect3DDeviceImpl_UpdateDepthStencil(This->ddraw->d3ddevice);
}
-
- ddraw_surface7_Release(Attach);
LeaveCriticalSection(&ddraw_cs);
return DD_OK;
}
+static HRESULT WINAPI ddraw_surface7_DeleteAttachedSurface(IDirectDrawSurface7 *iface,
+ DWORD flags, IDirectDrawSurface7 *attachment)
+{
+ IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface7(iface);
+ IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface7(attachment);
+ HRESULT hr;
+
+ TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
+
+ hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+ ddraw_surface7_Release(attachment);
+ return hr;
+}
+
static HRESULT WINAPI ddraw_surface4_DeleteAttachedSurface(IDirectDrawSurface4 *iface,
DWORD flags, IDirectDrawSurface4 *attachment)
{
IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface4(iface);
IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface4(attachment);
+ HRESULT hr;
+
TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
- return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
- attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+ hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+ ddraw_surface4_Release(attachment);
+ return hr;
}
static HRESULT WINAPI ddraw_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *iface,
@@ -1519,10 +1540,16 @@ static HRESULT WINAPI ddraw_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *
{
IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface3(iface);
IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface3(attachment);
+ HRESULT hr;
TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
- return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
- attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+ hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+ ddraw_surface3_Release(attachment);
+ return hr;
}
static HRESULT WINAPI ddraw_surface2_DeleteAttachedSurface(IDirectDrawSurface2 *iface,
@@ -1530,10 +1557,16 @@ static HRESULT WINAPI ddraw_surface2_DeleteAttachedSurface(IDirectDrawSurface2 *
{
IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface2(iface);
IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface2(attachment);
+ HRESULT hr;
TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
- return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
- attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+ hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+ ddraw_surface2_Release(attachment);
+ return hr;
}
static HRESULT WINAPI ddraw_surface1_DeleteAttachedSurface(IDirectDrawSurface *iface,
@@ -1541,10 +1574,16 @@ static HRESULT WINAPI ddraw_surface1_DeleteAttachedSurface(IDirectDrawSurface *i
{
IDirectDrawSurfaceImpl *This = impl_from_IDirectDrawSurface(iface);
IDirectDrawSurfaceImpl *attachment_impl = unsafe_impl_from_IDirectDrawSurface(attachment);
+ HRESULT hr;
TRACE("iface %p, flags %#x, attachment %p.\n", iface, flags, attachment);
- return ddraw_surface7_DeleteAttachedSurface(&This->IDirectDrawSurface7_iface, flags,
- attachment_impl ? &attachment_impl->IDirectDrawSurface7_iface : NULL);
+ hr = ddraw_surface_delete_attached_surface(This, attachment_impl);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+ ddraw_surface1_Release(attachment);
+ return hr;
}
/*****************************************************************************
More information about the wine-cvs
mailing list