wined3d: Copy the DIB to sysmem when PIN_SYSMEM is set.
This commit is contained in:
parent
a373c35371
commit
19f45af19c
|
@ -3234,8 +3234,19 @@ HRESULT CDECL wined3d_surface_releasedc(struct wined3d_surface *surface, HDC dc)
|
|||
surface->resource.map_count--;
|
||||
surface->flags &= ~SFLAG_DCINUSE;
|
||||
|
||||
if (surface->map_binding == WINED3D_LOCATION_USER_MEMORY)
|
||||
surface_load_location(surface, WINED3D_LOCATION_USER_MEMORY);
|
||||
if (surface->map_binding == WINED3D_LOCATION_USER_MEMORY || (surface->flags & SFLAG_PIN_SYSMEM
|
||||
&& surface->map_binding != WINED3D_LOCATION_DIB))
|
||||
{
|
||||
/* The game Salammbo modifies the surface contents without mapping the surface between
|
||||
* a GetDC/ReleaseDC operation and flipping the surface. If the DIB remains the active
|
||||
* copy and is copied to the screen, this update, which draws the mouse pointer, is lost.
|
||||
* Do not only copy the DIB to the map location, but also make sure the map location is
|
||||
* copied back to the DIB in the next getdc call.
|
||||
*
|
||||
* The same consideration applies to user memory surfaces. */
|
||||
surface_load_location(surface, surface->map_binding);
|
||||
surface_invalidate_location(surface, WINED3D_LOCATION_DIB);
|
||||
}
|
||||
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue