From bb86ee317230fdffe54e0b3315ce9e9841dd5c85 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 7 Jul 2025 03:40:53 +0200 Subject: [PATCH] Fix clear screen on buffered deevices (#544) --- LEGO1/omni/src/video/mxdisplaysurface.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/LEGO1/omni/src/video/mxdisplaysurface.cpp b/LEGO1/omni/src/video/mxdisplaysurface.cpp index 612caba4..b36cbd2a 100644 --- a/LEGO1/omni/src/video/mxdisplaysurface.cpp +++ b/LEGO1/omni/src/video/mxdisplaysurface.cpp @@ -52,7 +52,7 @@ void MxDisplaySurface::ClearScreen() DDSURFACEDESC desc; if (!m_videoParam.Flags().GetFlipSurfaces()) { - backBuffers = 1; + backBuffers = 2; } else { backBuffers = m_videoParam.GetBackBuffers() + 1; @@ -80,6 +80,17 @@ void MxDisplaySurface::ClearScreen() if (m_videoParam.Flags().GetFlipSurfaces()) { m_ddSurface1->Flip(NULL, DDFLIP_WAIT); } + else { + DDBLTFX data; + memset(&data, 0, sizeof(data)); + data.dwSize = sizeof(data); + data.dwDDFX = DDBLTFX_NOTEARING; + + if (m_ddSurface1->Blt(NULL, m_ddSurface2, NULL, DDBLT_NONE, &data) == DDERR_SURFACELOST) { + m_ddSurface1->Restore(); + m_ddSurface1->Blt(NULL, m_ddSurface2, NULL, DDBLT_NONE, &data); + } + } } }