Releases: gogpu/gogpu
Releases · gogpu/gogpu
v0.41.11
What's Changed
Fixed
- Wayland CSD maximize/fullscreen geometry (#300) — 5 bugs fixed based on enterprise research (GTK4, winit/SCTK, SDL3/libdecor, GLFW consensus):
- Title bar at
(0, -tbH)on maximize — no longer covers Vulkan content (winit AdwaitaFrame pattern) - Fullscreen state parsed from
xdg_toplevelstates (value 2) - ALL decorations destroyed on fullscreen, recreated on restore
set_window_geometrynegative offset model on maximize (winit/libdecor pattern)ResizeCSDtriggers on state change even without size change
- Title bar at
Full Changelog: v0.41.10...v0.41.11
v0.41.10
Fixed
- Wayland multiwindow (@lkmavi, #292) — 4 bugs:
- macOS:
Show()not called for secondary windows (v0.41.5 regression) - Wayland: global callback handles overwritten → per-proxy maps
- Wayland: closing one window closed both → independent connections
- Wayland:
WaitEventsdidn't poll secondary FDs
- macOS:
- Thread panic propagation (@lkmavi) — re-panic on caller instead of silent goroutine death
- macOS GetPoint buffer (@lkmavi) —
[4]float64for goffi HFA return (Go 1.26-race)
Changed
- Enterprise docs update: README, CONTRIBUTING, ROADMAP, SECURITY
- Open Collective sponsorship badges: https://opencollective.com/gogpu
Contributors
@lkmavi — all 3 code fixes in this release
v0.41.9
Changed
- deps: wgpu v0.29.13 → v0.29.14 — missing
vertexBuffersin LinuxCreateRenderPipeline. All GLES geometry was silently discarded on Linux (vertex attributes never configured). One-line fix found by @lkmavi (wgpu#215/#217).
Please test
go get github.com/gogpu/wgpu@v0.29.14
GOGPU_GRAPHICS_API=gles go run github.com/gogpu/gogpu/examples/particles@v0.41.9v0.41.8
Changed
- deps: wgpu v0.29.12 → v0.29.13, naga v0.17.13 → v0.17.14
- GLES enterprise parity: GLSL version propagation, WindowBit-only EGL config tier (Wayland fix), runtime binding fallback GL<4.2, compute barrier, lazy VAO, MSAA validation
- First Pure Go GLES rendering on Linux Wayland verified (triangle on WSL2 Mesa GL 4.1)
v0.41.7
Fixed
- Wayland GLES init (@lkmavi, #292) — renderer 4-phase init split:
initInstance→createSurface(GLES) →initAdapterDevice(surfaceHint)→configureSurface. EGL requires surface before GL context. - Wayland invisible cursor —
SetCursor(lastCursor)onwl_pointer.enter(GLFW pattern). Restores last known cursor shape. - Wayland CSD seat timing —
wl_seatin required globals + extra roundtrip for optional late globals. - Wayland CSD hit-test (@lkmavi) — buttons priority over resize grips at top edge (GNOME/libadwaita pattern).
- Wayland fallback onDraw —
Clear(0,0,0,1)for windows without callback so compositor shows the window. - KDE Plasma AppMenu (@lkmavi) —
org_kde_kwin_appmenuprotocol for Wayland global menus. - D-Bus RegisterWindow (@lkmavi) — winID=0 on Wayland (KDE matches by sender PID).
- File dialog key repeat (@lkmavi) — cancel repeat before blocking dialog.
Changed
- deps: wgpu v0.29.9 → v0.29.12 (GLES FFI pointer convention fix — 30+ GL calls corrected, EGL surfaceless/pbuffer, Wayland nativeDisplay fallback, @lkmavi wgpu#210/#213)
Contributors
@lkmavi — 6 out of 8 fixes in this release. Outstanding Wayland + GLES work.
v0.41.6
Fixed
- Wayland SIGSEGV (#292) —
wl_data_device.data_offerevent had NULLwl_message.typesarray. libwayland'screate_proxies()createdwl_data_offerproxy withinterface=NULL→ crash atproxy->object.interface->event_count(offset 0x18). Fix:dataOfferTypes[0]now points to correctwl_data_offerinterface struct. Root cause found after 30+ research agents, WAYLAND_DEBUG tracing, strace wire protocol analysis, and libwayland source audit.
Changed
- deps: wgpu v0.29.8 → v0.29.9 (SHM triple-buffer freeze:
bufferBusyMapfix +roundtrip_queuedispatch) - ci: Remove
fail_ci_if_errorfrom Codecov (GPG infrastructure issue)
v0.41.5
Fixed
- Window creation: hidden-then-show pattern — windows created hidden, shown after GPU init. Eliminates WM_SETFOCUS loss, black flash, and focus race on all platforms. Matches GLFW, Ebiten, SDL3, winit, Flutter.
- Win32: GLFW/Ebiten focus pattern —
ShowWindow(SW_SHOWNA)+BringWindowToTop+SetForegroundWindow+SetFocusafter handle registration. - All platforms unified —
Show()added to internalPlatformWindowinterface. Windows: deferred show. macOS: extracted fromCreateWindow. X11:MapWindowdeferred. Wayland/Browser: no-op.
Changed
- deps: wgpu v0.29.4 → v0.29.7
- Fence ordering fix (glFenceSync before glFlush)
Fence.Signalreturns error (Rust parity)- Wayland SIGSEGV fix (#292) —
obtainWlShmmoved from lazy render-thread init to eagerConfigure()on main thread. Eliminates race betweenwl_display_roundtripand concurrent event dispatch.
Research
- 16 research agents across 3 rounds
- Enterprise references verified: GLFW, Ebiten, SDL3, winit, Flutter, Qt6
- Raymond Chen: "Saving the window handle too late"
- Wayland
wl_proxy.displayat offset 0x18 confirmed via libwayland struct layout
v0.41.4
Fixed
- Wayland Vulkan: app event queue separation (ADR-041 Phase 4, #292) — all app Wayland objects moved to custom
wl_event_queue. Default queue left for Mesa Vulkan WSI. Prevents dispatch from firing Mesa's internalwl_buffer.releasecallbacks. Enterprise pattern from GLFW/SDL3. - Wayland CSD thread safety —
DispatchCSDEvents()holdsdisplayMufor thread-safewl_display_flush.
Changed
- deps: wgpu v0.29.4 (Wayland GLES wl_egl_window + Software wl_shm + VK_ERROR_SURFACE_LOST), goffi v0.5.3
Full Changelog: v0.41.3...v0.41.4
v0.41.3
Fixed
- Wayland SIGSEGV in vkQueuePresentKHR (ADR-041, #292) — two fixes:
- Configure gate: blocking
WaitForConfigure()loop (SDL3/winit pattern). xdg-shell spec requiresxdg_surface.configurebefore first buffer attach. - Display thread safety:
displayMumutex serializeswl_displayaccess between main thread (event dispatch) and render thread (Vulkan WSI).DisplayLockeroptional interface — no-op on X11/Windows/macOS/WASM.
- Configure gate: blocking
Fixes crash on all Wayland compositors (GNOME, KDE, Sway) with any GPU vendor. Tested users: please verify with go get github.com/gogpu/gogpu@v0.41.3.
Full Changelog: v0.41.2...v0.41.3
v0.41.2
Fixed
- D-Bus flag: NO_REPLY_EXPECTED was 0x02 (NO_AUTO_START), now 0x01 — wrong flag could prevent AppMenu registrar from starting on socket-activated desktop environments.
- DRY refactor:
dbusAssembleMsgextracted as shared function (dbus_linux.go), eliminates duplication between file dialog and menu D-Bus code. stopChshutdown logging —serve()now distinguishes intentional shutdown from unexpected connection loss.
Full Changelog: v0.41.1...v0.41.2