https://bugs.winehq.org/show_bug.cgi?id=17895
Michael Müller michael@fds-team.de changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |michael@fds-team.de
--- Comment #8 from Michael Müller michael@fds-team.de --- The application does not really freeze but just works extremely slow in wine. Use (0.2, 0; 0, 0.2) as transformation and you will see the result almost immediately.
The application uses a highly inefficient way to read the pixels from the source image and set the pixel in the destination image (see marked lines). All those functions are called for each and every pixel causing the extreme lag. I guess that at least one of these functions is much slower in Wine than on windows.
----- 0009:Call user32.GetDC(00000000) ret=00407b52 0009:Ret user32.GetDC() retval=0009003a ret=00407b52 0009:Call gdi32.CreateCompatibleDC(0009003a) ret=00407b5e 0009:Ret gdi32.CreateCompatibleDC() retval=b8bc0050 ret=00407b5e 0009:Call user32.ReleaseDC(00000000,0009003a) ret=00407b72 0009:Ret user32.ReleaseDC() retval=00000001 ret=00407b72 0009:Call gdi32.SelectObject(b8bc0050,00050049) ret=00407b87 0009:Ret gdi32.SelectObject() retval=0001001a ret=00407b87 0009:Call gdi32.SetTextAlign(b8bc0050,00000018) ret=00407ba1 0009:Ret gdi32.SetTextAlign() retval=00000000 ret=00407ba1 0009:Call gdi32.GetClipRgn(b8bc0050,00030053) ret=00498364 0009:Ret gdi32.GetClipRgn() retval=00000000 ret=00498364 0009:Call gdi32.SetBkMode(b8bc0050,00000001) ret=0049837b 0009:Ret gdi32.SetBkMode() retval=00000002 ret=0049837b 0009:Call gdi32.GetPixel(b8bc0050,000000de,0000004e) ret=00498d3b <-- 0009:Ret gdi32.GetPixel() retval=00ffffff ret=00498d3b 0009:Call gdi32.SelectObject(b8bc0050,0001001a) ret=00407bfe 0009:Ret gdi32.SelectObject() retval=00050049 ret=00407bfe 0009:Call gdi32.DeleteDC(b8bc0050) ret=00407c0d 0009:Ret gdi32.DeleteDC() retval=00000001 ret=00407c0d 0009:Call user32.GetDC(00000000) ret=00407b52 0009:Ret user32.GetDC() retval=0009003a ret=00407b52 0009:Call gdi32.CreateCompatibleDC(0009003a) ret=00407b5e 0009:Ret gdi32.CreateCompatibleDC() retval=b8bd0050 ret=00407b5e 0009:Call user32.ReleaseDC(00000000,0009003a) ret=00407b72 0009:Ret user32.ReleaseDC() retval=00000001 ret=00407b72 0009:Call gdi32.SelectObject(b8bd0050,0002004e) ret=00407b87 0009:Ret gdi32.SelectObject() retval=0001001a ret=00407b87 0009:Call gdi32.SetTextAlign(b8bd0050,00000018) ret=00407ba1 0009:Ret gdi32.SetTextAlign() retval=00000000 ret=00407ba1 0009:Call gdi32.GetClipRgn(b8bd0050,00030053) ret=00498364 0009:Ret gdi32.GetClipRgn() retval=00000000 ret=00498364 0009:Call gdi32.SetBkMode(b8bd0050,00000001) ret=0049837b 0009:Ret gdi32.SetBkMode() retval=00000002 ret=0049837b 0009:Call gdi32.SetPixelV(b8bd0050,000000de,0000004e,00ffffff) ret=00498e32 <-- 0009:Ret gdi32.SetPixelV() retval=00000001 ret=00498e32 0009:Call KERNEL32.GetTickCount() ret=005236de 0009:Ret KERNEL32.GetTickCount() retval=00a54eb1 ret=005236de 0009:Call gdi32.SelectObject(b8bd0050,0001001a) ret=00407bfe 0009:Ret gdi32.SelectObject() retval=0002004e ret=00407bfe 0009:Call gdi32.DeleteDC(b8bd0050) ret=00407c0d 0009:Ret gdi32.DeleteDC() retval=00000001 ret=00407c0d -----