mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 20:59:54 +00:00
ddraw/wined3d: IDirectDrawSurface7::SetSurfaceDesc corrections.
This commit is contained in:
parent
8059576c8b
commit
495e46197a
@ -1860,48 +1860,61 @@ IDirectDrawSurfaceImpl_SetSurfaceDesc(IDirectDrawSurface7 *iface,
|
||||
DWORD Flags)
|
||||
{
|
||||
ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawSurface7, iface);
|
||||
BYTE *newSurface = NULL;
|
||||
DWORD newSize = 0;
|
||||
WINED3DFORMAT newFormat = WINED3DFMT_UNKNOWN;
|
||||
HRESULT hr;
|
||||
FIXME("(%p)->(%p,%lx)\n", This, DDSD, Flags);
|
||||
assert(0);
|
||||
TRACE("(%p)->(%p,%lx)\n", This, DDSD, Flags);
|
||||
|
||||
if(!DDSD)
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
||||
if (DDSD->dwFlags & DDSD_LPSURFACE && DDSD->lpSurface)
|
||||
{
|
||||
ERR("Setting the surface memory isn't supported yet\n");
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
||||
}
|
||||
if (DDSD->dwFlags & DDSD_PIXELFORMAT)
|
||||
{
|
||||
newFormat = PixelFormat_DD2WineD3D(&DDSD->u4.ddpfPixelFormat);
|
||||
|
||||
if(newFormat == WINED3DFMT_UNKNOWN)
|
||||
{
|
||||
ERR("Requested to set an unknown pixelformat\n");
|
||||
return DDERR_INVALIDPARAMS;
|
||||
}
|
||||
if(newFormat != PixelFormat_DD2WineD3D(&This->surface_desc.u4.ddpfPixelFormat) )
|
||||
{
|
||||
hr = IWineD3DSurface_SetFormat(This->WineD3DSurface,
|
||||
newFormat);
|
||||
if(hr != DD_OK) return hr;
|
||||
}
|
||||
}
|
||||
if (DDSD->dwFlags & DDSD_LPSURFACE)
|
||||
if (DDSD->dwFlags & DDSD_CKDESTOVERLAY)
|
||||
{
|
||||
newSurface = DDSD->lpSurface;
|
||||
newSize = DDSD->u1.dwLinearSize;
|
||||
/* to avoid unpredictable things */
|
||||
assert(newSize != 0);
|
||||
IWineD3DSurface_SetColorKey(This->WineD3DSurface,
|
||||
DDCKEY_DESTOVERLAY,
|
||||
&DDSD->u3.ddckCKDestOverlay);
|
||||
}
|
||||
if (DDSD->dwFlags & DDSD_CKDESTBLT)
|
||||
{
|
||||
IWineD3DSurface_SetColorKey(This->WineD3DSurface,
|
||||
DDCKEY_DESTBLT,
|
||||
&DDSD->ddckCKDestBlt);
|
||||
}
|
||||
if (DDSD->dwFlags & DDSD_CKSRCOVERLAY)
|
||||
{
|
||||
IWineD3DSurface_SetColorKey(This->WineD3DSurface,
|
||||
DDCKEY_SRCOVERLAY,
|
||||
&DDSD->ddckCKSrcOverlay);
|
||||
}
|
||||
if (DDSD->dwFlags & DDSD_CKSRCBLT)
|
||||
{
|
||||
IWineD3DSurface_SetColorKey(This->WineD3DSurface,
|
||||
DDCKEY_SRCBLT,
|
||||
&DDSD->ddckCKSrcBlt);
|
||||
}
|
||||
|
||||
/* Better: Use SetFormat */
|
||||
hr = IWineD3DSurface_SetPixelFormat(This->WineD3DSurface,
|
||||
newFormat,
|
||||
newSurface,
|
||||
newSize);
|
||||
if(hr != DD_OK) return hr;
|
||||
|
||||
/* Store the new data. Not really necessary, as WineD3D stores it too,
|
||||
* but for completeness
|
||||
*/
|
||||
if(newFormat != WINED3DFMT_UNKNOWN)
|
||||
{
|
||||
This->surface_desc.dwFlags |= DDSD_PIXELFORMAT;
|
||||
This->surface_desc.u4.ddpfPixelFormat = DDSD->u4.ddpfPixelFormat;
|
||||
}
|
||||
if(newSurface != NULL)
|
||||
{
|
||||
This->surface_desc.lpSurface = newSurface;
|
||||
This->surface_desc.u1.dwLinearSize = newSize;
|
||||
}
|
||||
This->surface_desc = *DDSD;
|
||||
|
||||
return DD_OK;
|
||||
}
|
||||
|
@ -2536,11 +2536,6 @@ HRESULT WINAPI IWineD3DSurfaceImpl_BltFast(IWineD3DSurface *iface, DWORD dstx, D
|
||||
return IWineGDISurfaceImpl_BltFast(iface, dstx, dsty, Source, rsrc, trans);
|
||||
}
|
||||
|
||||
HRESULT WINAPI IWineD3DSurfaceImpl_SetPixelFormat(IWineD3DSurface *iface, WINED3DFORMAT Format, BYTE *Surface, DWORD Size) {
|
||||
FIXME("This is unimplemented for now(d3d7 merge)\n");
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
HRESULT WINAPI IWineD3DSurfaceImpl_GetPalette(IWineD3DSurface *iface, IWineD3DPalette **Pal) {
|
||||
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *) iface;
|
||||
TRACE("(%p)->(%p)\n", This, Pal);
|
||||
@ -2790,7 +2785,6 @@ const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl =
|
||||
IWineD3DSurfaceImpl_IsLost,
|
||||
IWineD3DSurfaceImpl_Restore,
|
||||
IWineD3DSurfaceImpl_BltFast,
|
||||
IWineD3DSurfaceImpl_SetPixelFormat,
|
||||
IWineD3DSurfaceImpl_GetPalette,
|
||||
IWineD3DSurfaceImpl_SetPalette,
|
||||
IWineD3DSurfaceImpl_RealizePalette,
|
||||
|
@ -1538,7 +1538,6 @@ const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl =
|
||||
IWineD3DSurfaceImpl_IsLost,
|
||||
IWineD3DSurfaceImpl_Restore,
|
||||
IWineGDISurfaceImpl_BltFast,
|
||||
IWineD3DSurfaceImpl_SetPixelFormat,
|
||||
IWineD3DSurfaceImpl_GetPalette,
|
||||
IWineD3DSurfaceImpl_SetPalette,
|
||||
IWineD3DSurfaceImpl_RealizePalette,
|
||||
|
@ -1133,7 +1133,6 @@ DECLARE_INTERFACE_(IWineD3DSurface,IWineD3DResource)
|
||||
STDMETHOD(IsLost)(THIS) PURE;
|
||||
STDMETHOD(Restore)(THIS) PURE;
|
||||
STDMETHOD(BltFast)(THIS_ DWORD dstx, DWORD dsty, IWineD3DSurface *src, RECT *rsrc, DWORD trans) PURE;
|
||||
STDMETHOD(SetPixelFormat)(THIS_ WINED3DFORMAT Format, BYTE *Surface, DWORD Size) PURE;
|
||||
STDMETHOD(GetPalette)(THIS_ struct IWineD3DPalette **Palette) PURE;
|
||||
STDMETHOD(SetPalette)(THIS_ struct IWineD3DPalette *Palette) PURE;
|
||||
STDMETHOD(RealizePalette)(THIS) PURE;
|
||||
@ -1185,7 +1184,6 @@ DECLARE_INTERFACE_(IWineD3DSurface,IWineD3DResource)
|
||||
#define IWineD3DSurface_IsLost(p) (p)->lpVtbl->IsLost(p)
|
||||
#define IWineD3DSurface_Restore(p) (p)->lpVtbl->Restore(p)
|
||||
#define IWineD3DSurface_BltFast(p,a,b,c,d,e) (p)->lpVtbl->BltFast(p,a,b,c,d,e)
|
||||
#define IWineD3DSurface_SetPixelFormat(p,a,b,c) (p)->lpVtbl->SetPixelFormat(p,a,b,c)
|
||||
#define IWineD3DSurface_GetPalette(p, a) (p)->lpVtbl->GetPalette(p, a)
|
||||
#define IWineD3DSurface_SetPalette(p, a) (p)->lpVtbl->SetPalette(p, a)
|
||||
#define IWineD3DSurface_RealizePalette(p) (p)->lpVtbl->RealizePalette(p)
|
||||
|
Loading…
Reference in New Issue
Block a user