Thin canvas draw seams and own grid worker
This commit is contained in:
@@ -18,6 +18,22 @@ agent or engineer to remove them without reconstructing context from chat.
|
||||
|
||||
## Reductions
|
||||
|
||||
- 2026-06-16: `DEBT-0036` was narrowed again. `NodeCanvas` smoothing-mask
|
||||
overlay draw, smoothing-mask face pass, grid keepalive draw, heightmap draw,
|
||||
and current-mode draw now route through
|
||||
`execute_legacy_canvas_draw_merge_post_draw(...)` in
|
||||
`src/legacy_canvas_draw_merge_services.h` instead of living inline in
|
||||
`NodeCanvas::draw()`; broader canvas draw orchestration and retained GL
|
||||
resource ownership remain.
|
||||
- 2026-06-16: `DEBT-0036` was narrowed again. The retained
|
||||
`NodePanelGrid::bake_uvs()` worker now uses scoped `std::jthread` ownership
|
||||
instead of a raw local `std::thread`; retained bake execution, progress-loop
|
||||
polling, and grid rendering ownership remain.
|
||||
- 2026-06-16: `DEBT-0017` was narrowed again.
|
||||
`LegacyPlatformServices::prepare_storage_paths()` now routes Apple storage
|
||||
path setup through a local helper instead of reading `App::I` directly in
|
||||
the method body; the retained Apple fallback adapter and broader
|
||||
platform-to-app singleton reach remain.
|
||||
- 2026-06-16: `DEBT-0036` was narrowed again. `NodeStrokePreview` background
|
||||
preview execution now owns its worker as `std::jthread` with explicit stop,
|
||||
unblock, and join semantics instead of a raw `std::thread`; retained queue
|
||||
|
||||
@@ -102,13 +102,16 @@ Current architecture mismatches that must be treated as real blockers:
|
||||
app shell.
|
||||
- `pp_panopainter_ui` still depends on `pp_legacy_app`.
|
||||
- `Canvas`, `NodeCanvas`, and `NodeStrokePreview` still own too much live
|
||||
OpenGL execution around the renderer boundary.
|
||||
OpenGL execution around the renderer boundary, even though `NodeCanvas`
|
||||
display resolve, cache-to-screen composite, and post-draw mask/grid/current-
|
||||
mode sequencing now route through retained draw-merge helpers.
|
||||
- `app_layout.cpp` and `app_dialogs.cpp` are still mixed shell/controller files
|
||||
rather than thin composition/binding surfaces.
|
||||
- `App`, `Canvas`, `Node`, retained workers, and platform entrypoints still use
|
||||
global singleton reach, raw observer pointers, retained static worker
|
||||
ownership in several app families, and ad hoc mutex/condition-variable
|
||||
ownership.
|
||||
ownership, even though most previously detached or raw app-facing worker
|
||||
launches now use owned `std::jthread` or service-owned worker queues.
|
||||
- Modern C++23 usage exists in extracted components, especially `std::span`,
|
||||
explicit result/status objects, and a few concepts, but the live app still
|
||||
does not consistently express ownership, thread affinity, or renderer
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user