mirror of
https://github.com/narzoul/DDrawCompat
synced 2024-12-30 08:55:36 +01:00
Fixed GetAttachedSurface when DDSCAPS_3DDEVICE is suppressed
Fixes a crash in Colin McRae Rally (#232).
This commit is contained in:
parent
3b8ff67cc4
commit
383ffd28b9
@ -60,6 +60,7 @@ namespace
|
|||||||
SET_COMPAT_METHOD(Blt);
|
SET_COMPAT_METHOD(Blt);
|
||||||
SET_COMPAT_METHOD(BltFast);
|
SET_COMPAT_METHOD(BltFast);
|
||||||
SET_COMPAT_METHOD(Flip);
|
SET_COMPAT_METHOD(Flip);
|
||||||
|
SET_COMPAT_METHOD(GetAttachedSurface);
|
||||||
SET_COMPAT_METHOD(GetCaps);
|
SET_COMPAT_METHOD(GetCaps);
|
||||||
SET_COMPAT_METHOD(GetDC);
|
SET_COMPAT_METHOD(GetDC);
|
||||||
SET_COMPAT_METHOD(GetPalette);
|
SET_COMPAT_METHOD(GetPalette);
|
||||||
|
@ -150,6 +150,21 @@ namespace DDraw
|
|||||||
return getOrigVtable(This).Flip(This, lpDDSurfaceTargetOverride, dwFlags);
|
return getOrigVtable(This).Flip(This, lpDDSurfaceTargetOverride, dwFlags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TSurface>
|
||||||
|
HRESULT SurfaceImpl<TSurface>::GetAttachedSurface(TSurface* This, TDdsCaps* lpDDSCaps, TSurface** lplpDDAttachedSurface)
|
||||||
|
{
|
||||||
|
TDdsCaps caps = {};
|
||||||
|
if (lpDDSCaps && (lpDDSCaps->dwCaps & DDSCAPS_3DDEVICE) &&
|
||||||
|
SUCCEEDED(getOrigVtable(This).GetCaps(This, &caps)) &&
|
||||||
|
!(caps.dwCaps & DDSCAPS_3DDEVICE) && (m_data->m_origCaps & DDSCAPS_3DDEVICE))
|
||||||
|
{
|
||||||
|
caps = *lpDDSCaps;
|
||||||
|
caps.dwCaps &= ~DDSCAPS_3DDEVICE;
|
||||||
|
return getOrigVtable(This).GetAttachedSurface(This, &caps, lplpDDAttachedSurface);
|
||||||
|
}
|
||||||
|
return getOrigVtable(This).GetAttachedSurface(This, lpDDSCaps, lplpDDAttachedSurface);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TSurface>
|
template <typename TSurface>
|
||||||
TSurface* SurfaceImpl<TSurface>::getBltSrc(TSurface* src)
|
TSurface* SurfaceImpl<TSurface>::getBltSrc(TSurface* src)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@ namespace DDraw
|
|||||||
virtual HRESULT BltFast(TSurface* This, DWORD dwX, DWORD dwY,
|
virtual HRESULT BltFast(TSurface* This, DWORD dwX, DWORD dwY,
|
||||||
TSurface* lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans);
|
TSurface* lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans);
|
||||||
virtual HRESULT Flip(TSurface* This, TSurface* lpDDSurfaceTargetOverride, DWORD dwFlags);
|
virtual HRESULT Flip(TSurface* This, TSurface* lpDDSurfaceTargetOverride, DWORD dwFlags);
|
||||||
|
virtual HRESULT GetAttachedSurface(TSurface* This, TDdsCaps* lpDDSCaps, TSurface** lplpDDAttachedSurface);
|
||||||
virtual HRESULT GetCaps(TSurface* This, TDdsCaps* lpDDSCaps);
|
virtual HRESULT GetCaps(TSurface* This, TDdsCaps* lpDDSCaps);
|
||||||
virtual HRESULT GetDC(TSurface* This, HDC* lphDC);
|
virtual HRESULT GetDC(TSurface* This, HDC* lphDC);
|
||||||
virtual HRESULT GetPalette(TSurface* This, LPDIRECTDRAWPALETTE* lplpDDPalette);
|
virtual HRESULT GetPalette(TSurface* This, LPDIRECTDRAWPALETTE* lplpDDPalette);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user