diff --git a/code/nel/src/3d/driver/opengl/driver_opengl.cpp b/code/nel/src/3d/driver/opengl/driver_opengl.cpp index e9965e0f1..ce60d7f42 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl.cpp @@ -234,10 +234,6 @@ CDriverGL::CDriverGL() _CursorScale = 1.f; _MouseCaptured = false; -#if defined(NL_OS_WINDOWS) - _BorderlessFullscreen = false; -#endif - _NeedToRestaureGammaRamp = false; _win = EmptyWindow; diff --git a/code/nel/src/3d/driver/opengl/driver_opengl.h b/code/nel/src/3d/driver/opengl/driver_opengl.h index fb6069447..c4540b9da 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl.h +++ b/code/nel/src/3d/driver/opengl/driver_opengl.h @@ -996,12 +996,6 @@ private: EWindowStyle getWindowStyle() const; bool setWindowStyle(EWindowStyle windowStyle); -#if defined(NL_OS_WINDOWS) - static BOOL CALLBACK monitorEnumProcFullscreen(HMONITOR hMonitor, HDC, LPRECT, LPARAM dwData); - bool _BorderlessFullscreen; -#endif - std::string _CurrentDisplayDevice; - // Methods to manage screen resolutions bool restoreScreenMode(); bool saveScreenMode(); diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp index 4e08884b0..751e72149 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp @@ -1271,86 +1271,10 @@ static sint modeInfoToFrequency(XF86VidModeModeInfo *info) // *************************************************************************** -#if defined(NL_OS_WINDOWS) - -struct CMonitorEnumParams -{ -public: - CDriverGL *Driver; - const char *DeviceName; - bool Success; -}; - -BOOL CALLBACK CDriverGL::monitorEnumProcFullscreen(HMONITOR hMonitor, HDC, LPRECT, LPARAM dwData) -{ - CMonitorEnumParams *p = reinterpret_cast(dwData); - - MONITORINFOEXA monitorInfo; - memset(&monitorInfo, 0, sizeof(monitorInfo)); - monitorInfo.cbSize = sizeof(monitorInfo); - GetMonitorInfoA(hMonitor, &monitorInfo); - nldebug("3D: Monitor: '%s'", monitorInfo.szDevice); - - size_t devLen = strlen(monitorInfo.szDevice); - size_t targetLen = strlen(p->DeviceName); - - nlassert(devLen < 32); - size_t minLen = min(devLen, targetLen); - if (!memcmp(monitorInfo.szDevice, p->DeviceName, minLen)) - { - if (devLen == targetLen - || (devLen < targetLen && (p->DeviceName[minLen] == '\\')) - || (devLen > targetLen && (monitorInfo.szDevice[minLen] == '\\'))) - { - nldebug("3D: Remapping '%s' to '%s'", p->DeviceName, monitorInfo.szDevice); - nldebug("3D: Found requested monitor at %i, %i", monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.top); - p->Driver->_CurrentMode.Windowed = false; - p->Driver->setWindowStyle(CDriverGL::EWSWindowed); - p->Driver->setWindowSize(monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left, monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top); - LONG dwStyle = GetWindowLong(p->Driver->_win, GWL_STYLE); - SetWindowLong(p->Driver->_win, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW); - SetWindowPos(p->Driver->_win, NULL, - monitorInfo.rcMonitor.left, - monitorInfo.rcMonitor.top, - monitorInfo.rcMonitor.right - monitorInfo.rcMonitor.left, - monitorInfo.rcMonitor.bottom - monitorInfo.rcMonitor.top, - SWP_FRAMECHANGED); - p->Driver->_WindowX = monitorInfo.rcMonitor.left; - p->Driver->_WindowY = monitorInfo.rcMonitor.top; - p->Driver->_CurrentDisplayDevice = std::string(p->DeviceName); - p->Driver->_BorderlessFullscreen = true; - p->Driver->_CurrentMode.Windowed = false; - p->Success = true; - return FALSE; - } - } - p->Success = false; - return TRUE; // continue -}; - -#endif - -// *************************************************************************** - bool CDriverGL::setScreenMode(const GfxMode &mode) { H_AUTO_OGL(CDriverGL_setScreenMode) - nldebug("3D: setScreenMode"); - -#if defined(NL_OS_WINDOWS) - if (_BorderlessFullscreen) - { - _BorderlessFullscreen = false; - LONG dwStyle = GetWindowLong(_win, GWL_STYLE); - dwStyle |= WS_OVERLAPPEDWINDOW; - if (!_Resizable) dwStyle ^= WS_MAXIMIZEBOX|WS_THICKFRAME; - SetWindowLong(_win, GWL_STYLE, dwStyle); - SetWindowPos(_win, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); - _CurrentMode.Windowed = true; - } -#endif - if (mode.Windowed) { // if fullscreen, switch back to desktop screen mode @@ -1360,17 +1284,13 @@ bool CDriverGL::setScreenMode(const GfxMode &mode) return true; } - if (_CurrentDisplayDevice != mode.DisplayDevice) - restoreScreenMode(); - // save previous screen mode only if switching from windowed to fullscreen if (_CurrentMode.Windowed) saveScreenMode(); // if switching exactly to the same screen mode, doesn't change it GfxMode previousMode; - if (_CurrentDisplayDevice == mode.DisplayDevice - && getCurrentScreenMode(previousMode) + if (getCurrentScreenMode(previousMode) && mode.Width == previousMode.Width && mode.Height == previousMode.Height && mode.Depth == previousMode.Depth @@ -1379,9 +1299,7 @@ bool CDriverGL::setScreenMode(const GfxMode &mode) #if defined(NL_OS_WINDOWS) - const char *deviceName = mode.DisplayDevice.c_str(); - - DEVMODEA devMode; + DEVMODE devMode; memset(&devMode, 0, sizeof(DEVMODE)); devMode.dmSize = sizeof(DEVMODE); devMode.dmDriverExtra = 0; @@ -1389,42 +1307,22 @@ bool CDriverGL::setScreenMode(const GfxMode &mode) devMode.dmPelsWidth = mode.Width; devMode.dmPelsHeight = mode.Height; - if (mode.Depth > 0) + if(mode.Depth > 0) { devMode.dmBitsPerPel = mode.Depth; devMode.dmFields |= DM_BITSPERPEL; } - if (mode.Frequency > 0) + if(mode.Frequency > 0) { devMode.dmDisplayFrequency = mode.Frequency; devMode.dmFields |= DM_DISPLAYFREQUENCY; } - - if (deviceName[0]) + + if (ChangeDisplaySettings(&devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) { - // First attempt exclusive fullscreen - nldebug("3D: ChangeDisplaySettingsEx"); - LONG resex; - if ((resex = ChangeDisplaySettingsExA(deviceName, &devMode, NULL, CDS_FULLSCREEN, NULL)) != DISP_CHANGE_SUCCESSFUL) - { - nlwarning("3D: Fullscreen mode switch failed (%i)", (sint)resex); - // Workaround, resize to monitor and make borderless - CMonitorEnumParams p; - p.DeviceName = deviceName; - p.Driver = this; - EnumDisplayMonitors(NULL, NULL, monitorEnumProcFullscreen, (LPARAM)&p); - return p.Success; - } - } - else - { - nldebug("3D: ChangeDisplaySettings"); - if (ChangeDisplaySettingsA(&devMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - { - nlwarning("3D: Fullscreen mode switch failed"); - return false; - } + nlwarning("3D: Fullscreen mode switch failed"); + return false; } #elif defined(NL_OS_MAC) @@ -1830,11 +1728,7 @@ bool CDriverGL::setWindowStyle(EWindowStyle windowStyle) dwNewStyle |= WS_VISIBLE; if (dwStyle != dwNewStyle) - { SetWindowLong(_win, GWL_STYLE, dwNewStyle); - if (windowStyle == EWSWindowed) - SetWindowPos(_win, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); - } // if (windowStyle == EWSMaximized && isVisible && !isMaximized) // ShowWindow(_hWnd, SW_SHOWMAXIMIZED); @@ -1962,24 +1856,19 @@ bool CDriverGL::setMode(const GfxMode& mode) && ScreenToClient(_win, &cursorPos); sint curX = (sint)cursorPos.x * (sint)mode.Width; sint curY = (sint)cursorPos.y * (sint)mode.Height; - if (_BorderlessFullscreen) - ReleaseCapture(); #endif if (!setScreenMode(mode)) return false; - if (!_BorderlessFullscreen) - { - // when changing window style, it's possible system change window size too - setWindowStyle(mode.Windowed ? EWSWindowed : EWSFullscreen); + // when changing window style, it's possible system change window size too + setWindowStyle(mode.Windowed ? EWSWindowed : EWSFullscreen); - if (!mode.Windowed) - _CurrentMode.Depth = mode.Depth; + if (!mode.Windowed) + _CurrentMode.Depth = mode.Depth; - setWindowSize(mode.Width, mode.Height); - setWindowPos(_WindowX, _WindowY); - } + setWindowSize(mode.Width, mode.Height); + setWindowPos(_WindowX, _WindowY); switch (_CurrentMode.Depth) { @@ -1996,8 +1885,6 @@ bool CDriverGL::setMode(const GfxMode& mode) cursorPos.y = curY / (sint)mode.Height; ClientToScreen(_win, &cursorPos); SetCursorPos(cursorPos.x, cursorPos.y); - if (_BorderlessFullscreen) - SetCapture(_win); } #endif