diff --git a/Dllmain/BuildNo.rc b/Dllmain/BuildNo.rc index 63b4813b..66c96da6 100644 --- a/Dllmain/BuildNo.rc +++ b/Dllmain/BuildNo.rc @@ -1 +1 @@ -#define BUILD_NUMBER 7215 +#define BUILD_NUMBER 7216 diff --git a/d3d9/IDirect3DDevice9Ex.cpp b/d3d9/IDirect3DDevice9Ex.cpp index 4c42aa63..27d3dc3f 100644 --- a/d3d9/IDirect3DDevice9Ex.cpp +++ b/d3d9/IDirect3DDevice9Ex.cpp @@ -684,9 +684,43 @@ void m_IDirect3DDevice9Ex::SetGammaRamp(THIS_ UINT iSwapChain, DWORD Flags, CONS { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; - ProxyInterface->SetGammaRamp(iSwapChain, Flags, pRamp); + if (!pRamp) + { + return; + } + + bool FormatsMatch = false; + do { + IDirect3DSurface9* pRenderTarget = nullptr; + if (FAILED(ProxyInterface->GetRenderTarget(0, &pRenderTarget))) + { + break; + } + + IDirect3DSurface9* pBackBuffer = nullptr; + if (FAILED(ProxyInterface->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer))) + { + pRenderTarget->Release(); + break; + } + + D3DSURFACE_DESC renderTargetDesc, backBufferDesc; + pRenderTarget->GetDesc(&renderTargetDesc); + pBackBuffer->GetDesc(&backBufferDesc); + + FormatsMatch = (renderTargetDesc.Format == backBufferDesc.Format); + + pRenderTarget->Release(); + pBackBuffer->Release(); + + } while (false); + + if (FormatsMatch) + { + ProxyInterface->SetGammaRamp(iSwapChain, Flags, pRamp); + } - if (Config.EnableWindowMode && pRamp) + if (!FormatsMatch || (Config.EnableWindowMode && Flags == D3DSGR_NO_CALIBRATION)) { // Get the device context for the screen HDC hdc = ::GetDC(SHARED.DeviceWindow); diff --git a/ddraw/IDirectDrawX.cpp b/ddraw/IDirectDrawX.cpp index 839a154f..c00dc2b1 100644 --- a/ddraw/IDirectDrawX.cpp +++ b/ddraw/IDirectDrawX.cpp @@ -4137,13 +4137,13 @@ HRESULT m_IDirectDrawX::GetD9Gamma(DWORD dwFlags, LPDDGAMMARAMP lpRampData) return DDERR_GENERIC; } - if (!presParams.Windowed) + if (!lpRampData) { - d3d9Device->GetGammaRamp(dwFlags, (D3DGAMMARAMP*)lpRampData); - return DD_OK; + return DDERR_INVALIDPARAMS; } - return D3DERR_INVALIDCALL; + d3d9Device->GetGammaRamp(dwFlags, (D3DGAMMARAMP*)lpRampData); + return DD_OK; } HRESULT m_IDirectDrawX::SetD9Gamma(DWORD dwFlags, LPDDGAMMARAMP lpRampData) @@ -4154,6 +4154,11 @@ HRESULT m_IDirectDrawX::SetD9Gamma(DWORD dwFlags, LPDDGAMMARAMP lpRampData) return DDERR_GENERIC; } + if (!lpRampData) + { + return DDERR_INVALIDPARAMS; + } + d3d9Device->SetGammaRamp(0, dwFlags, (D3DGAMMARAMP*)lpRampData); return DD_OK; }