diff --git a/main/gui/include/window.hpp b/main/gui/include/window.hpp index 8d97abad2..34aa08d66 100644 --- a/main/gui/include/window.hpp +++ b/main/gui/include/window.hpp @@ -29,6 +29,7 @@ namespace hex { void resize(i32 width, i32 height); private: + void configureGLFW(); void setupNativeWindow(); void beginNativeWindowFrame(); void endNativeWindowFrame(); diff --git a/main/gui/source/window/linux_window.cpp b/main/gui/source/window/linux_window.cpp index 322e719d1..75f3c47fe 100644 --- a/main/gui/source/window/linux_window.cpp +++ b/main/gui/source/window/linux_window.cpp @@ -72,6 +72,17 @@ namespace hex { } } + void Window::configureGLFW() { + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); + glfwWindowHint(GLFW_DECORATED, ImHexApi::System::isBorderlessWindowModeEnabled() ? GL_FALSE : GL_TRUE); + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); + + #if defined(GLFW_WAYLAND_APP_ID) + glfwWindowHintString(GLFW_WAYLAND_APP_ID, "imhex"); + #endif + } + void Window::initNative() { log::impl::enableColorPrinting(); diff --git a/main/gui/source/window/macos_window.cpp b/main/gui/source/window/macos_window.cpp index 7f691cc47..169306f88 100644 --- a/main/gui/source/window/macos_window.cpp +++ b/main/gui/source/window/macos_window.cpp @@ -20,6 +20,15 @@ namespace hex { errorMessageMacos(message.c_str()); } + void Window::configureGLFW() { + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE); + glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE); + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); + } + void Window::initNative() { log::impl::enableColorPrinting(); diff --git a/main/gui/source/window/web_window.cpp b/main/gui/source/window/web_window.cpp index 96e8d6cf2..45fb0d9f1 100644 --- a/main/gui/source/window/web_window.cpp +++ b/main/gui/source/window/web_window.cpp @@ -46,6 +46,13 @@ namespace hex { }, message.c_str()); } + void Window::configureGLFW() { + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); + glfwWindowHint(GLFW_DECORATED, GL_FALSE); + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_FALSE); + } + void Window::initNative() { EM_ASM({ // Save data directory diff --git a/main/gui/source/window/win_window.cpp b/main/gui/source/window/win_window.cpp index 49d268cfc..dd6632a80 100644 --- a/main/gui/source/window/win_window.cpp +++ b/main/gui/source/window/win_window.cpp @@ -308,6 +308,21 @@ namespace hex { } } + void Window::configureGLFW() { + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); + glfwWindowHint(GLFW_DECORATED, ImHexApi::System::isBorderlessWindowModeEnabled() ? GL_FALSE : GL_TRUE); + + // Windows versions before Windows 10 have issues with transparent framebuffers + // causing the entire window to be slightly transparent ignoring all configurations + OSVERSIONINFOA versionInfo = { }; + if (::GetVersionExA(&versionInfo) && versionInfo.dwMajorVersion >= 10) { + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); + } else { + glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_FALSE); + } + } + void Window::initNative() { if (ImHexApi::System::isDebugBuild()) { diff --git a/main/gui/source/window/window.cpp b/main/gui/source/window/window.cpp index 0af149fbc..fd169c402 100644 --- a/main/gui/source/window/window.cpp +++ b/main/gui/source/window/window.cpp @@ -717,25 +717,8 @@ namespace hex { std::abort(); } - // Set up used OpenGL version - #if defined(OS_MACOS) - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE); - glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE); - #else - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - glfwWindowHint(GLFW_DECORATED, ImHexApi::System::isBorderlessWindowModeEnabled() ? GL_FALSE : GL_TRUE); - #endif - - #if defined(OS_LINUX) && defined(GLFW_WAYLAND_APP_ID) - glfwWindowHintString(GLFW_WAYLAND_APP_ID, "imhex"); - #endif - + configureGLFW(); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); - glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);