diff --git a/deps/GLEW/GLEW.cmake b/deps/GLEW/GLEW.cmake index cef56e72e2..82bfc0bb84 100644 --- a/deps/GLEW/GLEW.cmake +++ b/deps/GLEW/GLEW.cmake @@ -5,6 +5,8 @@ find_package(OpenGL QUIET REQUIRED) orcaslicer_add_cmake_project( GLEW SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/glew + CMAKE_ARGS + -DGLEW_USE_EGL=OFF ) if (MSVC) diff --git a/deps/GLEW/glew/CMakeLists.txt b/deps/GLEW/glew/CMakeLists.txt index 4aa10c9188..7f1687c4e2 100644 --- a/deps/GLEW/glew/CMakeLists.txt +++ b/deps/GLEW/glew/CMakeLists.txt @@ -3,9 +3,17 @@ project(GLEW) find_package(OpenGL REQUIRED) -if(OpenGL_EGL_FOUND) - message(STATUS "building GLEW for EGL (hope that wxWidgets agrees, otherwise you won't have any output!)") +# Allow parent project to control EGL usage. +# Default to OFF since OrcaSlicer forces GDK_BACKEND=x11 (using GLX contexts). +# GLEW must use glXGetProcAddressARB (GLX) to match wxWidgets GL canvas. +# Using EGL function loading with GLX contexts causes rendering failures. +option(GLEW_USE_EGL "Use EGL instead of GLX for OpenGL function loading" OFF) + +if(GLEW_USE_EGL) + message(STATUS "Building GLEW with EGL support") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DGLEW_EGL") +else() + message(STATUS "Building GLEW with GLX support") endif() add_library(GLEW src/glew.c) diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index 3a52d14198..cb25f0eb45 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -51,6 +51,7 @@ orcaslicer_add_cmake_project( -DwxUSE_UNICODE=ON -DwxUSE_PRIVATE_FONTS=ON -DwxUSE_OPENGL=ON + -DwxUSE_GLCANVAS_EGL=OFF -DwxUSE_WEBREQUEST=ON -DwxUSE_WEBVIEW=ON ${_wx_edge} diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 39860ab9a8..17c372a59f 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -25,6 +25,18 @@ #include "../Utils/MacDarkMode.hpp" #endif // __APPLE__ +// Verify GLEW and wxWidgets use the same OpenGL backend (EGL vs GLX). +// A mismatch causes rendering failures: GLEW's function loading must match +// the context type created by wxWidgets. +#if defined(__linux__) + #if defined(GLEW_EGL) && (!defined(wxUSE_GLCANVAS_EGL) || !wxUSE_GLCANVAS_EGL) + #error "OpenGL backend mismatch: GLEW has EGL support enabled but wxWidgets does not. Ensure GLEW_USE_EGL and wxUSE_GLCANVAS_EGL are both ON or both OFF." + #endif + #if !defined(GLEW_EGL) && defined(wxUSE_GLCANVAS_EGL) && wxUSE_GLCANVAS_EGL + #error "OpenGL backend mismatch: wxWidgets has EGL support enabled but GLEW does not. Ensure GLEW_USE_EGL and wxUSE_GLCANVAS_EGL are both ON or both OFF." + #endif +#endif + namespace Slic3r { namespace GUI {