http://bugs.winehq.org/show_bug.cgi?id=36504
Bug ID: 36504 Summary: The XFORM matrix is calculated incorrectly in PlgBlt() Product: Wine Version: 1.7.19 Hardware: x86 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: gdi32 Assignee: wine-bugs@winehq.org Reporter: sashoalm@gmail.com
I initially posted this at the wine-devel mailing list - http://www.winehq.org/pipermail/wine-devel/2014-May/104356.html
For now, I'll copy/paste the relevant parts describing how to reproduce the bug.
The test is a VC6 project, you can find it at https://drive.google.com/file/d/0B9PGUhmmnsm1S2VvZzc3WmhBY3c/edit?usp=sharin.... The test is a demo of PlgBlt that I found on CodeProjecthttp://www.codeproject.com/Articles/17712/The-GDI-magic-Rendering-reflections-and-smooth-sha. You can compare how it works on XP and on Wine. For testing, I directly inserted the original Wine implementation of PlgBlt, as well as my patched version, into the VC6 project, and tested on that. This is because there seems to be an additional problem with MaskBlt, which I'll try tackling next.
I have screenshots of what the demo looks using Windows's PlgBlthttp://imgur.com/q8qKGd7, and Wine's PlgBlt http://imgur.com/smYEV6z.
To test it, simply look at this function in the VC6 project:
BOOL MyPlgBlt( HDC hdcDest, const POINT *lpPoint, HDC hdcSrc, INT nXSrc, INT nYSrc, INT nWidth, INT nHeight, HBITMAP hbmMask, INT xMask, INT yMask) { // return MyPlgBltWinePatched(hdcDest, lpPoint, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, hbmMask, xMask, yMask); return MyPlgBltWineUnpatched(hdcDest, lpPoint, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, hbmMask, xMask, yMask); // return PlgBlt(hdcDest, lpPoint, hdcSrc, nXSrc, nYSrc, nWidth, nHeight, hbmMask, xMask, yMask); }