Tags: gogpu/ui
Tags
feat: pluggable DebugOverlay system (ADR-066) + deps cascade (ADR-067) * feat: migrate dirty widget overlay to pluggable DebugOverlay system (ADR-066) - dirtyWidgetDebugOverlay implements gpucontext.DebugOverlay - Registers with gogpu compositor via RegisterDebugOverlay - Removed inline overlay rendering from desktop.draw() - GOGPU_DEBUG_DIRTY=overlay (was =1, pre-v1.0 clean cut) - Self-sustaining render loop via Draw() return value Part of: gogpu#437 * docs: GOGPU_DEBUG_DAMAGE=1 → =overlay, GOGPU_DEBUG_DIRTY=1 → =overlay * fix: remove strings import, simplify GOGPU_DEBUG_DAMAGE check * chore(deps): cascade update gg v0.51.0, gogpu v0.51.0, gpucontext v0.26.0, wgpu v0.31.0 ADR-065/066 damage source registration + pluggable debug overlay system. CHANGELOG updated for v0.1.52. * chore(deps): cascade update gg v0.52.0, gogpu v0.52.0, gpucontext v0.27.0 (ADR-067)
feat: Viewport3D widget, OS file DnD bridge, Wave 2 fixes (#150, #177, … …#178, #180, #189) (#192) * feat(dnd): OS file drop bridge with KindFile constant (#189) Add OS file drag-and-drop support bridging gogpu platform events into the ui dnd system: - dnd/file.go: KindFile constant and FilePayload type for OS file drops - dnd/manager.go: DropExternal() delivers atomic external drops to targets - app/window.go: DndManager() getter with lazy initialization - desktop/desktop.go: OnDragDrop bridge from gogpu App to dnd.Manager - Bump gogpu dependency to v0.45.0 for OnDragDrop API * feat(compositor): ExternalTextureLayer for external GPU content Add ExternalTextureLayer to the compositor Layer Tree for blitting pre-rendered GPU textures from external producers (3D viewports, video players, custom shaders). Flutter TextureLayer pattern. - compositor/external_texture_layer.go: leaf layer holding TextureView - compositor/external_texture_layer_test.go: interface compliance tests - desktop/desktop.go: compositeFromTreeRecursive handles the new layer type * feat(viewport3d): GPU viewport widget — Flutter Texture pattern (#150) Add Viewport3D widget that owns an offscreen GPU texture for external rendering (3D scenes, video, custom shaders). Flutter Texture pattern: external producer renders into texture, compositor blits it. - core/viewport3d/: Widget, functional options (Size, OnRender, Continuous) - widget/context.go: GPUTextureProvider interface for texture creation - Deferred texture init (first Draw, not Mount) for headless safety - RepaintBoundary for compositor isolation - Lifecycle.Unmount releases GPU texture - 14 tests covering layout, rendering modes, lifecycle, accessibility * style(viewport3d): gofmt alignment fix * chore(deps): update gogpu v0.45.1 (full DnD) + CHANGELOG v0.1.48 - gogpu v0.45.0 → v0.45.1: complete OS drag-and-drop on all 4 platforms - CHANGELOG: full v0.1.48 scope (Viewport3D, DnD bridge, Wave 2 fixes, deps) * docs(examples): add filedrop and viewport3d examples - filedrop: OS file drag-and-drop via dnd.Manager + reactive signal list - viewport3d: GPU viewport widget in standard layout with controls * docs: add filedrop + viewport3d examples to README
fix: widget lifecycle correctness sweep (#171, #173, #174, #175, #181, … …#182) (#186) * fix(listview): unmount evicted decorators + mount row content (#173, #174) Evicted decorators were overwritten without UnmountTree, leaking GPU scenes and signal bindings. New decorators from Content[C].Render were never mounted, so child signal bindings were dead. Changes: - cleanupWidget helper calls UnmountTree on evicted widgets - fullRebuild/incrementalUpdate unmount old widgets before replacement - clear() unmounts all widgets before zeroing - buildDecorator calls MountTree after creation when ctx is available - cache.update() now accepts widget.Context (passed from Draw) * fix(gridview): unmount evicted cells + mount after Content[C].Render (#181) Cell widgets from Content[C].Render were never mounted (signal bindings dead) and never unmounted on eviction (scene/binding leak). Changes: - cellCache.update unmounts old widgets before rebuilding - cellCache.clear unmounts all widgets - New cells are mounted with MountTree when ctx is available - cellCache.update accepts widget.Context parameter * fix(overlay): wire MountTree/UnmountTree into push/pop lifecycle (#171) Overlay containers were pushed/popped without mount/unmount calls, leaking signal bindings and goroutines in content widgets. Changes: - PushOverlay calls MountTree on the container after pushing - PopOverlay calls UnmountTree on the popped container - RemoveOverlay unmounts the target and all overlays above it (matching overlay.Stack.Remove stack semantics) * fix(app): add Window.Close teardown — stop pumper, unmount trees (#175) Window had no Close method, so the animation pumper goroutine leaked on window close, and widget trees were never unmounted. Changes: - Window.Close() stops animPumper, unmounts all overlays, unmounts root - desktop.Run OnClose callback calls Window.Close before releasing GPU - Close is idempotent (safe to call multiple times) * fix(linechart): route invalidation through scheduler for goroutine safety (#182) PushValue, AddSeries, ClearSeries called SetNeedsRedraw directly from arbitrary goroutines. SetNeedsRedraw propagates upward through the parent chain which is not thread-safe. Changes: - Add scheduler field, stored during Mount, cleared during Unmount - requestRedraw helper routes through scheduler.MarkDirty when available, falls back to direct SetNeedsRedraw for unmounted usage - Replace all SetNeedsRedraw(true) calls with requestRedraw() * test(lifecycle): 28 regression tests + docs for v0.1.46 - listview lifecycle_test.go: mount/unmount on scroll, eviction, clear - gridview lifecycle_test.go: cell mount/unmount, update, invalidate - overlay_lifecycle_test.go: push/pop lifecycle, signal bindings - window_close_test.go: close idempotency, unmount, stop pumper - linechart safety_test.go: concurrent PushValue, scheduler routing - CHANGELOG v0.1.46, ROADMAP version update
chore(deps): update ecosystem deps + docs refresh for v0.1.45 (#185) - gg v0.50.4 → v0.50.6 (unified draw queue ADR-051/052, three-tier clip ADR-052) - gogpu v0.44.1 → v0.44.8 (Wayland fractional scale, frame lifecycle) - wgpu v0.30.10 → v0.30.21 (software backend fixes, WriteTexture, blit optimization) - signals v0.1.0 → v0.1.1 - README: 26 widgets, 70 painters, backend selection, Android, software optimization - ROADMAP: unified pipeline, 4-tier software optimization roadmap, Android - CHANGELOG: software optimization roadmap with gg CPU rasterization tier - ARCHITECTURE: deps update
chore(deps): update gg v0.50.4 + ARCHITECTURE.md refresh (#168) - gg v0.50.3 → v0.50.4 (composite hardening) - x/image v0.43.0 → v0.44.0, x/text v0.39.0 → v0.40.0 - ARCHITECTURE.md: 26 widgets, 4 design systems (70 painters), DevTools theme, per-widget layout caching (ADR-032), removed Engine references (CACHE-030)
PreviousNext