diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 9dfb989..d1dd3f8 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -18,6 +18,14 @@ agent or engineer to remove them without reconstructing context from chat. ## Recent Reductions +- 2026-06-13: DEBT-0036 was narrowed again. `NodeImage` and + `NodeImageTexture` retained plain image `Texture` shader setup now routes + through `legacy_canvas_draw_merge_services.h`; the nodes still own + texture/sampler binding, atlas setup, blend state, and draw execution. +- 2026-06-13: DEBT-0036 was narrowed again. `Canvas::thumbnail_generate` + checkerboard and final `Texture` shader setup now route through + `legacy_canvas_draw_merge_services.h`; thumbnail generation still owns + destination copies, sampler/texture binding, readback, and draw execution. - 2026-06-13: DEBT-0036 was narrowed again. `Canvas::draw_objects` retained object composite `Texture` shader setup now routes through `legacy_canvas_draw_merge_services.h`; draw_objects still owns temporary diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 6e3caa5..1c4fe08 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -3021,6 +3021,10 @@ Results: stroke composite shader setup helper, while render-task ordering, framebuffer copy bounds, sampler/texture binding, and draw execution remain in retained canvas-mode code. +- `Canvas::thumbnail_generate` checkerboard redraw and final texture blending + now share the retained draw-merge shader setup helpers, while destination + copies, sampler/texture binding, readback, and draw execution remain in + retained Canvas code. - `Canvas::draw_objects` retained object compositing now shares the retained draw-merge texture shader setup helper, while temporary face readback, sampler/texture binding, draw execution, and dirty-box updates remain in @@ -3032,6 +3036,10 @@ Results: draw-merge shader setup helper for per-layer `TextureBlend` uniforms, while destination feedback copies, sampler/texture binding, grid redraw, readback, and draw execution remain in retained Canvas code. +- `NodeImage` and `NodeImageTexture` retained plain image drawing now share the + retained draw-merge texture shader setup helper for `Texture`, `Tex`, and + `MVP` setup. Texture/sampler binding, atlas setup, blend state, and draw + execution remain in the node paths. - `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/canvas.cpp b/src/canvas.cpp index c37ba13..bb93cdc 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -3031,15 +3031,19 @@ Image Canvas::thumbnail_generate(int w, int h) copy_framebuffer_to_texture_2d(0, 0, 0, 0, w, h); // draw the grid - ShaderManager::use(kShader::Checkerboard); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp); + pp::panopainter::setup_legacy_canvas_draw_merge_checkerboard_shader( + pp::panopainter::LegacyCanvasDrawMergeCheckerboardUniforms { + .mvp = plane_mvp, + }); m_face_plane.draw_fill(); // now blend with the background apply_canvas_capability(blend_state(), true); - ShaderManager::use(kShader::Texture); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f)); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureUniforms { + .mvp = glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f), + .texture_slot = 0, + }); m_sampler.bind(0); // linear m_plane.draw_fill(); diff --git a/src/node_image.cpp b/src/node_image.cpp index a9f78cb..8cede5c 100644 --- a/src/node_image.cpp +++ b/src/node_image.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include "legacy_canvas_draw_merge_services.h" #include "log.h" #include "legacy_ui_gl_dispatch.h" #include "node_image.h" @@ -109,13 +110,14 @@ void NodeImage::draw() ShaderManager::use(kShader::Atlas); ShaderManager::u_vec2(kShaderUniform::Tof, m_off); ShaderManager::u_vec2(kShaderUniform::Tsz, m_sz); + ShaderManager::u_int(kShaderUniform::Tex, 0); + ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp * glm::scale(glm::vec3(m_scale, 1.f))); } else { - ShaderManager::use(kShader::Texture); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_shader( + {.mvp = m_mvp * glm::scale(glm::vec3(m_scale, 1.f)), .texture_slot = 0}); } - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp * glm::scale(glm::vec3(m_scale, 1.f))); m_plane.draw_fill(); sampler.unbind(); pp::legacy::ui_gl::set_blend_enabled(false, "NodeImage"); diff --git a/src/node_image_texture.cpp b/src/node_image_texture.cpp index 1fd5b00..60d4107 100644 --- a/src/node_image_texture.cpp +++ b/src/node_image_texture.cpp @@ -1,4 +1,5 @@ #include "pch.h" +#include "legacy_canvas_draw_merge_services.h" #include "log.h" #include "legacy_ui_gl_dispatch.h" #include "node_image_texture.h" @@ -23,9 +24,7 @@ void NodeImageTexture::draw() auto& sampler = tex && tex->has_mips ? NodeImage::m_sampler_mips : NodeImage::m_sampler; sampler.bind(0); pp::legacy::ui_gl::set_blend_enabled(true, "NodeImageTexture"); - ShaderManager::use(kShader::Texture); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_mat4(kShaderUniform::MVP, m_mvp); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_shader({.mvp = m_mvp, .texture_slot = 0}); NodeImage::m_plane.draw_fill(); sampler.unbind(); pp::legacy::ui_gl::set_blend_enabled(false, "NodeImageTexture");