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