diff --git a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx index af7209b072..3c6e862978 100644 --- a/panda/src/wdxdisplay/wdxGraphicsWindow.cxx +++ b/panda/src/wdxdisplay/wdxGraphicsWindow.cxx @@ -2022,11 +2022,16 @@ CreateScreenBuffersAndDevice(DXScreenData &Display) { } */ - - DX_DECLARE_CLEAN(DDCAPS,DDCaps); pDD->GetCaps(&DDCaps,NULL); + // if window is not foreground in exclusive mode, ddraw thinks you are 'not active', so + // it changes your WM_ACTIVATEAPP from true to false, causing us + // to go into a 'wait-for WM_ACTIVATEAPP true' loop, and the event never comes so we hang + // in fullscreen wait. + + SetForegroundWindow(Display.hWnd); + if(dx_full_screen) { // Setup to create the primary surface w/backbuffer DX_DECLARE_CLEAN(DDSURFACEDESC2,ddsd) diff --git a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx index 641dd4c7b8..22eb1528cc 100644 --- a/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx +++ b/panda/src/wdxdisplay8/wdxGraphicsWindow8.cxx @@ -2434,7 +2434,14 @@ CreateScreenBuffersAndDevice(DXScreenData &Display) { assert(pPresParams->SwapEffect == D3DSWAPEFFECT_DISCARD); // only valid effect for multisample #endif - ClearToBlack(GetDesktopWindow(),_props); + + // if window is not foreground in exclusive mode, ddraw thinks you are 'not active', so + // it changes your WM_ACTIVATEAPP from true to false, causing us + // to go into a 'wait-for WM_ACTIVATEAPP true' loop, and the event never comes so we hang + // in fullscreen wait. + + SetForegroundWindow(Display.hWnd); + ClearToBlack(Display.hWnd,_props); hr = pD3D8->CreateDevice(Display.CardIDNum, D3DDEVTYPE_HAL, _pParentWindowGroup->_hParentWindow, dwBehaviorFlags, pPresParams, &Display.pD3DDevice);