[PATCH 1/5] d3d8: Implement CopyRects() on top of wined3d_surface_blt().
Henri Verbeet
hverbeet at codeweavers.com
Sun Oct 30 12:06:32 CDT 2011
---
dlls/d3d8/device.c | 25 +++++++++++++++++++------
1 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 2a78117..1ead518 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -931,6 +931,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(IDirect3DDevice8 *iface,
enum wined3d_format_id srcFormat, destFormat;
struct wined3d_resource_desc wined3d_desc;
struct wined3d_resource *wined3d_resource;
+ UINT src_w, src_h;
TRACE("iface %p, src_surface %p, src_rects %p, rect_count %u, dst_surface %p, dst_points %p.\n",
iface, pSourceSurface, pSourceRects, cRects, pDestinationSurface, pDestPoints);
@@ -942,6 +943,8 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(IDirect3DDevice8 *iface,
wined3d_resource = wined3d_surface_get_resource(Source->wined3d_surface);
wined3d_resource_get_desc(wined3d_resource, &wined3d_desc);
srcFormat = wined3d_desc.format;
+ src_w = wined3d_desc.width;
+ src_h = wined3d_desc.height;
wined3d_resource = wined3d_surface_get_resource(Dest->wined3d_surface);
wined3d_resource_get_desc(wined3d_resource, &wined3d_desc);
@@ -964,8 +967,9 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(IDirect3DDevice8 *iface,
/* Quick if complete copy ... */
if (!cRects && !pSourceRects && !pDestPoints)
{
- wined3d_surface_bltfast(Dest->wined3d_surface, 0, 0,
- Source->wined3d_surface, NULL, WINEDDBLTFAST_NOCOLORKEY);
+ RECT rect = {0, 0, src_w, src_h};
+ wined3d_surface_blt(Dest->wined3d_surface, &rect,
+ Source->wined3d_surface, &rect, 0, NULL, WINED3DTEXF_POINT);
}
else
{
@@ -975,16 +979,25 @@ static HRESULT WINAPI IDirect3DDevice8Impl_CopyRects(IDirect3DDevice8 *iface,
{
for (i = 0; i < cRects; ++i)
{
- wined3d_surface_bltfast(Dest->wined3d_surface, pDestPoints[i].x, pDestPoints[i].y,
- Source->wined3d_surface, &pSourceRects[i], WINEDDBLTFAST_NOCOLORKEY);
+ UINT w = pSourceRects[i].right - pSourceRects[i].left;
+ UINT h = pSourceRects[i].bottom - pSourceRects[i].top;
+ RECT dst_rect = {pDestPoints[i].x, pDestPoints[i].y,
+ pDestPoints[i].x + w, pDestPoints[i].y + h};
+
+ wined3d_surface_blt(Dest->wined3d_surface, &dst_rect,
+ Source->wined3d_surface, &pSourceRects[i], 0, NULL, WINED3DTEXF_POINT);
}
}
else
{
for (i = 0; i < cRects; ++i)
{
- wined3d_surface_bltfast(Dest->wined3d_surface, 0, 0,
- Source->wined3d_surface, &pSourceRects[i], WINEDDBLTFAST_NOCOLORKEY);
+ UINT w = pSourceRects[i].right - pSourceRects[i].left;
+ UINT h = pSourceRects[i].bottom - pSourceRects[i].top;
+ RECT dst_rect = {0, 0, w, h};
+
+ wined3d_surface_blt(Dest->wined3d_surface, &dst_rect,
+ Source->wined3d_surface, &pSourceRects[i], 0, NULL, WINED3DTEXF_POINT);
}
}
}
--
1.7.3.4
More information about the wine-patches
mailing list