Thin canvas draw seams and own grid worker

This commit is contained in:
2026-06-16 07:25:57 +02:00
parent 3366b54c7f
commit 17b603536b
7 changed files with 179 additions and 112 deletions

View File

@@ -132,8 +132,11 @@ Current slice:
through `legacy_node_stroke_preview_execution_services.h`, but the preview
node still owns most live-pass and retained GL resource execution.
- `NodeCanvas` display resolve plus cache-to-screen checkerboard/cache-texture
composite now route through `legacy_canvas_draw_merge_services.h`, but
broader canvas draw orchestration is still inline.
composite now route through `legacy_canvas_draw_merge_services.h`.
- `NodeCanvas` smoothing-mask overlay, smoothing-mask face pass, grid keepalive
draw, heightmap draw, and current-mode draw now also route through
`execute_legacy_canvas_draw_merge_post_draw(...)`, but broader canvas draw
orchestration is still inline.
Write scope:
- `src/node_stroke_preview.cpp`
@@ -348,9 +351,9 @@ Mini-model packet:
Status: In Progress
Why now:
Canvas imports/exports/saves, cloud transfer, brush import/export, grid
lightmap work, stroke preview, and event persistence still launch detached
threads. That is not a safe modernization foundation.
The biggest app-facing async families have been moved off detached launches,
but retained worker ownership and ad hoc runtime control are still not a safe
modernization foundation.
Current slice:
- app-owned render/UI runtime queues and cloud worker ownership are already
@@ -361,8 +364,9 @@ Current slice:
workers with explicit UI-thread handoff
- canvas async import/export/save/open and timelapse export now also use owned
worker queues instead of detached threads
- preview background rendering and recording thread ownership now also use
`std::jthread`, but their retained loop/control flow is still open
- preview background rendering, recording, and the retained
`NodePanelGrid::bake_uvs()` worker now also use `std::jthread`, but their
retained loop/control flow is still open
Write scope:
- `src/canvas.cpp`
@@ -563,6 +567,9 @@ Current slice:
`App::set_platform_services()`
- `platform_apple` clipboard, display/share, cursor, and save-ui-state calls
now route through injected Apple bridge callbacks instead of `App::I`
- `LegacyPlatformServices::prepare_storage_paths()` now routes Apple path
preparation through a narrow local helper instead of reading `App::I`
directly in that method body
- retained Apple callback injection and broader `platform_legacy` singleton
reach are still open