[PATCH 3/5] ddraw: Thunk to surface1, not surface7 in blt.
Stefan Dösinger
stefan at codeweavers.com
Tue Jun 23 06:39:24 CDT 2015
---
dlls/ddraw/surface.c | 65 ++++++++++++++++++++--------------------------------
1 file changed, 25 insertions(+), 40 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index baf76ee..ae3a91f 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -1488,28 +1488,13 @@ static HRESULT ddraw_surface_blt_clipped(struct ddraw_surface *dst_surface, cons
return hr;
}
-/*****************************************************************************
- * IDirectDrawSurface7::Blt
- *
- * Performs a blit on the surface
- *
- * Params:
- * DestRect: Destination rectangle, can be NULL
- * SrcSurface: Source surface, can be NULL
- * SrcRect: Source rectangle, can be NULL
- * Flags: Blt flags
- * DDBltFx: Some extended blt parameters, connected to the flags
- *
- * Returns:
- * D3D_OK on success
- * See IWineD3DSurface::Blt for more details
- *
- *****************************************************************************/
-static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *iface, RECT *DestRect,
- IDirectDrawSurface7 *SrcSurface, RECT *SrcRect, DWORD Flags, DDBLTFX *DDBltFx)
+/* Note that we thunk to version 1 here. Fraps depends on this, as it hooks only methods from
+ * IDirectDrawSurface and expects later versions to call through version 1. */
+static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Blt(IDirectDrawSurface *iface, RECT *DestRect,
+ IDirectDrawSurface *SrcSurface, RECT *SrcRect, DWORD Flags, DDBLTFX *DDBltFx)
{
- struct ddraw_surface *dst_surface = impl_from_IDirectDrawSurface7(iface);
- struct ddraw_surface *src_surface = unsafe_impl_from_IDirectDrawSurface7(SrcSurface);
+ struct ddraw_surface *dst_surface = impl_from_IDirectDrawSurface(iface);
+ struct ddraw_surface *src_surface = unsafe_impl_from_IDirectDrawSurface(SrcSurface);
HRESULT hr = DD_OK;
DDBLTFX rop_fx;
@@ -1631,6 +1616,19 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *
}
}
+static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Blt(IDirectDrawSurface7 *iface, RECT *dst_rect,
+ IDirectDrawSurface7 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
+{
+ struct ddraw_surface *dst = impl_from_IDirectDrawSurface7(iface);
+ struct ddraw_surface *src_impl = unsafe_impl_from_IDirectDrawSurface7(src_surface);
+
+ TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
+ iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
+
+ return ddraw_surface1_Blt(&dst->IDirectDrawSurface_iface, dst_rect,
+ src_impl ? &src_impl->IDirectDrawSurface_iface : NULL, src_rect, flags, fx);
+}
+
static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface4_Blt(IDirectDrawSurface4 *iface, RECT *dst_rect,
IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
{
@@ -1640,8 +1638,8 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface4_Blt(IDirectDrawSurface4 *
TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
- return ddraw_surface7_Blt(&dst->IDirectDrawSurface7_iface, dst_rect,
- src ? &src->IDirectDrawSurface7_iface : NULL, src_rect, flags, fx);
+ return ddraw_surface1_Blt(&dst->IDirectDrawSurface_iface, dst_rect,
+ src ? &src->IDirectDrawSurface_iface : NULL, src_rect, flags, fx);
}
static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface3_Blt(IDirectDrawSurface3 *iface, RECT *dst_rect,
@@ -1653,8 +1651,8 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface3_Blt(IDirectDrawSurface3 *
TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
- return ddraw_surface7_Blt(&dst->IDirectDrawSurface7_iface, dst_rect,
- src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, src_rect, flags, fx);
+ return ddraw_surface1_Blt(&dst->IDirectDrawSurface_iface, dst_rect,
+ src_impl ? &src_impl->IDirectDrawSurface_iface : NULL, src_rect, flags, fx);
}
static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface2_Blt(IDirectDrawSurface2 *iface, RECT *dst_rect,
@@ -1666,21 +1664,8 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface2_Blt(IDirectDrawSurface2 *
TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
- return ddraw_surface7_Blt(&dst->IDirectDrawSurface7_iface, dst_rect,
- src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, src_rect, flags, fx);
-}
-
-static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface1_Blt(IDirectDrawSurface *iface, RECT *dst_rect,
- IDirectDrawSurface *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
-{
- struct ddraw_surface *dst = impl_from_IDirectDrawSurface(iface);
- struct ddraw_surface *src_impl = unsafe_impl_from_IDirectDrawSurface(src_surface);
-
- TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#x, fx %p.\n",
- iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
-
- return ddraw_surface7_Blt(&dst->IDirectDrawSurface7_iface, dst_rect,
- src_impl ? &src_impl->IDirectDrawSurface7_iface : NULL, src_rect, flags, fx);
+ return ddraw_surface1_Blt(&dst->IDirectDrawSurface_iface, dst_rect,
+ src_impl ? &src_impl->IDirectDrawSurface_iface : NULL, src_rect, flags, fx);
}
/*****************************************************************************
--
2.3.6
More information about the wine-patches
mailing list