On 3/1/07, Benoit Pradelle ze_real_neo@yahoo.fr wrote:
First thank you for your very complete answer,
I'm not really familiar with Wine (and the Windows API) and I don't understand why do you think that it will be such an hard work.
Read some code in dlls/winex11.drv in the wine tree, you will quickly understand :-).
The other thing is that there are many aspects of GDI drawing, you have to take into account region clipping, pens, brushes, line thickness, line style, fill style, and other wonders, and make them work in 1, 4, 8, 16, 24 and 32 bit colour depth pixel-for-pixel exact with the way Windows does them.
For me, the work will consist in redirect the GDI calls from the X11 pseudo-driver to some new functions which will draw circles, lines, etc.. over DIBs. Do I misunderstand the work to do or under evaluate it ?
There are probably several ways to do a DIB engine.
The way I would do it, is the way that Transgaming did it in that patch a number of years back, ie. where wine does:
X11DRV_LockDIBSection(..., DIB_Status_GdiMod, ...); // draw with the X server X11DRV_UnlockDIBSection(..., ...);
change it to do:
status = X11DRV_LockDIBSection(..., DIB_Status_None, ...); if (status == DIB_Status_AppMod) // draw with the DIB engine else { X11DRV_DIB_Coerce(..., DIB_Status_GdiMod, ...); // draw with the X server } X11DRV_UnlockDIBSection(..., ...);
But I asked Alexandre about this, and he said the whole point of the DIB engine is that you shouldn't need the locking. How that would work is beyond me, after all, if you only draw on the client-side, you still have to upload the image to the X server when you want it to become visible, but what about images that aren't double-buffered, and what about mixed drawing with OpenGL?
And I've understand by reading this mail-list how important are regression tests and fluent transitions in functionalities for Wine.
Stefan Dösinger a écrit :
Am Donnerstag 01 März 2007 14:03 schrieb Benoit Pradelle: