ddraw correctness fixes patch
Tony Lambregts
tony.lambregts at gmail.com
Fri Mar 18 13:58:29 CST 2005
Matthew Mastracci wrote:
> Thanks for the review - comments inline.
>
> Christian Costa wrote:
>
>>> The new locking mechanism is wrong. DDLOCK_xxx are just used for
>>> optimization.
>>>
>>> The thing to do during the blit should be something like that :
>>>
>>> sdesc.dwSize = sizeof(sdesc);
>>> ddesc.dwSize = sizeof(ddesc);
>>> if (src == NULL)
>>> IDirectDrawSurface7_Lock(iface, &lock_dst, &ddesc, DDLOCK_WRITEONLY, 0);
>>> else if (src == iface) {
>>> RECT lock_union = < rect that just contains lock_dst and lock_src >;
>>> IDirectDrawSurface7_Lock(iface, &lock_union, &ddesc, 0, 0);
>>> sdesc = ddesc;
>>
>>
>>
>> I think here that sdesc and ddesc surface pointers should be remapped
>> according to lock_src and lock_dest.
>
>
> The above logic makes sense - I originally tried to solve it this way,
> but ended up failing because of the sdesc and ddesc mapping issue. Any
> idea how to do this cleanly?
I think what will work is IntersectRect() from windows/rect.c
IntersectRect( LPRECT dest, const RECT *src1, const RECT *src2)
Something like the following perhaps?
RECT lock_union
if IntersectRect(&lockunion, &sdesc, &ddesc)
IDirectDrawSurface7_Lock(iface, &lock_union, &ddesc, 0, 0);
....
--
Tony Lambregts
More information about the wine-devel
mailing list