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(a)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