wined3d: Merge the IWineD3DSurface::ReleaseDC() implementations.

This commit is contained in:
Henri Verbeet 2011-04-27 20:21:41 +02:00 committed by Alexandre Julliard
parent dcaca7225b
commit a5febcf7a1
1 changed files with 32 additions and 54 deletions

View File

@ -3979,6 +3979,36 @@ static HRESULT WINAPI IWineD3DBaseSurfaceImpl_GetDC(IWineD3DSurface *iface, HDC
return WINED3D_OK;
}
static HRESULT WINAPI IWineD3DBaseSurfaceImpl_ReleaseDC(IWineD3DSurface *iface, HDC dc)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)iface;
TRACE("iface %p, dc %p.\n", iface, dc);
if (!(surface->flags & SFLAG_DCINUSE))
return WINEDDERR_NODC;
if (surface->hDC != dc)
{
WARN("Application tries to release invalid DC %p, surface DC is %p.\n",
dc, surface->hDC);
return WINEDDERR_NODC;
}
if ((surface->flags & SFLAG_PBO) && surface->resource.allocatedMemory)
{
/* Copy the contents of the DIB over to the PBO. */
memcpy(surface->resource.allocatedMemory, surface->dib.bitmap_data, surface->dib.bitmap_size);
}
/* We locked first, so unlock now. */
IWineD3DSurface_Unmap(iface);
surface->flags &= ~SFLAG_DCINUSE;
return WINED3D_OK;
}
/* ****************************************************
IWineD3DSurface IWineD3DResource parts follow
**************************************************** */
@ -4469,34 +4499,6 @@ static void flush_to_framebuffer_drawpixels(IWineD3DSurfaceImpl *surface,
context_release(context);
}
static HRESULT WINAPI IWineD3DSurfaceImpl_ReleaseDC(IWineD3DSurface *iface, HDC hDC)
{
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
TRACE("(%p)->(%p)\n",This,hDC);
if (!(This->flags & SFLAG_DCINUSE))
return WINEDDERR_NODC;
if (This->hDC !=hDC) {
WARN("Application tries to release an invalid DC(%p), surface dc is %p\n", hDC, This->hDC);
return WINEDDERR_NODC;
}
if ((This->flags & SFLAG_PBO) && This->resource.allocatedMemory)
{
/* Copy the contents of the DIB over to the PBO */
memcpy(This->resource.allocatedMemory, This->dib.bitmap_data, This->dib.bitmap_size);
}
/* we locked first, so unlock now */
IWineD3DSurface_Unmap(iface);
This->flags &= ~SFLAG_DCINUSE;
return WINED3D_OK;
}
/* ******************************************************
IWineD3DSurface Internal (No mapping to directx api) parts follow
****************************************************** */
@ -7033,7 +7035,7 @@ const IWineD3DSurfaceVtbl IWineD3DSurface_Vtbl =
IWineD3DBaseSurfaceImpl_Map,
IWineD3DBaseSurfaceImpl_Unmap,
IWineD3DBaseSurfaceImpl_GetDC,
IWineD3DSurfaceImpl_ReleaseDC,
IWineD3DBaseSurfaceImpl_ReleaseDC,
IWineD3DSurfaceImpl_Flip,
IWineD3DSurfaceImpl_Blt,
IWineD3DBaseSurfaceImpl_GetBltStatus,
@ -7333,30 +7335,6 @@ static HRESULT WINAPI IWineGDISurfaceImpl_Flip(IWineD3DSurface *iface, IWineD3DS
return hr;
}
static HRESULT WINAPI IWineGDISurfaceImpl_ReleaseDC(IWineD3DSurface *iface, HDC dc)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)iface;
TRACE("iface %p, dc %p.\n", iface, dc);
if (!(surface->flags & SFLAG_DCINUSE))
return WINEDDERR_NODC;
if (surface->hDC != dc)
{
WARN("Application tries to release invalid DC %p, surface DC is %p.\n",
dc, surface->hDC);
return WINEDDERR_NODC;
}
/* We locked first, so unlock now. */
IWineD3DSurface_Unmap(iface);
surface->flags &= ~SFLAG_DCINUSE;
return WINED3D_OK;
}
static HRESULT WINAPI IWineGDISurfaceImpl_SetMem(IWineD3DSurface *iface, void *mem)
{
IWineD3DSurfaceImpl *surface = (IWineD3DSurfaceImpl *)iface;
@ -7429,7 +7407,7 @@ static const IWineD3DSurfaceVtbl IWineGDISurface_Vtbl =
IWineD3DBaseSurfaceImpl_Map,
IWineD3DBaseSurfaceImpl_Unmap,
IWineD3DBaseSurfaceImpl_GetDC,
IWineGDISurfaceImpl_ReleaseDC,
IWineD3DBaseSurfaceImpl_ReleaseDC,
IWineGDISurfaceImpl_Flip,
IWineD3DBaseSurfaceImpl_Blt,
IWineD3DBaseSurfaceImpl_GetBltStatus,