Route NodeCanvas stroke composite setup through helper

This commit is contained in:
2026-06-13 05:15:39 +02:00
parent ac78358022
commit b46b2c3184
3 changed files with 33 additions and 23 deletions

View File

@@ -18,6 +18,11 @@ agent or engineer to remove them without reconstructing context from chat.
## Recent Reductions ## 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 - 2026-06-13: DEBT-0036 was narrowed again. `NodeStrokePreview` preview
background checkerboard shader setup now routes through background checkerboard shader setup now routes through
`legacy_canvas_draw_merge_services.h`, preserving the existing colorize `legacy_canvas_draw_merge_services.h`, preserving the existing colorize

View File

@@ -3001,6 +3001,10 @@ Results:
draw-merge shader setup helper for checkerboard uniforms, preserving its draw-merge shader setup helper for checkerboard uniforms, preserving its
colorize condition and preview MVP while leaving capture ordering, texture colorize condition and preview MVP while leaving capture ordering, texture
copies, stroke setup, and draw execution in the retained preview path. 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 - `Canvas::stroke_draw_mix` now shares the retained stroke composite shader
helper for mixer-pass `CompDraw` setup, while preserving its caller-specific helper for mixer-pass `CompDraw` setup, while preserving its caller-specific
texture slot uniforms. Mixer framebuffer/scissor state, sampler and texture texture slot uniforms. Mixer framebuffer/scissor state, sampler and texture

View File

@@ -13,6 +13,7 @@
#include "app.h" #include "app.h"
#include "node_panel_grid.h" #include "node_panel_grid.h"
#include "legacy_canvas_draw_merge_services.h" #include "legacy_canvas_draw_merge_services.h"
#include "legacy_canvas_stroke_composite_services.h"
#include "legacy_preference_storage.h" #include "legacy_preference_storage.h"
#include "legacy_ui_gl_dispatch.h" #include "legacy_ui_gl_dispatch.h"
#include "legacy_ui_overlay_services.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_flipx) patt_scale.x *= -1.f;
if (b->m_pattern_flipy) patt_scale.y *= -1.f; if (b->m_pattern_flipy) patt_scale.y *= -1.f;
ShaderManager::use(kShader::CompDraw); pp::panopainter::setup_legacy_stroke_composite_shader(
ShaderManager::u_int(kShaderUniform::Tex, 0); pp::panopainter::LegacyStrokeCompositeUniforms {
ShaderManager::u_int(kShaderUniform::TexStroke, 1); .resolution = Canvas::I->m_size,
ShaderManager::u_int(kShaderUniform::TexMask, 2); .pattern = {
ShaderManager::u_int(kShaderUniform::TexDual, 3); .scale = patt_scale,
ShaderManager::u_int(kShaderUniform::TexPattern, 4); .invert = static_cast<float>(b->m_pattern_invert),
ShaderManager::u_vec2(kShaderUniform::Resolution, Canvas::I->m_size); .brightness = b->m_pattern_brightness,
ShaderManager::u_int(kShaderUniform::Mask, m_canvas->m_smask_active); .contrast = b->m_pattern_contrast,
ShaderManager::u_int(kShaderUniform::Lock, m_canvas->m_layers[layer_index]->m_alpha_locked); .depth = b->m_pattern_depth,
ShaderManager::u_int(kShaderUniform::UseFragcoord, false); .blend_mode = b->m_pattern_blend_mode,
ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode); .offset = Canvas::I->m_pattern_offset,
ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); },
ShaderManager::u_int(kShaderUniform::UseDual, b->m_dual_enabled); .mvp = plane_mvp_z,
ShaderManager::u_int(kShaderUniform::DualBlendMode, b->m_dual_blend_mode); .layer_alpha = 1.0f,
ShaderManager::u_float(kShaderUniform::DualAlpha, b->m_dual_opacity); .alpha_lock = m_canvas->m_layers[layer_index]->m_alpha_locked,
ShaderManager::u_int(kShaderUniform::UsePattern, b->m_pattern_enabled && !b->m_pattern_eachsample); .mask_enabled = m_canvas->m_smask_active,
ShaderManager::u_vec2(kShaderUniform::PatternScale, patt_scale); .use_fragcoord = false,
ShaderManager::u_float(kShaderUniform::PatternInvert, b->m_pattern_invert); .blend_mode = b->m_blend_mode,
ShaderManager::u_float(kShaderUniform::PatternBright, b->m_pattern_brightness); .use_dual = b->m_dual_enabled,
ShaderManager::u_float(kShaderUniform::PatternContrast, b->m_pattern_contrast); .dual_blend_mode = b->m_dual_blend_mode,
ShaderManager::u_float(kShaderUniform::PatternDepth, b->m_pattern_depth); .dual_alpha = b->m_dual_opacity,
ShaderManager::u_int(kShaderUniform::PatternBlendMode, b->m_pattern_blend_mode); .use_pattern = b->m_pattern_enabled && !b->m_pattern_eachsample,
ShaderManager::u_vec2(kShaderUniform::PatternOffset, Canvas::I->m_pattern_offset); });
set_active_texture_unit(1); set_active_texture_unit(1);
m_canvas->m_tmp[plane_index].bindTexture(); m_canvas->m_tmp[plane_index].bindTexture();