diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 9bff171..f16d18f 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-12: DEBT-0036 was narrowed again. `Canvas::stroke_commit` now reuses + `legacy_canvas_stroke_composite_services.h` for commit-time final stroke + `kShader::CompDraw` binding and composite/pattern/dual uniform writes. + Texture/framebuffer binding, copy ordering, layer dirty mutation, and + non-stroke composite callers remain retained legacy execution. - 2026-06-12: DEBT-0036 was narrowed again. Canvas stroke padding and commit dilate shader setup now route retained `kShader::StrokePad` and `kShader::StrokeDilate` binding/uniform writes through diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 096931f..6855cfa 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -1350,11 +1350,12 @@ OpenGL stroke execution service seam. Live stroke `kShader::Stroke` binding, setup, blend, pattern, and per-sample uniform writes now pass through `legacy_canvas_stroke_shader_services.h`. Live draw-merge and preview final stroke composite `kShader::CompDraw` setup now pass through -`legacy_canvas_stroke_composite_services.h`. Stroke padding and commit dilate -`kShader::StrokePad`/`kShader::StrokeDilate` setup now pass through -`legacy_canvas_stroke_edge_services.h`, leaving RTT/texture ownership, -dirty-box policy, checkerboard/commit composite shaders, quad expansion, and -retained callback execution under `DEBT-0036`. +`legacy_canvas_stroke_composite_services.h`, and `Canvas::stroke_commit` now +reuses that same composite service for commit-time final stroke compositing. +Stroke padding and commit dilate `kShader::StrokePad`/`kShader::StrokeDilate` +setup now pass through `legacy_canvas_stroke_edge_services.h`, leaving +RTT/texture ownership, dirty-box policy, checkerboard/non-stroke composite +shaders, quad expansion, and retained callback execution under `DEBT-0036`. It also owns renderer API texture-format to OpenGL internal/pixel/component token mapping, including depth-stencil formats, for future backend texture objects. `Texture2D` 2D texture binding, upload, diff --git a/src/canvas.cpp b/src/canvas.cpp index 473ef12..38922a9 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1059,30 +1059,29 @@ void Canvas::stroke_commit() 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, m_size); - ShaderManager::u_float(kShaderUniform::Alpha, 1); - ShaderManager::u_int(kShaderUniform::Mask, m_smask_active); - ShaderManager::u_int(kShaderUniform::Lock, m_layers[m_current_layer_idx]->m_alpha_locked); - ShaderManager::u_int(kShaderUniform::UseFragcoord, false); - ShaderManager::u_int(kShaderUniform::BlendMode, b->m_blend_mode); - ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f)); - ShaderManager::u_int(kShaderUniform::UseDual, stroke_material.composite_pass.use_dual); - ShaderManager::u_int(kShaderUniform::DualBlendMode, stroke_material.composite_pass.dual_blend_mode); - ShaderManager::u_float(kShaderUniform::DualAlpha, stroke_material.composite_pass.dual_alpha); - ShaderManager::u_int(kShaderUniform::UsePattern, stroke_material.composite_pass.use_pattern); - 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, m_pattern_offset); + pp::panopainter::setup_legacy_stroke_composite_shader( + pp::panopainter::LegacyStrokeCompositeUniforms { + .resolution = 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 = m_pattern_offset, + }, + .mvp = glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f), + .layer_alpha = 1.0f, + .alpha_lock = m_layers[m_current_layer_idx]->m_alpha_locked, + .mask_enabled = m_smask_active, + .use_fragcoord = false, + .blend_mode = b->m_blend_mode, + .use_dual = stroke_material.composite_pass.use_dual, + .dual_blend_mode = stroke_material.composite_pass.dual_blend_mode, + .dual_alpha = stroke_material.composite_pass.dual_alpha, + .use_pattern = stroke_material.composite_pass.use_pattern, + }); set_active_texture_unit(0); m_tex2[i].bind();