From 11d75a93ad0e9e04ed63469691a57b23746257bb Mon Sep 17 00:00:00 2001 From: georges <> Date: Mon, 11 Dec 2000 20:12:00 +0000 Subject: [PATCH] block window-mode flip from returning until vretrace --- panda/src/dxgsg/dxGraphicsStateGuardian.cxx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/panda/src/dxgsg/dxGraphicsStateGuardian.cxx b/panda/src/dxgsg/dxGraphicsStateGuardian.cxx index 7b05e92e9d..2a76b44eb2 100644 --- a/panda/src/dxgsg/dxGraphicsStateGuardian.cxx +++ b/panda/src/dxgsg/dxGraphicsStateGuardian.cxx @@ -4622,7 +4622,6 @@ dx_setup_after_resize(RECT viewrect, HWND mwindow) } } - //////////////////////////////////////////////////////////////////// // Function: show_frame // Access: @@ -4655,7 +4654,10 @@ void DXGraphicsStateGuardian::show_frame(void) { } } else { - HRESULT hr = _pri->Blt( &_view_rect, _back, NULL, DDBLT_WAIT, NULL ); + DX_DECLARE_CLEAN(DDBLTFX, bltfx); + + bltfx.dwDDFX |= DDBLTFX_NOTEARING; + HRESULT hr = _pri->Blt( &_view_rect, _back, NULL, DDBLT_DDFX | DDBLT_WAIT, &bltfx ); if(hr!=DD_OK) { if (hr == DDERR_SURFACELOST) { // Check/restore the primary surface @@ -4673,6 +4675,14 @@ void DXGraphicsStateGuardian::show_frame(void) { exit(1); } } + + // right now, we want sync to v-blank (time from now up to vblank is wasted) + // worry about triple-buffering l8r + hr = _pDD->WaitForVerticalBlank(DDWAITVB_BLOCKBEGIN, NULL); + if (hr != DD_OK) { + dxgsg_cat.error() << "DXGraphicsStateGuardian::WaitForVerticalBlank() failed : " << ConvD3DErrorToString(hr) << endl; + exit(1); + } } } }