DDraw issues, etc.
Tim Hentenaar
tth at one.net
Sat Apr 3 03:00:23 CST 2004
On Sat, 3 Apr 2004 10:26:12 +0200
Lionel Ulmer <lionel.ulmer at 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
More information about the wine-devel
mailing list