Added all clipper&3d stubs.

Starting ColorKey support.
Fixed trace statement in DirectDrawCreate as formatting wasn't correct.
Changed "return 0;" to "return DD_OK" or "return S_OK" as appropriate.
Added SurfaceEnum dwFlags.
This commit is contained in:
Peter Hunnisett 1998-12-24 16:28:57 +00:00 committed by Alexandre Julliard
parent 92cbc1d343
commit 2d37e9b8cf
2 changed files with 281 additions and 123 deletions

View File

@ -124,7 +124,7 @@ DirectDrawEnumerate32A(LPDDENUMCALLBACK32A ddenumproc,LPVOID data) {
}
ddenumproc(&XLIB_DirectDraw_GUID,"WINE with Xlib","display",data);
ddenumproc(NULL,"WINE","display",data);
return 0;
return DD_OK;
}
/* What is this doing here? */
@ -391,14 +391,14 @@ static HRESULT WINAPI IDirectDrawSurface3_Lock(
} else {
assert(this->s.surface_desc.y.lpSurface);
}
return 0;
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDrawSurface3_Unlock(
LPDIRECTDRAWSURFACE3 this,LPVOID surface
) {
TRACE(ddraw,"(%p)->Unlock(%p)\n",this,surface);
return 0;
return DD_OK;
}
static HRESULT WINAPI Xlib_IDirectDrawSurface3_Unlock(
@ -469,7 +469,7 @@ static HRESULT WINAPI DGA_IDirectDrawSurface3_Flip(
this->s.surface_desc.y.lpSurface = flipto->s.surface_desc.y.lpSurface;
flipto->s.surface_desc.y.lpSurface = ptmp;
}
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -480,7 +480,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
) {
TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
if (!this->s.ddraw->e.xlib.paintable)
return 0;
return DD_OK;
if (!flipto) {
if (this->s.backbuffer)
@ -522,7 +522,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
this->s.surface_desc.y.lpSurface = flipto->s.surface_desc.y.lpSurface;
flipto->s.surface_desc.y.lpSurface = surf;
}
return 0;
return DD_OK;
}
@ -534,12 +534,15 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_SetPalette(
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWPALETTE pal
) {
int i;
TRACE(ddraw,"(%p)->SetPalette(%p)\n",this,pal);
TRACE(ddraw,"(%p)->(%p)\n",this,pal);
if (!(pal->cm) && (this->s.ddraw->d.depth<=8)) {
if( !(pal->cm) && (this->s.ddraw->d.depth<=8))
{
pal->cm = TSXCreateColormap(display,this->s.ddraw->e.xlib.drawable,DefaultVisualOfScreen(screen),AllocAll);
/* FIXME: this is not correct, when using -managed */
/* FIXME: this is not correct, when using -managed (XSetWindowColormap??) */
TSXInstallColormap(display,pal->cm);
for (i=0;i<256;i++) {
XColor xc;
@ -551,6 +554,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_SetPalette(
TSXStoreColor(display,pal->cm,&xc);
}
}
/* According to spec, we are only supposed to
* AddRef if this is not the same palette.
*/
@ -574,7 +578,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_SetPalette(
/* Perform the refresh */
TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
}
return 0;
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDrawSurface3_SetPalette(
@ -602,7 +606,7 @@ static HRESULT WINAPI DGA_IDirectDrawSurface3_SetPalette(
}
TSXF86DGAInstallColormap(display,DefaultScreen(display),this->s.palette->cm);
}
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -682,7 +686,7 @@ static HRESULT WINAPI IDirectDrawSurface3_Blt(
if (dwFlags) {
TRACE(ddraw,"\t(src=NULL):Unsupported flags: ");_dump_DDBLT(dwFlags);fprintf(stderr,"\n");
}
return 0;
return DD_OK;
}
if ( (xsrc.top ==0) && (xsrc.bottom ==ddesc.dwHeight) &&
@ -714,7 +718,7 @@ static HRESULT WINAPI IDirectDrawSurface3_Blt(
this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface);
src ->lpvtbl->fnUnlock(src,sdesc.y.lpSurface);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_BltFast(
@ -742,7 +746,7 @@ static HRESULT WINAPI IDirectDrawSurface3_BltFast(
}
this->lpvtbl->fnUnlock(this,ddesc.y.lpSurface);
src ->lpvtbl->fnUnlock(src,sdesc.y.lpSurface);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_BltBatch(
@ -751,7 +755,7 @@ static HRESULT WINAPI IDirectDrawSurface3_BltBatch(
FIXME(ddraw,"(%p)->BltBatch(%p,%08lx,%08lx),stub!\n",
this,ddbltbatch,x,y
);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_GetCaps(
@ -759,7 +763,7 @@ static HRESULT WINAPI IDirectDrawSurface3_GetCaps(
) {
TRACE(ddraw,"(%p)->GetCaps(%p)\n",this,caps);
caps->dwCaps = DDSCAPS_PALETTE; /* probably more */
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_GetSurfaceDesc(
@ -781,7 +785,7 @@ static HRESULT WINAPI IDirectDrawSurface3_GetSurfaceDesc(
fprintf(stderr,"\n");
}
return 0;
return DD_OK;
}
static ULONG WINAPI IDirectDrawSurface3_AddRef(LPDIRECTDRAWSURFACE3 this) {
@ -871,7 +875,7 @@ static HRESULT WINAPI IDirectDrawSurface3_GetAttachedSurface(
if( this->s.backbuffer )
this->s.backbuffer->lpvtbl->fnAddRef( this->s.backbuffer );
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_Initialize(
@ -889,26 +893,26 @@ static HRESULT WINAPI IDirectDrawSurface3_GetPixelFormat(
*pf = this->s.surface_desc.ddpfPixelFormat;
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_GetBltStatus(LPDIRECTDRAWSURFACE3 this,DWORD dwFlags) {
FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",this,dwFlags);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_GetOverlayPosition(
LPDIRECTDRAWSURFACE3 this,LPLONG x1,LPLONG x2
) {
FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,x1,x2);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_SetClipper(
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWCLIPPER clipper
) {
FIXME(ddraw,"(%p)->(%p),stub!\n",this,clipper);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_AddAttachedSurface(
@ -919,19 +923,19 @@ static HRESULT WINAPI IDirectDrawSurface3_AddAttachedSurface(
/* This hack will be enough for the moment */
if (this->s.backbuffer == NULL)
this->s.backbuffer = surf;
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_GetDC(LPDIRECTDRAWSURFACE3 this,HDC32* lphdc) {
FIXME(ddraw,"(%p)->GetDC(%p)\n",this,lphdc);
*lphdc = BeginPaint32(this->s.ddraw->d.window,&this->s.ddraw->d.ps);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_ReleaseDC(LPDIRECTDRAWSURFACE3 this,HDC32 hdc) {
FIXME(ddraw,"(%p)->(0x%08lx),stub!\n",this,(long)hdc);
EndPaint32(this->s.ddraw->d.window,&this->s.ddraw->d.ps);
return 0;
return DD_OK;
}
@ -951,7 +955,7 @@ static HRESULT WINAPI IDirectDrawSurface3_QueryInterface(LPDIRECTDRAWSURFACE3 th
) {
*obj = this;
this->lpvtbl->fnAddRef(this);
return 0;
return S_OK;
}
FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",this,xrefiid);
return OLE_E_ENUM_NOMORE;
@ -959,29 +963,54 @@ static HRESULT WINAPI IDirectDrawSurface3_QueryInterface(LPDIRECTDRAWSURFACE3 th
static HRESULT WINAPI IDirectDrawSurface3_IsLost(LPDIRECTDRAWSURFACE3 this) {
TRACE(ddraw,"(%p)->(), stub!\n",this);
return 0; /* hmm */
return DD_OK; /* hmm */
}
static HRESULT WINAPI IDirectDrawSurface3_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 this,LPVOID context,LPDDENUMSURFACESCALLBACK esfcb) {
FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,context,esfcb);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_Restore(LPDIRECTDRAWSURFACE3 this) {
FIXME(ddraw,"(%p)->(),stub!\n",this);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_SetColorKey(
LPDIRECTDRAWSURFACE3 this, DWORD dwFlags, LPDDCOLORKEY ckey
) {
FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n",this,dwFlags,ckey);
LPDIRECTDRAWSURFACE3 this, DWORD dwFlags, LPDDCOLORKEY ckey )
{
TRACE(ddraw,"(%p)->(0x%08lx,%p)\n",this,dwFlags,ckey);
if( dwFlags & DDCKEY_SRCBLT )
{
dwFlags &= ~DDCKEY_SRCBLT;
memcpy( &(this->s.ckSrcBlt), ckey, sizeof( *ckey ) );
}
if( dwFlags & DDCKEY_DESTBLT )
{
dwFlags &= ~DDCKEY_DESTBLT;
memcpy( &(this->s.ckDestBlt), ckey, sizeof( *ckey ) );
}
if( dwFlags & DDCKEY_SRCOVERLAY )
{
dwFlags &= ~DDCKEY_SRCOVERLAY;
memcpy( &(this->s.ckSrcOverlay), ckey, sizeof( *ckey ) );
}
if( dwFlags & DDCKEY_DESTOVERLAY )
{
dwFlags &= ~DDCKEY_DESTOVERLAY;
memcpy( &(this->s.ckDestOverlay), ckey, sizeof( *ckey ) );
}
if( dwFlags )
TRACE( ddraw, "unhandled dwFlags: %08lx\n", dwFlags );
return DD_OK;
{
FIXME( ddraw, "unhandled dwFlags: 0x%08lx\n", dwFlags );
}
return DD_OK;
}
static HRESULT WINAPI IDirectDrawSurface3_AddOverlayDirtyRect(
@ -1029,7 +1058,35 @@ static HRESULT WINAPI IDirectDrawSurface3_GetColorKey(
DWORD dwFlags,
LPDDCOLORKEY lpDDColorKey )
{
FIXME(ddraw,"(%p)->(0x%08lx,%p),stub!\n", this, dwFlags, lpDDColorKey);
TRACE(ddraw,"(%p)->(0x%08lx,%p)\n", this, dwFlags, lpDDColorKey);
if( dwFlags & DDCKEY_SRCBLT ) {
dwFlags &= ~DDCKEY_SRCBLT;
memcpy( lpDDColorKey, &(this->s.ckSrcBlt), sizeof( *lpDDColorKey ) );
}
if( dwFlags & DDCKEY_DESTBLT )
{
dwFlags &= ~DDCKEY_DESTBLT;
memcpy( lpDDColorKey, &(this->s.ckDestBlt), sizeof( *lpDDColorKey ) );
}
if( dwFlags & DDCKEY_SRCOVERLAY )
{
dwFlags &= ~DDCKEY_SRCOVERLAY;
memcpy( lpDDColorKey, &(this->s.ckSrcOverlay), sizeof( *lpDDColorKey ) );
}
if( dwFlags & DDCKEY_DESTOVERLAY )
{
dwFlags &= ~DDCKEY_DESTOVERLAY;
memcpy( lpDDColorKey, &(this->s.ckDestOverlay), sizeof( *lpDDColorKey ) );
}
if( dwFlags )
{
FIXME( ddraw, "unhandled dwFlags: 0x%08lx\n", dwFlags );
}
return DD_OK;
}
@ -1231,7 +1288,7 @@ HRESULT WINAPI DirectDrawCreateClipper( DWORD dwFlags,
(*lplpDDClipper)->lpvtbl = &ddclipvt;
(*lplpDDClipper)->ref = 1;
return 0;
return DD_OK;
}
/******************************************************************************
@ -1241,7 +1298,7 @@ static HRESULT WINAPI IDirectDrawClipper_SetHwnd(
LPDIRECTDRAWCLIPPER this,DWORD x,HWND32 hwnd
) {
FIXME(ddraw,"(%p)->SetHwnd(0x%08lx,0x%08lx),stub!\n",this,x,(DWORD)hwnd);
return 0;
return DD_OK;
}
static ULONG WINAPI IDirectDrawClipper_Release(LPDIRECTDRAWCLIPPER this) {
@ -1259,28 +1316,69 @@ static HRESULT WINAPI IDirectDrawClipper_GetClipList(
) {
FIXME(ddraw,"(%p,%p,%p,%p),stub!\n",this,rects,lprgn,hmm);
if (hmm) *hmm=0;
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawClipper_SetClipList(
LPDIRECTDRAWCLIPPER this,LPRGNDATA lprgn,DWORD hmm
) {
FIXME(ddraw,"(%p,%p,%ld),stub!\n",this,lprgn,hmm);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDrawClipper_QueryInterface(
LPDIRECTDRAWCLIPPER this,
REFIID riid,
LPVOID* ppvObj )
{
FIXME(ddraw,"(%p)->(%p,%p),stub!\n",this,riid,ppvObj);
return OLE_E_ENUM_NOMORE;
}
static ULONG WINAPI IDirectDrawClipper_AddRef( LPDIRECTDRAWCLIPPER this )
{
TRACE( ddraw, "(%p)->() incrementing from %lu.\n", this, this->ref );
return ++(this->ref);
}
static HRESULT WINAPI IDirectDrawClipper_GetHWnd(
LPDIRECTDRAWCLIPPER this,
HWND32* HWndPtr )
{
FIXME(ddraw,"(%p)->(%p),stub!\n",this,HWndPtr);
return DD_OK;
}
static HRESULT WINAPI IDirectDrawClipper_Initialize(
LPDIRECTDRAWCLIPPER this,
LPDIRECTDRAW lpDD,
DWORD dwFlags )
{
FIXME(ddraw,"(%p)->(%p,0x%08lx),stub!\n",this,lpDD,dwFlags);
return DD_OK;
}
static HRESULT WINAPI IDirectDrawClipper_IsClipListChanged(
LPDIRECTDRAWCLIPPER this,
BOOL32* lpbChanged )
{
FIXME(ddraw,"(%p)->(%p),stub!\n",this,lpbChanged);
return DD_OK;
}
static struct IDirectDrawClipper_VTable ddclipvt = {
(void*)1,
(void*)2,
IDirectDrawClipper_Release,
IDirectDrawClipper_GetClipList,
(void*)5,
(void*)6,
(void*)7,
IDirectDrawClipper_SetClipList,
IDirectDrawClipper_SetHwnd
IDirectDrawClipper_QueryInterface,
IDirectDrawClipper_AddRef,
IDirectDrawClipper_Release,
IDirectDrawClipper_GetClipList,
IDirectDrawClipper_GetHWnd,
IDirectDrawClipper_Initialize,
IDirectDrawClipper_IsClipListChanged,
IDirectDrawClipper_SetClipList,
IDirectDrawClipper_SetHwnd
};
/******************************************************************************
* IDirectDrawPalette
*/
@ -1303,7 +1401,7 @@ static HRESULT WINAPI IDirectDrawPalette_GetEntries(
palent[i].peFlags = this->palents[start+i].peFlags;
}
return 0;
return DD_OK;
}
static HRESULT WINAPI Xlib_IDirectDrawPalette_SetEntries(
@ -1332,7 +1430,7 @@ static HRESULT WINAPI Xlib_IDirectDrawPalette_SetEntries(
}
if (!this->cm) /* should not happen */ {
}
return 0;
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDrawPalette_SetEntries(
@ -1370,7 +1468,7 @@ static HRESULT WINAPI DGA_IDirectDrawPalette_SetEntries(
this->palents[start+i].peFlags = palent[i].peFlags;
}
TSXF86DGAInstallColormap(display,DefaultScreen(display),this->cm);
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -1455,7 +1553,7 @@ static HRESULT WINAPI IDirect3D_QueryInterface(
if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
*obj = this;
this->lpvtbl->fnAddRef(this);
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D d3d;
@ -1466,7 +1564,7 @@ static HRESULT WINAPI IDirect3D_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3dvt;
*obj = d3d;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D2 d3d;
@ -1477,7 +1575,7 @@ static HRESULT WINAPI IDirect3D_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3d2vt;
*obj = d3d;
return 0;
return S_OK;
}
FIXME(ddraw,"(%p):interface for IID %s NOT found!\n",this,xrefiid);
return OLE_E_ENUM_NOMORE;
@ -1528,19 +1626,56 @@ static HRESULT WINAPI IDirect3D_CreateDevice(LPDIRECT3D this,LPCLSID rclsid,LPDI
return E_FAIL; /* D3DERR_INVALID_DEVICE probably */
}
static HRESULT WINAPI IDirect3D_EnumDevices(
LPDIRECT3D this,
LPD3DENUMDEVICESCALLBACK a,
LPVOID b )
{
FIXME( ddraw,"(%p)->(%p,%p)\n",this,a,b);
return DD_OK;
}
static HRESULT WINAPI IDirect3D_CreateMaterial(
LPDIRECT3D this,
LPDIRECT3DMATERIAL* a,
IUnknown* b)
{
FIXME( ddraw,"(%p)->(%p,%p)\n",this,a,b);
return DD_OK;
}
static HRESULT WINAPI IDirect3D_CreateViewport(
LPDIRECT3D this,
LPDIRECT3DVIEWPORT* a,
IUnknown* b )
{
FIXME( ddraw,"(%p)->(%p,%p)\n",this,a,b);
return DD_OK;
}
static HRESULT WINAPI IDirect3D_FindDevice(
LPDIRECT3D this,
LPD3DFINDDEVICESEARCH a,
LPD3DFINDDEVICERESULT b )
{
FIXME( ddraw,"(%p)->(%p,%p)\n",this,a,b);
return DD_OK;
}
/*******************************************************************************
* IDirect3D
*/
static struct IDirect3D_VTable d3dvt = {
IDirect3D_QueryInterface,
IDirect3D_AddRef,
IDirect3D_Release,
IDirect3D_Initialize,
IDirect3D_CreateLight,
(void*)6,
(void*)7,
(void*)8,
IDirect3D_CreateDevice,
IDirect3D_QueryInterface,
IDirect3D_AddRef,
IDirect3D_Release,
IDirect3D_Initialize,
IDirect3D_EnumDevices,
IDirect3D_CreateLight,
IDirect3D_CreateMaterial,
IDirect3D_CreateViewport,
IDirect3D_FindDevice,
};
/*******************************************************************************
@ -1571,7 +1706,7 @@ static HRESULT WINAPI IDirect3D2_EnumDevices(
d2.dwFlags = 0;
cb((void*)&IID_IDirect3DHALDevice,"WINE Direct3D HAL","direct3d",&d1,&d2,context);
#endif
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirect3D2_CreateDevice(LPDIRECT3D2 this,REFCLSID rclsid,LPDIRECTDRAWSURFACE surf,LPDIRECT3DDEVICE2 *d3dev) {
@ -1588,15 +1723,15 @@ static HRESULT WINAPI IDirect3D2_CreateLight(LPDIRECT3D2 this,LPDIRECT3DLIGHT *l
}
static struct IDirect3D2_VTable d3d2vt = {
(void*)1,
(void*)2,
IDirect3D2_Release,
IDirect3D2_EnumDevices,
IDirect3D2_CreateLight,
(void*)6,
(void*)7,
(void*)8,
IDirect3D2_CreateDevice,
(void*)IDirect3D_QueryInterface,
(void*)IDirect3D_AddRef,
IDirect3D2_Release,
IDirect3D2_EnumDevices,
(void*)IDirect3D_EnumDevices,
(void*)IDirect3D_CreateLight,
(void*)IDirect3D_CreateMaterial,
(void*)IDirect3D_CreateViewport,
(void*)IDirect3D_FindDevice,
};
/*******************************************************************************
@ -1637,7 +1772,7 @@ static HRESULT common_off_screen_CreateSurface(LPDIRECTDRAW2 this,
TRACE(ddraw,"using system memory for a surface (%p)\n", lpdsf);
return 0;
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface(
@ -1657,15 +1792,16 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface(
*lpdsf = (LPDIRECTDRAWSURFACE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawSurface));
this->lpvtbl->fnAddRef(this);
(*lpdsf)->ref = 1;
(*lpdsf)->lpvtbl = (LPDIRECTDRAWSURFACE_VTABLE)&dga_dds3vt;
(*lpdsf)->s.ddraw = this;
(*lpdsf)->s.palette = NULL;
(*lpdsf)->t.dga.fb_height = -1; /* This is to have non-on screen surfaces freed */
if (!(lpddsd->dwFlags & DDSD_WIDTH))
if (!(lpddsd->dwFlags & DDSD_WIDTH))
lpddsd->dwWidth = this->d.width;
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
lpddsd->dwHeight = this->d.height;
/* Check if this a 'primary surface' or not */
@ -1737,7 +1873,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreateSurface(
return common_off_screen_CreateSurface(this, lpddsd, *lpdsf);
}
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -1834,10 +1970,10 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface(
(*lpdsf)->s.palette = NULL;
(*lpdsf)->t.xlib.image = NULL; /* This is for off-screen buffers */
if (!(lpddsd->dwFlags & DDSD_WIDTH))
lpddsd->dwWidth = this->d.width;
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
lpddsd->dwHeight = this->d.height;
if (!(lpddsd->dwFlags & DDSD_WIDTH))
lpddsd->dwWidth = this->d.width;
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
lpddsd->dwHeight = this->d.height;
/* Check if this a 'primary surface' or not */
if ((lpddsd->dwFlags & DDSD_CAPS) &&
@ -1905,7 +2041,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface(
return common_off_screen_CreateSurface(this, lpddsd, *lpdsf);
}
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_DuplicateSurface(
@ -1913,7 +2049,7 @@ static HRESULT WINAPI IDirectDraw2_DuplicateSurface(
) {
FIXME(ddraw,"(%p)->(%p,%p) simply copies\n",this,src,dst);
*dst = src; /* FIXME */
return 0;
return DD_OK;
}
/*
@ -1948,7 +2084,7 @@ static HRESULT WINAPI IDirectDraw2_SetCooperativeLevel(
TRACE(ddraw," cooperative level %s\n", dbg_str(ddraw));
}
this->d.mainWindow = hwnd;
return 0;
return DD_OK;
}
/* Small helper to either use the cooperative window or create a new
@ -2081,7 +2217,7 @@ static HRESULT WINAPI DGA_IDirectDraw_SetDisplayMode(
#ifdef RESTORE_SIGNALS
SIGNAL_InitEmulator();
#endif
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -2117,7 +2253,7 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode(
/* We don't have a context for this window. Host off the desktop */
if( !this->e.xlib.drawable )
this->e.xlib.drawable = WIN_GetDesktop()->window;
return 0;
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDraw2_GetCaps(
@ -2133,7 +2269,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_GetCaps(
caps2->dwCaps = 0xffffffff&~(DDCAPS_BANKSWITCHED); /* we can do anything */
caps2->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */
}
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return E_UNEXPECTED;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -2153,7 +2289,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_GetCaps(
caps2->ddsCaps.dwCaps = 0xffffffff; /* we can do anything */
}
/* END FIXME: Xlib */
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_CreateClipper(
@ -2165,7 +2301,7 @@ static HRESULT WINAPI IDirectDraw2_CreateClipper(
*lpddclip = (LPDIRECTDRAWCLIPPER)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawClipper));
(*lpddclip)->ref = 1;
(*lpddclip)->lpvtbl = &ddclipvt;
return 0;
return DD_OK;
}
static HRESULT WINAPI common_IDirectDraw2_CreatePalette(
@ -2182,7 +2318,14 @@ static HRESULT WINAPI common_IDirectDraw2_CreatePalette(
/* we don't want palettes in hicolor or truecolor */
(*lpddpal)->cm = 0;
}
return 0;
if (palent)
{
/* Initialize the palette based on the passed palent struct */
FIXME(ddraw,"needs to handle palent (%p)\n",palent);
}
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDraw2_CreatePalette(
@ -2193,7 +2336,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_CreatePalette(
res = common_IDirectDraw2_CreatePalette(this,x,palent,lpddpal,lpunk);
if (res != 0) return res;
(*lpddpal)->lpvtbl = &dga_ddpalvt;
return 0;
return DD_OK;
}
static HRESULT WINAPI Xlib_IDirectDraw2_CreatePalette(
@ -2201,18 +2344,21 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreatePalette(
) {
TRACE(ddraw,"(%p)->(%08lx,%p,%p,%p)\n",this,x,palent,lpddpal,lpunk);
*lpddpal = (LPDIRECTDRAWPALETTE)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectDrawPalette));
if (*lpddpal == NULL) return E_OUTOFMEMORY;
if (*lpddpal == NULL)
return E_OUTOFMEMORY;
(*lpddpal)->ref = 1;
(*lpddpal)->installed = 0;
if (palent)
FIXME(ddraw,"needs to handle palent (%p)\n",palent);
(*lpddpal)->lpvtbl = &xlib_ddpalvt;
(*lpddpal)->ddraw = (LPDIRECTDRAW)this;
this->lpvtbl->fnAddRef(this);
(*lpddpal)->cm = 0;
(*lpddpal)->lpvtbl = &xlib_ddpalvt;
return 0;
if (palent)
FIXME(ddraw,"needs to handle palent (%p)\n",palent);
return DD_OK;
}
static HRESULT WINAPI DGA_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) {
@ -2232,14 +2378,14 @@ static HRESULT WINAPI DGA_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) {
static HRESULT WINAPI Xlib_IDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 this) {
TRACE(ddraw, "(%p)->RestoreDisplayMode()\n", this);
Sleep(1000);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_WaitForVerticalBlank(
LPDIRECTDRAW2 this,DWORD x,HANDLE32 h
) {
TRACE(ddraw,"(%p)->(0x%08lx,0x%08x)\n",this,x,h);
return 0;
return DD_OK;
}
static ULONG WINAPI IDirectDraw2_AddRef(LPDIRECTDRAW2 this) {
@ -2295,19 +2441,19 @@ static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface(
if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
*obj = this;
this->lpvtbl->fnAddRef(this);
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirectDraw,refiid,sizeof(IID_IDirectDraw))) {
this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&dga_ddvt;
this->lpvtbl->fnAddRef(this);
*obj = this;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirectDraw2,refiid,sizeof(IID_IDirectDraw2))) {
this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&dga_dd2vt;
this->lpvtbl->fnAddRef(this);
*obj = this;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D d3d;
@ -2318,7 +2464,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3dvt;
*obj = d3d;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D2 d3d;
@ -2329,7 +2475,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3d2vt;
*obj = d3d;
return 0;
return S_OK;
}
WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",this,xrefiid);
return OLE_E_ENUM_NOMORE;
@ -2345,19 +2491,19 @@ static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface(
if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
*obj = this;
this->lpvtbl->fnAddRef(this);
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirectDraw,refiid,sizeof(IID_IDirectDraw))) {
this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&xlib_ddvt;
this->lpvtbl->fnAddRef(this);
*obj = this;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirectDraw2,refiid,sizeof(IID_IDirectDraw2))) {
this->lpvtbl = (LPDIRECTDRAW2_VTABLE)&xlib_dd2vt;
this->lpvtbl->fnAddRef(this);
*obj = this;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D d3d;
@ -2368,7 +2514,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3dvt;
*obj = d3d;
return 0;
return S_OK;
}
if (!memcmp(&IID_IDirect3D2,refiid,sizeof(IID_IDirect3D))) {
LPDIRECT3D2 d3d;
@ -2379,7 +2525,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_QueryInterface(
this->lpvtbl->fnAddRef(this);
d3d->lpvtbl = &d3d2vt;
*obj = d3d;
return 0;
return S_OK;
}
WARN(ddraw,"(%p):interface for IID %s _NOT_ found!\n",this,xrefiid);
return OLE_E_ENUM_NOMORE;
@ -2390,7 +2536,7 @@ static HRESULT WINAPI IDirectDraw2_GetVerticalBlankStatus(
) {
TRACE(ddraw,"(%p)->(%p)\n",this,status);
*status = TRUE;
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_EnumDisplayModes(
@ -2456,13 +2602,13 @@ static HRESULT WINAPI IDirectDraw2_EnumDisplayModes(
ddsfd.dwWidth = screenWidth;
ddsfd.dwHeight = screenHeight;
TRACE(ddraw," enumerating (%ldx%ldx%d)\n",ddsfd.dwWidth,ddsfd.dwHeight,depths[i]);
if (!modescb(&ddsfd,context)) return 0;
if (!modescb(&ddsfd,context)) return DD_OK;
for (j=0;j<sizeof(modes)/sizeof(modes[0]);j++) {
ddsfd.dwWidth = modes[j].w;
ddsfd.dwHeight = modes[j].h;
TRACE(ddraw," enumerating (%ldx%ldx%d)\n",ddsfd.dwWidth,ddsfd.dwHeight,depths[i]);
if (!modescb(&ddsfd,context)) return 0;
if (!modescb(&ddsfd,context)) return DD_OK;
}
if (!(dwFlags & DDEDM_STANDARDVGAMODES)) {
@ -2471,7 +2617,7 @@ static HRESULT WINAPI IDirectDraw2_EnumDisplayModes(
ddsfd.dwHeight = 200;
ddsfd.dwWidth = 320;
TRACE(ddraw," enumerating (320x200x%d)\n",depths[i]);
if (!modescb(&ddsfd,context)) return 0;
if (!modescb(&ddsfd,context)) return DD_OK;
}
}
return DD_OK;
@ -2523,7 +2669,7 @@ static HRESULT WINAPI IDirectDraw2_GetMonitorFrequency(
) {
FIXME(ddraw,"(%p)->(%p) returns 60 Hz always\n",this,freq);
*freq = 60*100; /* 60 Hz */
return 0;
return DD_OK;
}
/* what can we directly decompress? */
@ -2531,14 +2677,16 @@ static HRESULT WINAPI IDirectDraw2_GetFourCCCodes(
LPDIRECTDRAW2 this,LPDWORD x,LPDWORD y
) {
FIXME(ddraw,"(%p,%p,%p), stub\n",this,x,y);
return 0;
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_EnumSurfaces(
LPDIRECTDRAW2 this,DWORD x,LPDDSURFACEDESC ddsfd,LPVOID context,LPDDENUMSURFACESCALLBACK ddsfcb
) {
FIXME(ddraw,"(%p)->(0x%08lx,%p,%p,%p),stub!\n",this,x,ddsfd,context,ddsfcb);
return 0;
)
{
FIXME(ddraw,"(%p)->(0x%08lx,%p,%p,%p),stub!\n",this,x,ddsfd,context,ddsfcb);
return DD_OK;
}
static HRESULT WINAPI IDirectDraw2_Compact(
@ -2635,7 +2783,7 @@ static HRESULT WINAPI DGA_IDirectDraw2_GetAvailableVidMem(
);
if (total) *total = this->e.dga.fb_memsize * 1024;
if (free) *free = this->e.dga.fb_memsize * 1024;
return 0;
return DD_OK;
}
static HRESULT WINAPI Xlib_IDirectDraw2_GetAvailableVidMem(
@ -2646,7 +2794,7 @@ static HRESULT WINAPI Xlib_IDirectDraw2_GetAvailableVidMem(
);
if (total) *total = 2048 * 1024;
if (free) *free = 2048 * 1024;
return 0;
return DD_OK;
}
static IDirectDraw2_VTable dga_dd2vt = {
@ -2818,7 +2966,7 @@ HRESULT WINAPI DGA_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter)
SIGNAL_InitEmulator();
#endif
return 0;
return DD_OK;
#else /* defined(HAVE_LIBXXF86DGA) */
return DDERR_INVALIDDIRECTDRAWGUID;
#endif /* defined(HAVE_LIBXXF86DGA) */
@ -2863,7 +3011,7 @@ HRESULT WINAPI Xlib_DirectDrawCreate( LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter)
TRACE(ddraw, "Using XShm extesion.\n");
#endif
return 0;
return DD_OK;
}
HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN pUnkOuter ) {
@ -2875,7 +3023,7 @@ HRESULT WINAPI DirectDrawCreate( LPGUID lpGUID, LPDIRECTDRAW *lplpDD, LPUNKNOWN
if (HIWORD(lpGUID))
WINE_StringFromCLSID(lpGUID,xclsid);
else {
sprintf(xclsid,"<guid-%0x08x>",(int)lpGUID);
sprintf(xclsid,"<guid-0x%08x>",(int)lpGUID);
lpGUID = NULL;
}

View File

@ -620,6 +620,13 @@ typedef struct _DDPIXELFORMAT {
#define DDSD_LINEARSIZE 0x00080000
#define DDSD_ALL 0x000ff9ee
/* EnumSurfaces flags */
#define DDENUMSURFACES_ALL 0x00000001
#define DDENUMSURFACES_MATCH 0x00000002
#define DDENUMSURFACES_NOMATCH 0x00000004
#define DDENUMSURFACES_CANBECREATED 0x00000008
#define DDENUMSURFACES_DOESEXIST 0x00000010
/* SetDisplayMode flags */
#define DDSDM_STANDARDVGAMODE 0x00000001
@ -987,6 +994,9 @@ struct _common_directdrawsurface {
LPDIRECTDRAWSURFACE3 backbuffer;
DDSURFACEDESC surface_desc;
DDCOLORKEY ckDestOverlay, ckSrcOverlay;
DDCOLORKEY ckDestBlt, ckSrcBlt;
};
struct _dga_directdrawsurface {