static HRESULT STDMETHODCALLTYPE d3d10_texture2d_Map(ID3D10Texture2D *iface, UINT sub_resource_idx, D3D10_MAP map_type, UINT map_flags, D3D10_MAPPED_TEXTURE2D *mapped_texture) { struct d3d10_texture2d *texture = impl_from_ID3D10Texture2D(iface); struct wined3d_map_desc wined3d_map_desc; struct wined3d_resource *sub_resource; HRESULT hr; TRACE("iface %p, sub_resource_idx %u, map_type %u, map_flags %#x, mapped_texture %p.\n", iface, sub_resource_idx, map_type, map_flags, mapped_texture); if (map_type != D3D10_MAP_READ_WRITE) FIXME("Ignoring map_type %#x.\n", map_type); if (map_flags) FIXME("Ignoring map_flags %#x.\n", map_flags); if (!(sub_resource = wined3d_texture_get_sub_resource(texture->wined3d_texture, sub_resource_idx))) hr = E_INVALIDARG; else if (SUCCEEDED(hr = wined3d_surface_map(wined3d_surface_from_resource(sub_resource), &wined3d_map_desc, NULL, 0))) { mapped_texture->pData = wined3d_map_desc.data; mapped_texture->RowPitch = wined3d_map_desc.row_pitch; } return hr; }
static HRESULT WINAPI IDirect3DSurface8Impl_LockRect(IDirect3DSurface8 *iface, D3DLOCKED_RECT *pLockedRect, const RECT *pRect, DWORD Flags) { IDirect3DSurface8Impl *This = impl_from_IDirect3DSurface8(iface); HRESULT hr; TRACE("iface %p, locked_rect %p, rect %p, flags %#x.\n", iface, pLockedRect, pRect, Flags); wined3d_mutex_lock(); if (pRect) { D3DSURFACE_DESC desc; IDirect3DSurface8_GetDesc(iface, &desc); if ((pRect->left < 0) || (pRect->top < 0) || (pRect->left >= pRect->right) || (pRect->top >= pRect->bottom) || (pRect->right > desc.Width) || (pRect->bottom > desc.Height)) { WARN("Trying to lock an invalid rectangle, returning D3DERR_INVALIDCALL\n"); wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } } hr = wined3d_surface_map(This->wined3d_surface, (WINED3DLOCKED_RECT *)pLockedRect, pRect, Flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI IDirect3DSurface9Impl_LockRect(IDirect3DSurface9 *iface, D3DLOCKED_RECT *pLockedRect, const RECT *pRect, DWORD Flags) { IDirect3DSurface9Impl *This = impl_from_IDirect3DSurface9(iface); HRESULT hr; TRACE("iface %p, locked_rect %p, rect %p, flags %#x.\n", iface, pLockedRect, pRect, Flags); wined3d_mutex_lock(); hr = wined3d_surface_map(This->wined3d_surface, (WINED3DLOCKED_RECT *)pLockedRect, pRect, Flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d8_surface_LockRect(IDirect3DSurface8 *iface, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) { struct d3d8_surface *surface = impl_from_IDirect3DSurface8(iface); struct wined3d_map_desc map_desc; HRESULT hr; TRACE("iface %p, locked_rect %p, rect %s, flags %#x.\n", iface, locked_rect, wine_dbgstr_rect(rect), flags); wined3d_mutex_lock(); if (rect) { D3DSURFACE_DESC desc; IDirect3DSurface8_GetDesc(iface, &desc); if ((rect->left < 0) || (rect->top < 0) || (rect->left >= rect->right) || (rect->top >= rect->bottom) || (rect->right > desc.Width) || (rect->bottom > desc.Height)) { WARN("Trying to lock an invalid rectangle, returning D3DERR_INVALIDCALL\n"); wined3d_mutex_unlock(); return D3DERR_INVALIDCALL; } } hr = wined3d_surface_map(surface->wined3d_surface, &map_desc, rect, flags); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) { locked_rect->Pitch = map_desc.row_pitch; locked_rect->pBits = map_desc.data; } else { locked_rect->Pitch = 0; locked_rect->pBits = NULL; } return hr; }
static HRESULT WINAPI d3d9_surface_LockRect(IDirect3DSurface9 *iface, D3DLOCKED_RECT *locked_rect, const RECT *rect, DWORD flags) { struct d3d9_surface *surface = impl_from_IDirect3DSurface9(iface); struct wined3d_map_desc map_desc; HRESULT hr; TRACE("iface %p, locked_rect %p, rect %s, flags %#x.\n", iface, locked_rect, wine_dbgstr_rect(rect), flags); wined3d_mutex_lock(); hr = wined3d_surface_map(surface->wined3d_surface, &map_desc, rect, flags); wined3d_mutex_unlock(); locked_rect->Pitch = map_desc.row_pitch; locked_rect->pBits = map_desc.data; return hr; }