Hmmmmmmm.... I don't think that this is a good idea. We must call DC_vPrepareForBlit to lock the surfaces, otherwise we run into race conditions. And we should really also care for the mouse cursor, otherwise we might make it unhappy. Anyway, I don't care about this code, since I already rewrote it :D Anyway, I think it's time to ASSERT device locks.
Am 22.08.2012 18:45, schrieb jgardou@svn.reactos.org:
Author: jgardou Date: Wed Aug 22 16:45:49 2012 New Revision: 57129
URL: http://svn.reactos.org/svn/reactos?rev=57129&view=rev Log: [WIN32K]
- Use the right surface for direct DCs in DIB transfer functions
It could have changed with a display settings change
Modified: trunk/reactos/win32ss/gdi/ntgdi/dibobj.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/dibobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/dibobj.c?... ============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/dibobj.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/dibobj.c [iso-8859-1] Wed Aug 22 16:45:49 2012 @@ -447,8 +447,16 @@ DC_UnlockDc(pDC); goto Exit2; }
- pSurf = pDC->dclevel.pSurface;
- /*
* Select the right surface.* NOTE: we don't call DC_vPrepareDCsForBlit, because we don't* care about mouse, visible region or brushes in this API.*/- if(pDC->dctype == DCTYPE_DIRECT)
pSurf = pDC->ppdev->pSurface;- else
pSurf = pDC->dclevel.pSurface; if (!pSurf) { DC_UnlockDc(pDC);@@ -1113,7 +1121,15 @@ goto cleanup; }
- psurfDst = pdc->dclevel.pSurface;
- /*
* Select the right surface.* NOTE: we don't call DC_vPrepareDCsForBlit, because we don't* care about mouse, visible region or brushes in this API.*/- if(pdc->dctype == DCTYPE_DIRECT)
psurfDst = pdc->ppdev->pSurface;- else
psurfDst = pdc->dclevel.pSurface; if (!psurfDst) { // CHECKME