mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Added automatic surface restoration for D3D buffers
Some D3D buffers (e.g. vertex buffers) use DirectDraw surfaces for storage. Since a previous fix for forcing the emulated pixel format on surfaces broke Alt-Tabbing in Messiah, this fixes it by automatically restoring D3D buffers during Lock. If this causes other issues, the only alternative seems to be forcing these surfaces to system memory (which was the previous broken behavior).
This commit is contained in:
parent
db02afefa9
commit
640dbf6412
@ -521,7 +521,21 @@ HRESULT STDMETHODCALLTYPE CompatDirectDrawSurface<TSurface>::Lock(
|
||||
{
|
||||
return DDERR_SURFACELOST;
|
||||
}
|
||||
return s_origVtable.Lock(This, lpDestRect, lpDDSurfaceDesc, dwFlags, hEvent);
|
||||
|
||||
HRESULT result = s_origVtable.Lock(This, lpDestRect, lpDDSurfaceDesc, dwFlags, hEvent);
|
||||
if (DDERR_SURFACELOST == result)
|
||||
{
|
||||
TSurfaceDesc desc = {};
|
||||
desc.dwSize = sizeof(desc);
|
||||
if (SUCCEEDED(s_origVtable.GetSurfaceDesc(This, &desc)) && !(desc.dwFlags & DDSD_HEIGHT))
|
||||
{
|
||||
// Fixes missing handling for lost vertex buffers in Messiah
|
||||
s_origVtable.Restore(This);
|
||||
// Still, pass back DDERR_SURFACELOST to the application in case it handles it
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename TSurface>
|
||||
|
Loading…
x
Reference in New Issue
Block a user