On Sat, 3 Apr 2004 10:26:12 +0200 Lionel Ulmer lionel.ulmer@free.fr wrote:
Usually, games use the Clipper to do 'non-full screen' DirectX applications. There is no way to do a work-around to have it running in full-screen :-) ?
While it doesn't make sense it does use the Clipper even in fullscreen mode. :P
A little hacking, using FIXME() to reveal some info (I didn't want to enable TRACE() because it makes the app way too slow :P):
fixme:ddraw:Main_DirectDrawClipper_SetClipList (0x47c9cfe0)->SetClipList(0x49d8cbe0,0) fixme:ddraw:Main_DirectDrawClipper_SetClipList --------- RGNDATA ---------- fixme:ddraw:Main_DirectDrawClipper_SetClipList dwSize: 32 fixme:ddraw:Main_DirectDrawClipper_SetClipList nCount: 3 fixme:ddraw:Main_DirectDrawClipper_SetClipList rcBound: 313,234,365,265 fixme:ddraw:Main_DirectDrawClipper_SetClipList ---------------------------- fixme:ddraw:DIB_DirectDrawSurface_Blt (0x47c9bba8)->(0x406dfd34,0x46c4c640,0x406dfd24,00020000,0x406dfc94) fixme:ddraw:DIB_DirectDrawSurface_Blt destrect :313x234-365x265 fixme:ddraw:DIB_DirectDrawSurface_Blt srcrect :313x234-365x265 fixme:ddraw:DIB_DirectDrawSurface_Blt flags: DDBLT_ROP
Anyway, all this clipping is not really implemented properly as most of the effort was spent on full screen apps.
I might be up for fixing that, at least partially :P
As far as I can see in the code, the only case supported with clipping is the case where only one rectangle is given in the clip list via the SetHWnd method (see, for example, User_copy_to_screen in dlls/ddraw/dsurface/user.c) which is the 'standard' case for windowed DirectX applications (like Media player) : a menu bar + a DirectX display zone.
I'll have a look at that. I did implement SetClipList/GetClipList even though I did it a bit hackishly IMO, it dosen't give any problems :P
Otherwise (ie multiple rectangles), you should check if you can support with the 'BitBlt' API something like the 'XSetClipRectangles' X11 API (which can't be called directly from DirectX anymore) which would prevent us rewriting in the DirectX code some generic 'multi-rectangle' clipping code.
I'm guessing that the current DX implementation uses a user32-based rendering via BitBlit? I know that DX allows for HAL and User32-based drawing.
I'll have a look at the XSetClipRectangles() man page and hope and pray that I can find a way to implement this :P Any further help you could give me would be appreciated.
Thanks,
Tim