From b46b2c3184f149f47dd0a5b7025a24e61753f811 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 13 Jun 2026 05:15:39 +0200 Subject: [PATCH] Route NodeCanvas stroke composite setup through helper --- docs/modernization/debt.md | 5 ++++ docs/modernization/roadmap.md | 4 +++ src/node_canvas.cpp | 47 ++++++++++++++++++----------------- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 5d93f0f..77538a8 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -18,6 +18,11 @@ agent or engineer to remove them without reconstructing context from chat. ## Recent Reductions +- 2026-06-13: DEBT-0036 was narrowed again. `NodeCanvas` live temporary-stroke + `CompDraw` shader setup now routes through + `legacy_canvas_stroke_composite_services.h`; the retained node path still + owns per-onion-frame alpha updates, texture binding, temporary stroke texture + selection, and draw execution. - 2026-06-13: DEBT-0036 was narrowed again. `NodeStrokePreview` preview background checkerboard shader setup now routes through `legacy_canvas_draw_merge_services.h`, preserving the existing colorize diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index e9a5fe5..16e0833 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -3001,6 +3001,10 @@ Results: draw-merge shader setup helper for checkerboard uniforms, preserving its colorize condition and preview MVP while leaving capture ordering, texture copies, stroke setup, and draw execution in the retained preview path. +- `NodeCanvas` live temporary-stroke drawing now shares the retained stroke + composite shader setup helper for static `CompDraw` uniforms, while keeping + per-onion-frame alpha updates, texture binding, temporary stroke texture + selection, and draw execution in the retained node path. - `Canvas::stroke_draw_mix` now shares the retained stroke composite shader helper for mixer-pass `CompDraw` setup, while preserving its caller-specific texture slot uniforms. Mixer framebuffer/scissor state, sampler and texture diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index d4ede77..463e105 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -13,6 +13,7 @@ #include "app.h" #include "node_panel_grid.h" #include "legacy_canvas_draw_merge_services.h" +#include "legacy_canvas_stroke_composite_services.h" #include "legacy_preference_storage.h" #include "legacy_ui_gl_dispatch.h" #include "legacy_ui_overlay_services.h" @@ -523,29 +524,29 @@ void NodeCanvas::draw() if (b->m_pattern_flipx) patt_scale.x *= -1.f; if (b->m_pattern_flipy) patt_scale.y *= -1.f; - ShaderManager::use(kShader::CompDraw); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_int(kShaderUniform::TexStroke, 1); - ShaderManager::u_int(kShaderUniform::TexMask, 2); - ShaderManager::u_int(kShaderUniform::TexDual, 3); - ShaderManager::u_int(kShaderUniform::TexPattern, 4); - ShaderManager::u_vec2(kShaderUniform::Resolution, Canvas::I->m_size); - ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active); - ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index]->m_alpha_locked); - ShaderManager::u_int(kShaderUniform::UseFragcoord, false); - ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); - ShaderManager::u_int(kShaderUniform::UseDual, b->m_dual_enabled); - ShaderManager::u_int(kShaderUniform::DualBlendMode, b->m_dual_blend_mode); - ShaderManager::u_float(kShaderUniform::DualAlpha, b->m_dual_opacity); - ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample); - ShaderManager::u_vec2(kShaderUniform::PatternScale, patt_scale); - ShaderManager::u_float(kShaderUniform::PatternInvert, b->m_pattern_invert); - ShaderManager::u_float(kShaderUniform::PatternBright, b->m_pattern_brightness); - ShaderManager::u_float(kShaderUniform::PatternContrast, b->m_pattern_contrast); - ShaderManager::u_float(kShaderUniform::PatternDepth, b->m_pattern_depth); - ShaderManager::u_int(kShaderUniform::PatternBlendMode, b->m_pattern_blend_mode); - ShaderManager::u_vec2(kShaderUniform::PatternOffset, Canvas::I->m_pattern_offset); + pp::panopainter::setup_legacy_stroke_composite_shader( + pp::panopainter::LegacyStrokeCompositeUniforms { + .resolution = Canvas::I->m_size, + .pattern = { + .scale = patt_scale, + .invert = static_cast(b->m_pattern_invert), + .brightness = b->m_pattern_brightness, + .contrast = b->m_pattern_contrast, + .depth = b->m_pattern_depth, + .blend_mode = b->m_pattern_blend_mode, + .offset = Canvas::I->m_pattern_offset, + }, + .mvp = plane_mvp_z, + .layer_alpha = 1.0f, + .alpha_lock = m_canvas->m_layers[layer_index]->m_alpha_locked, + .mask_enabled = m_canvas->m_smask_active, + .use_fragcoord = false, + .blend_mode = b->m_blend_mode, + .use_dual = b->m_dual_enabled, + .dual_blend_mode = b->m_dual_blend_mode, + .dual_alpha = b->m_dual_opacity, + .use_pattern = b->m_pattern_enabled && !b->m_pattern_eachsample, + }); set_active_texture_unit(1); m_canvas->m_tmp[plane_index].bindTexture();