Module: wine Branch: master Commit: a44401af0fa5e68dc20ff650f636af1b92b60b21 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a44401af0fa5e68dc20ff650f6...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Sun Nov 13 19:52:25 2011 +0100
wined3d: x11_copy_to_screen() shouldn't be called on mapped surfaces.
---
dlls/wined3d/swapchain.c | 40 ++++------------------------------------ 1 files changed, 4 insertions(+), 36 deletions(-)
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index a02a189..d04d9c1 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -677,6 +677,9 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r if (!(front->resource.usage & WINED3DUSAGE_RENDERTARGET)) return;
+ if (front->flags & SFLAG_LOCKED) + ERR("Trying to blit a mapped surface.\n"); + TRACE("Copying surface %p to screen.\n", front);
src_dc = front->hDC; @@ -690,48 +693,13 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r
TRACE("offset %s.\n", wine_dbgstr_point(&offset));
-#if 0 - /* FIXME: This doesn't work... if users really want to run - * X in 8bpp, then we need to call directly into display.drv - * (or Wine's equivalent), and force a private colormap - * without default entries. */ - if (front->palette) - { - SelectPalette(dst_dc, front->palette->hpal, FALSE); - RealizePalette(dst_dc); /* sends messages => deadlocks */ - } -#endif - draw_rect.left = 0; draw_rect.right = front->resource.width; draw_rect.top = 0; draw_rect.bottom = front->resource.height;
-#if 0 - /* TODO: Support clippers. */ - if (front->clipper) - { - RECT xrc; - HWND hwnd = front->clipper->hWnd; - if (hwnd && GetClientRect(hwnd,&xrc)) - { - OffsetRect(&xrc, offset.x, offset.y); - IntersectRect(&draw_rect, &draw_rect, &xrc); - } - } -#endif - - if (!rect) - { - /* Only use this if the caller did not pass a rectangle, since - * due to double locking this could be the wrong one... */ - if (front->lockedRect.left != front->lockedRect.right) - IntersectRect(&draw_rect, &draw_rect, &front->lockedRect); - } - else - { + if (rect) IntersectRect(&draw_rect, &draw_rect, rect); - }
BitBlt(dst_dc, draw_rect.left - offset.x, draw_rect.top - offset.y, draw_rect.right - draw_rect.left, draw_rect.bottom - draw_rect.top,