Skip to content

Commit 7a0b8f0

Browse files
committed
Addendum to e556d42
1 parent e556d42 commit 7a0b8f0

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

Client/core/DXHook/CDirect3DEvents9.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ void CDirect3DEvents9::OnBeginScene(IDirect3DDevice9* pDevice)
7373

7474
bool CDirect3DEvents9::OnEndScene(IDirect3DDevice9* pDevice)
7575
{
76+
CloseActiveShader();
7677
return true;
7778
}
7879

@@ -94,22 +95,22 @@ void CDirect3DEvents9::OnInvalidate(IDirect3DDevice9* pDevice)
9495
g_pCore->GetGraphics()->GetRenderItemManager()->SaveReadableDepthBuffer();
9596
g_pCore->GetGraphics()->GetRenderItemManager()->FlushNonAARenderTarget();
9697

98+
// Ensure any in-progress effect passes are wrapped up before ending the scene
99+
CloseActiveShader();
100+
97101
if (g_bInMTAScene || g_bInGTAScene)
98102
{
99103
const HRESULT hrEndScene = pDevice->EndScene();
100104
if (FAILED(hrEndScene))
101105
WriteDebugEvent(SString("OnInvalidate: EndScene failed: %08x", hrEndScene));
102106
}
103-
104-
CloseActiveShader();
105107
}
106108
else
107109
{
110+
CloseActiveShader(false);
111+
108112
if (g_bInMTAScene || g_bInGTAScene)
109113
WriteDebugEvent("OnInvalidate: device lost, skipping EndScene and pending GPU work");
110-
111-
// Prevent reuse of partially configured shader state across device resets without touching the lost device
112-
CloseActiveShader(false);
113114
}
114115

115116
g_bInMTAScene = false;
@@ -219,6 +220,9 @@ void CDirect3DEvents9::OnPresent(IDirect3DDevice9* pDevice)
219220

220221
CGraphics::GetSingleton().LeavingMTARenderZone();
221222

223+
// Finalize any lingering shader passes before wrapping the scene
224+
CloseActiveShader();
225+
222226
// End the scene that we started.
223227
if (g_bInMTAScene)
224228
{

0 commit comments

Comments
 (0)