Commit Graph

110 Commits

Author SHA1 Message Date
be2a2d4873 WIP: Add native Wayland support for Linux (#13197)
* Add runtime display backend detection for Wayland support

Add LinuxDisplayBackend utility to detect X11 vs Wayland at runtime
using GDK_IS_X11_DISPLAY / GDK_IS_WAYLAND_DISPLAY macros. This is
the foundation for removing the forced GDK_BACKEND=x11 and enabling
native Wayland support.

- New files: LinuxDisplayBackend.hpp/.cpp with get_linux_display_backend(),
  is_running_on_wayland(), and is_running_on_x11()
- Propagate wxHAVE_GDK_X11 / wxHAVE_GDK_WAYLAND from FindGTK3.cmake
  as compile definitions to libslic3r_gui
- No-op on non-Linux platforms (returns Unknown / false)

* Fix Phase 1 code quality: pragma once, source ordering, static cache

* Make X11 initialization conditional for Wayland support

Remove the unconditional GDK_BACKEND=x11 force that blocked native
Wayland. Replace with conditional logic:

- EGL safety fallback: re-force X11 only when wxUSE_GLCANVAS_EGL is
  off and WAYLAND_DISPLAY is set, with a warning log
- XInitThreads() only called when DISPLAY is set (X11 in use)
- __GLX_VENDOR_LIBRARY_NAME only set when DISPLAY is present (GLX-specific)
- WEBKIT_DISABLE_COMPOSITING_MODE only set under XWayland (both
  DISPLAY and WAYLAND_DISPLAY present)
- Guard X11/Xlib.h include with __has_include for robustness
- Restore display validation to accept either DISPLAY or WAYLAND_DISPLAY

This is Phase 2 of the Wayland support plan.

* Fix Phase 2: safer EGL macro check, add clarifying comments

* Add GLAD2 library and replace GLEW linkage in build system

Set up GLAD2 as a static library to replace GLEW for OpenGL loading.
GLAD2 supports both GLX and EGL, which is required for Wayland support.

- Create src/glad/ with pre-generated GLAD2 sources (GL 4.6 compat)
- Add src/glad/CMakeLists.txt building glad as a static library
- Wire glad into src/CMakeLists.txt before libvgcode
- Modify libvgcode to use shared glad for GL path (keeps local copy
  only for GLES2/Emscripten) to avoid duplicate symbol conflicts
- Replace GLEW::GLEW with glad in libslic3r_gui link libraries

Note: GLEW is kept in deps for OpenCSG. Code migration from GL/glew.h
to glad/gl.h headers will follow in Phase 3B+3C.

* Fix Phase 3A+3D: libvgcode GLAD include, dead files, dlopen dep, OpenGL link var

* Migrate from GLEW to GLAD: replace headers and API calls across codebase

Replace all #include <GL/glew.h> with <glad/gl.h> across 49 source files.
Migrate GLEW API calls to GLAD equivalents:
- glewInit/glewExperimental -> gladLoaderLoadGL()
- GLEW_EXT_* / GLEW_ARB_* extension checks -> GLAD_GL_EXT_* / GLAD_GL_ARB_*
- Remove GLEW-specific EGL/GLX mismatch #error guards (not needed with GLAD)
- Replace unavailable EXT symbols with core GL equivalents in
  GLCanvas3D.cpp (GL_MAX_SAMPLES, glRenderbufferStorageMultisample,
  glBlitFramebuffer, GL_READ/DRAW_FRAMEBUFFER)
- Update log messages from glewInit to gladLoadGL

* Fix Phase 3B+3C: remove GLEW find, clean EXT symbols, update attribution

- Remove find_package(GLEW) block from root CMakeLists.txt since GLEW
  is no longer linked by any main application code
- Remove "glew" from SLIC3R_STATIC option description
- Replace all remaining EXT framebuffer symbols with core equivalents
  in render_thumbnail_framebuffer_ext and _rectangular_selection_picking_pass
- Update AboutDialog credits from GLEW to GLAD

* Enable EGL in wxWidgets and add runtime GLX/EGL selection for Wayland

- Set wxUSE_GLCANVAS_EGL=ON in wxWidgets build and Flatpak manifest
- Add PreferGLX() call on X11 sessions for driver compatibility
- Remove Phase 2 safety fallback (EGL is now always compiled in)
- Guard SwapBuffers against hidden canvases to prevent Wayland stalls

* Fix Phase 4: move PreferGLX to app startup, fix FPS counter guard

Move wxGLCanvas::PreferGLX() from OpenGLManager::create_wxglcanvas()
(static initializer) to GUI_App::on_init_inner() before any wxGLCanvas
is constructed. This prevents a race where SkipPartCanvas could trigger
wxGLBackend::Init() before the GLX preference is set. The new location
also adds explicit is_running_on_wayland() detection with a warning for
unknown backends.

Move increment_fps_counter() inside the IsShownOnScreen() guard so FPS
is only counted when a frame is actually swapped.

* Update GLFW from 3.3.7 to 3.4 for runtime Wayland/X11 backend selection

Replace the compile-time GLFW_USE_WAYLAND flag (which locked to a single
backend) with GLFW 3.4's GLFW_BUILD_WAYLAND + GLFW_BUILD_X11 flags that
build both backends and auto-select at runtime based on the available
display server. This enables the CLI thumbnail renderer to work on both
Wayland and X11 sessions without separate builds.

* wayland: Fix UI call sites that rely on global screen coordinates

On Wayland, wxGetMousePosition() returns (0,0) and SetPosition() is a
no-op for top-level windows. Fix the highest-impact call sites:

- GLCanvas3D: Use cached m_mouse.position from event handlers instead
  of wxGetMousePosition() + ScreenToClient() in get_local_mouse_position()
- Plater: Use event-relative coords via ClientToScreen(e.GetPosition())
  instead of wxGetMousePosition() in 3 leave-window handlers
- BBLTopbar: Use event.GetPosition() and FindToolByPosition() directly
  in mouse handlers instead of wxGetMousePosition()/FindToolByCurrentPosition()
- Search: Use focus-based dismiss logic on Wayland instead of
  wxGetMousePosition()-based rect checks in SearchDialog and
  SearchObjectDialog
- GUI_App: Skip SetPosition() in window_pos_restore() on Wayland where
  it is a no-op; still restore size and maximize state
- Button: Position tooltip relative to button widget via ClientToScreen
  instead of wxGetMousePosition()

* Fix SearchDialog Wayland dismiss: guard against search_line focus

* flatpak: Add Wayland socket permission for native Wayland support

* spec

* Fix crash on Wayland when wxWidgets lacks EGL support

Restore the safety fallback that forces GDK_BACKEND=x11 when wxWidgets
was not built with wxUSE_GLCANVAS_EGL=ON. Without this, the GLX backend
tries to access a non-existent X11 display on native Wayland, crashing
in wxGLCanvas::IsDisplaySupported() with SIGSEGV at offset 0xe4.

Also add a defense-in-depth guard in detect_multisample() that skips
the IsDisplaySupported call entirely on Wayland without EGL.

Root cause: deps/wxWidgets must be rebuilt after enabling EGL. The
compile-time check in OrcaSlicer.cpp detects the mismatch and falls
back safely.

* Fix EGL detection: use wxHAS_EGL instead of wxUSE_GLCANVAS_EGL

wxUSE_GLCANVAS_EGL is a CMake build option, NOT a C++ preprocessor
macro. The actual macro defined in wxWidgets setup.h is wxHAS_EGL.
All compile-time EGL checks were using the wrong macro, causing
the safety fallback to always trigger even with a properly built
EGL-enabled wxWidgets.

* Fix GL function pointers invalidated on Wayland/EGL

gladLoaderLoadGL() dlopen's libGL.so.1 to resolve GL function pointers
via dlsym, then immediately dlclose's the handle. On X11/GLX this is
fine because the GLX context keeps libGL.so mapped. On Wayland/EGL,
nothing else holds libGL.so open, so dlclose unmaps it and all function
pointers become dangling — causing SIGSEGV on the first GL call.

Fix: on Wayland, use gladLoadGL(eglGetProcAddress) which resolves
function pointers through the EGL loader without opening/closing
libGL.so.

* fix crash on start and various rendering issues

* fix crash on close

* small refactor

* move GPU selection to desktop file

* clean up a bit

* clean up more

* fix appimage error
2026-04-13 19:45:39 +08:00
0b9607c2bb fix Windows build errors 2026-03-26 14:10:10 +08:00
4c45521ed8 Linux: prefer discrete GPU on dual-GPU systems via PRIME environment variables (#12602)
* Linux: prefer discrete GPU on dual-GPU systems via PRIME environment variables

  Set DRI_PRIME=1 for AMD/nouveau PRIME setups and __NV_PRIME_RENDER_OFFLOAD/__GLX_VENDOR_LIBRARY_NAME for NVIDIA proprietary driver, only when the NVIDIA kernel module is detected. Uses replace=false to respect user overrides.

* Improves usability on Linux. No more double title bar (#12600)

* Fix double title bar on Linux by removing WM decorations for GTK

* wip

* fix

* finish

* address review comment
2026-03-04 22:48:40 +08:00
a20137d076 Fix thumbnail rendering in CLI (#12129)
* Fix thumbnail rendering in CLI

* Remove OSMesa context flag

* Add stringified error message for glfwInit and glewInit

* micro refactor

---------

Co-authored-by: SoftFever <softfeverever@gmail.com>
2026-02-10 13:08:22 +08:00
2c14a5fd27 Fix Setup Wizard stuck on "Loading..." on Wayland
When running under XWayland (Wayland sessions with GDK_BACKEND=x11),
WebKit2GTK's compositing mode can fail silently, causing the Setup
Wizard WebView to freeze or render blank. This leaves users stuck on
the "Loading......" screen indefinitely.

Changes:
- Set WEBKIT_DISABLE_COMPOSITING_MODE=1 to force software rendering,
  matching the fix used by BambuStudio
- Enable the 20-second timeout fallback in load.js so the wizard
  proceeds even if the C++ -> JavaScript signal fails
2026-02-03 14:47:08 +08:00
e70405fdea Fix various typos in source documentation (#11553)
* Fix various typos in source documentation

* Delete cmake/modules/Catch2/CatchAddTests.cmake

* Delete tests/example/example_tests_main.cpp

* Revert test_config.cpp

---------

Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
2026-01-21 09:19:25 -03:00
f428d5f087 FIX: CLI: fix the crash issue when load user config
jira: no-jira
Change-Id: I7b20c9c807150b45798aa036a1cbcb3c5aa1c9ae
(cherry picked from commit cb63ddfb6875bfa1fdbe6276d3e7a72a6776a4bc)
2025-10-30 14:56:49 +08:00
d9bb3c6a90 ENH: CLI: set -1 to default value of filament_map
jira: no-jira
Change-Id: I12300737061acd1c3e024a3424d3d46a53cf526f
(cherry picked from commit 190904c68f9ddb49df31d7d7e757d780c7876d6e)
2025-10-28 15:29:59 +08:00
b0437615df FIX: CLI: don't set wipe_tower_pos to default if set before
jira: no-jira
Change-Id: Ib9cc006e5b9e3c2dd728d629bad1beb9f9130491
(cherry picked from commit 6a3672c3cf9777f27c04e19a01d8e1e2accbddba)
2025-10-28 15:29:55 +08:00
9c17a87c8c Set is_BBL_printer flag before validation in CLI slicing path (#11018)
Set `is_BBL_printer` flag before validation as validation depends on it

Co-authored-by: SoftFever <softfeverever@gmail.com>
2025-10-25 23:11:08 +08:00
f050dc3430 Fix option nullable 2025-10-10 16:57:16 +08:00
a36f8eddab Revert "ENH:instead of prime_volume by filament_prime_volume"
This reverts commit e7e6405ad3.
2025-10-05 19:16:05 +08:00
4f2ad2527b Fix value type 2025-10-05 18:49:06 +08:00
fe9a4c62c2 FIX: CLI: refine the download check logic for multi-extruder printer
use the shared printable area
jira: no-jira

Change-Id: I23e97a06b0ca9573c84fe4081496bae2e8e92382
(cherry picked from commit 3245ea6f6dd54bfaae30e76c903abfd632972544)
2025-10-05 00:02:23 +08:00
b09bf85e19 FIX: CLI: fix a crash issue when slicing
report from cloud team
jira: no-jira

Change-Id: I880d0fbf0ee6fac00eded9e8b3f52c0cfb6de870
(cherry picked from commit 1128c0087e980f70865dff6185f1f7ad540cf6db)
2025-10-03 23:08:56 +08:00
ea62021966 ENH: CLI: add support for single extruder with multiple nozzle volume type
jira: no-jira
Change-Id: Ibb16fd87e5df074bca0068446782109100310ee1
(cherry picked from commit 304070083cbfc7098bbd95a3ae31c845cd53134d)
2025-10-03 22:01:31 +08:00
115b4c1d86 Rename wipe tower ribs related options 2025-10-02 22:56:54 +08:00
e46c3fa945 FIX: CLI: don't turnoff wipe tower when wrapping detect enabled
jira: no-jira
Change-Id: I242a9b18d03565e4d4add0e6e60c4b7f8fd6692a
(cherry picked from commit 00366eba96e6eec8173b6d2db9d1c3e52a24089d)
2025-10-02 17:59:37 +08:00
5cacd34a5c ENH: add new arrangement features for wrapping detection area
Jira: STUDIO-13735

Change-Id: I198d19f5e6ef70f0adfa6370269290c81d21a557
(cherry picked from commit dc83637652526111611d0833d5f5798aaa3e7be7)
2025-10-02 17:41:41 +08:00
f36f5f0a0c FIX: Printable area check results in gcode_check_result
Added a check for Gcode traces outside the printable area after the backend slicer, allowing command-line slicers to detect abnormal results. The GCodeProcessor's m_result.gcode_check_result.error_code now includes not only dual-head print range checks, but also checks for the machine's plate print range, wrapping detection area, and height violations.

jira: none
Change-Id: I44072ece3b4b525c77328cec2f76e205eb559cc4
(cherry picked from commit 054f936243968687f536170374a233ec912e8e42)
2025-10-02 17:07:21 +08:00
cb70e9f92c ENH: CLI: add logic to process wrapping detect
jira: no-jira
Change-Id: Iacf689208a2fc26437892f9f5d847c53a21bf264
(cherry picked from commit 6c2e71c8f51a0384e6fdf784421490820282d3cc)
2025-10-02 17:07:21 +08:00
1355b6bc88 ENH: add wrapping detection
jira: STUDIO-13192
Change-Id: I0fb5692b18cdb3b7af624a831dcfb0f635b165f0
(cherry picked from commit 89a8b6ea5e34340cba3750416ce3100dcc39f5c2)
(cherry picked from commit 50bc8c10a7b4ddc0b2dfe9cbab438b9d307b7fc0)
2025-09-30 15:32:44 +08:00
320b7e2fe7 FIX: potential cli crash caused by missing params
jira: NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I1b61e44414118e40e421592649928664fdecf092
(cherry picked from commit 6deb3db25b7a7e4bc7a71d75f661b3f4b996d73f)
2025-09-29 20:43:20 +08:00
270ebc2688 FIX: crash and wrong flush data in cli mode
jira: NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: Ibaad369e4dc6d0307f709c1c6e543a7a985b0345
(cherry picked from commit 83a2c405e282a1fe39b1dbd637e480765b6b6551)
2025-09-29 20:41:07 +08:00
7000f04666 FIX: display the minimum flush data
1. Use the minimum flush between nozzle volume and flush in datalist
2. Add a new param to decide the datalist to use

github:7445

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: Id87c98ca5069e7b328974d641d7a81dfbf9c50a0
(cherry picked from commit 2be29b784727330732170b5c2ff0ba9d5e79d82f)
2025-09-29 20:38:38 +08:00
bed6754d57 FIX: CLI: fix the default wipe_tower_x incorrect issue
jira: no-jira
Change-Id: I847a0fc0e69bfdf80cea68cafabaac1daee98b8a
(cherry picked from commit 5b8af6cbe60c1a6a3fc11b5275131d4895d2f838)
2025-09-25 17:22:35 +08:00
bb6690280f FIX: CLI: fix a crash issue when using old presets
jira: no-jira
Change-Id: Id7fae9b9c92a3e28e989a6567b068f3ada7e4bbd
(cherry picked from commit 77ff64b7cdded17c19f1699db9122ea6f41a2ba1)
2025-09-24 11:42:03 +08:00
32aac4060a FIX: Command line slice error of filament printable
jira: none
Change-Id: I89724d3934c5c1e5ef75d3e046e84600873516ec
(cherry picked from commit 5f9093dc8e7a222857037016940c43e2ad227eaa)
2025-09-23 09:04:01 +08:00
b38145a291 ENH: add filament_printable and delete unprintable and printable list
jira: none

Change-Id: I643ab11831ceac1fe0793510f64b288cbd16415a
(cherry picked from commit 3dd5a601547485bfcc4188727343a52c30bb6a73)
2025-09-21 13:48:08 +08:00
442e454008 ENH: add printable filament types for extruder
jira: none

Change-Id: Ie6ada223bc11a53b975c8c20b4a41e7cdc2d524c
(cherry picked from commit c64270f506a4d004f66aef3ff31760f793eca489)
2025-09-21 13:48:07 +08:00
a2ce2695eb Fix build error caused by cyclic include 2025-09-21 13:48:03 +08:00
50ed6100e8 FIX: CLI: process travel_acceleration for old files
jira: no-jira
Change-Id: Ica49d5d9d184a72de450c147c227f5b6e1f288ff
(cherry picked from commit 9d4fafc646849497718c1ca4fe9ff3b0df282928)
2025-09-21 13:47:56 +08:00
82c112648e ENH: CLI: add allow_mix_temp option
jira: no-jira
Change-Id: Idff6ff2f11b4b0a1fb3a4a410fa46c78d38d1a6e
(cherry picked from commit 4ffa7b505a4c1b1f27152c5f5198c9571939de40)
2025-09-20 15:37:12 +08:00
01cae10bf7 FIX: missing nozzle volume type in old 3mf
jira: NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I95c85b54f13950a0859297dcb28edcb73d841276
(cherry picked from commit cfe3aad3fc0f475a5cd31bb5a25a62a19c872ba5)
2025-09-18 17:05:36 +08:00
66be72ff65 ENH: update flush data for H2D
1.Alsoe set default flush from support to 700

jira: STUDIO-10595

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I0d0a85cdac5e63b787c16b35ed6c05afc885a715
(cherry picked from commit 5fea5e6696a28d7ec9edcde38c43700cb3b7f596)
2025-09-18 16:49:36 +08:00
fd60dbd1a0 ENH: CLI: check filament mapping error before process
jira: no-jira
Change-Id: Ie82a1faba93a4f80281615c803a45a93206ddf02
(cherry picked from commit 5869d33d519b617dbcee05a74f81fb1951330633)
2025-09-18 16:19:24 +08:00
2d164b8b07 FIX: CLI: use the correct wipe tower width after estimation
jira: STUDIO-10900
Change-Id: Id6ea3c3a7e0c37001a5cc118eea7459ffeb48469
(cherry picked from commit 31fbdd29e7eebb9b12c8204bec3c82f1598367e1)
2025-09-18 16:13:30 +08:00
a1cd1daa68 ENH:Obj import supports up to 32 colors
jira: STUDIO-10927
Change-Id: I46b2c63a625f91d0caafa78cf47bf0fc8589015b
(cherry picked from commit 9e2bfb7d7e56d886a85c0ee8c0e90dbc6ccfa932)
2025-09-18 16:10:27 +08:00
14a032454d FIX: Remove unprintable_filament_map
jira: none
Change-Id: I30285d0cc98a974e71f16fd9adb57dfcccb39415
(cherry picked from commit 1959fa7d5c213a7720b8f215f1578597278e6920)
2025-09-18 14:13:51 +08:00
c1fc3579e1 ENH: CLI: fix some potential issue under cli
jira: no-jira
Change-Id: I411e7a18b0eacc27f28a4b6d2205cd6460b6cd1a
(cherry picked from commit 84bbf31ab5d4a30afde7c512147fcbe9b85fb57b)
2025-09-18 11:06:36 +08:00
d64740985c ENH: add default value in extruder info for cli
jira:NONE

Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I15fb33c55a8f8e5bf75807ca16b00d50226ee156
(cherry picked from commit bf97aea2e405e41031de7b20eb59054f65b9a0fa)
2025-09-18 10:08:33 +08:00
8f7ac809a2 ENH: CLI: only check filament conflicts before slicing when there is one color
jira: no-jira
Change-Id: I17fc917b624578491170656372e4c4d1b43f0412
(cherry picked from commit 53a551174e682694374e539572e5337791e0a7d8)
2025-09-17 23:31:09 +08:00
ce534972e2 ENH: wipe_tower: use uniform wipe tower logic for cli and gui
jira: no-jira
Change-Id: I179212585871071cd17bd37c2756444a2d7aba1f
(cherry picked from commit 1f3dde94980d3685bb4d1266e8a5448b8f231b9f)
2025-09-17 23:29:14 +08:00
e9ed04cc9e ENH: CLI: keep the params of old version
jira: STUDIO-10695
Change-Id: I4b0a768bc4fc6c856c9c92fa4a05007a3097df35
(cherry picked from commit a44da293ad3a1fbc62e318c20b3ba7c187fc1d25)
2025-09-17 23:09:07 +08:00
4e51e402a3 FIX:set "ban_light" true for picking_thumbnail in linux
jira: none
Change-Id: I68912a17f6bd3ffb73fc6480e5fd95a690c1c872
(cherry picked from commit 1acfe83fc0c49734996a0e2596856fd7881b4d68)
2025-09-17 21:49:40 +08:00
1d81bef41d FIX: CLI: fix the filament_map incorrect issue
jira: no-jira
Change-Id: I8f389ae1dca2cbe79a2db7a5e9fbb94da430d037
(cherry picked from commit 89308c8676e4f953a69198f706852e8b6d42231c)
2025-09-17 17:53:45 +08:00
68c6c8e994 FIX: CLI: fix the crash issue caused filament_id missing
jira: no-jira
Change-Id: I6256a846cf30f304deda32f61ed5329aacdb5f73
(cherry picked from commit d14e3f42a0a16951651a47d49e05e509ee4696c0)
2025-09-17 10:21:15 +08:00
2d6d07d6f8 FIX: CLI: fix the stl name not correct issue when using export-stl
jira: no-jira
Change-Id: I5cd83c9fb787416d5045470025fa96696d8bfab9
(cherry picked from commit 49b1568877345b1eb9bdfacac19d451569433f3f)
2025-09-16 15:42:48 +08:00
8c7475eded ENH:instead of prime_volume by filament_prime_volume
Jira: none

Signed-off-by: qing.zhang <qing.zhang@bambulab.com>
Change-Id: I96e7d0604da8f90678feed81833e3a634752ffff
(cherry picked from commit be02e769bb49680d6be678fc5fa73a141ca8da1c)
2025-09-16 10:39:19 +08:00
03998203fb ENH: enhance some functions of the wipe_tower
1.Add automatic calculation of the wipe_tower's brim width by height;
2.modify the min_depth_per_height and the default ridwidth

jira: none
Change-Id: Idd96bc90e8e631aa8481b559e1e9fec24c6b822f
(cherry picked from commit 4dd4e9e12c02d945a0ac3fd2020f75313c5b2cc9)
2025-09-13 18:49:41 +08:00