From 5ab06a42e350bb66779e8e606cb28893bf03a2dd Mon Sep 17 00:00:00 2001 From: omigamedev Date: Sat, 13 Jun 2026 05:48:47 +0200 Subject: [PATCH] Route texture alpha setup through helper --- docs/modernization/debt.md | 6 ++++++ docs/modernization/roadmap.md | 5 +++++ src/app_vr.cpp | 12 +++++++----- src/canvas.cpp | 24 ++++++++++++++---------- src/legacy_canvas_draw_merge_services.h | 24 ++++++++++++++++++++++++ src/node_canvas.cpp | 23 ++++++++++++++--------- 6 files changed, 70 insertions(+), 24 deletions(-) diff --git a/docs/modernization/debt.md b/docs/modernization/debt.md index 6a3e107..935c053 100644 --- a/docs/modernization/debt.md +++ b/docs/modernization/debt.md @@ -18,6 +18,12 @@ agent or engineer to remove them without reconstructing context from chat. ## Recent Reductions +- 2026-06-13: DEBT-0036 was narrowed again. Retained `TextureAlpha` shader + setup now routes through `legacy_canvas_draw_merge_services.h` for Canvas + draw-merge layer redraws, depth export merged-layer rendering, NodeCanvas + cached/live layer redraws, and desktop VR layer redraws; those paths still + own sampler/texture binding, render-task ordering, per-frame alpha updates, + and draw execution. - 2026-06-13: DEBT-0036 was narrowed again. `NodeCanvas` density-resolve and desktop VR UI `Texture` shader setup now route through `legacy_canvas_draw_merge_services.h`; those paths still own render target, diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index 676b5c2..c93808d 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -3051,6 +3051,11 @@ Results: share the retained draw-merge texture shader setup helper for `Texture`, `Tex`, and `MVP` setup. Texture/sampler binding, viewport/state setup, and draw execution remain in the node paths. +- Retained `TextureAlpha` setup now shares the draw-merge shader setup helper + for Canvas draw-merge layer redraws, depth export merged-layer rendering, + NodeCanvas cached/live layer redraws, and desktop VR layer redraws, while + sampler/texture binding, render-task ordering, per-frame alpha updates, and + draw execution remain in retained code. - `NodeCanvas` density-resolve drawing and desktop VR UI drawing now share the retained draw-merge texture shader setup helper, while render target, sampler/texture binding, viewport/state restoration, and draw execution diff --git a/src/app_vr.cpp b/src/app_vr.cpp index f5c121f..8fa3f54 100644 --- a/src/app_vr.cpp +++ b/src/app_vr.cpp @@ -398,11 +398,13 @@ void App::vr_draw(const glm::mat4& proj, const glm::mat4& camera, const glm::mat else { sampler.bind(0); - ShaderManager::use(kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_float(kShaderUniform::Alpha, canvas->m_canvas->m_layers[layer_index]->m_opacity); - ShaderManager::u_int(kShaderUniform::Highlight, canvas->m_canvas->m_layers[layer_index]->m_hightlight); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms { + .mvp = plane_mvp_z, + .texture_slot = 0, + .alpha = canvas->m_canvas->m_layers[layer_index]->m_opacity, + .highlight = canvas->m_canvas->m_layers[layer_index]->m_hightlight, + }); set_active_texture_unit(0); canvas->m_canvas->m_layers[layer_index]->rtt(plane_index).bindTexture(); diff --git a/src/canvas.cpp b/src/canvas.cpp index ec672f9..ca62ee2 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -1393,11 +1393,13 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array faces /*= SI else { m_cam_fov < 20.f ? m_sampler_nearest.bind(0) : m_sampler.bind(0); - ShaderManager::use(kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index]->m_opacity); - ShaderManager::u_int(kShaderUniform::Highlight, m_layers[layer_index]->m_hightlight); - ShaderManager::u_mat4(kShaderUniform::MVP, ortho); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms { + .mvp = ortho, + .texture_slot = 0, + .alpha = m_layers[layer_index]->m_opacity, + .highlight = m_layers[layer_index]->m_hightlight, + }); set_active_texture_unit(0); m_layers[layer_index]->rtt(plane_index).bindTexture(); @@ -2216,11 +2218,13 @@ void Canvas::export_depth_thread(std::string file_name) glm::scale(glm::vec3(2)); m_sampler.bind(0); - ShaderManager::use(kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_float(kShaderUniform::Alpha, 1.f); - ShaderManager::u_int(kShaderUniform::Highlight, false); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms { + .mvp = plane_mvp_z, + .texture_slot = 0, + .alpha = 1.f, + .highlight = false, + }); set_active_texture_unit(0); m_layers_merge.rtt(plane_index).bindTexture(); diff --git a/src/legacy_canvas_draw_merge_services.h b/src/legacy_canvas_draw_merge_services.h index 9b58785..36b4bc2 100644 --- a/src/legacy_canvas_draw_merge_services.h +++ b/src/legacy_canvas_draw_merge_services.h @@ -16,6 +16,13 @@ struct LegacyCanvasDrawMergeTextureUniforms { int texture_slot = 0; }; +struct LegacyCanvasDrawMergeTextureAlphaUniforms { + glm::mat4 mvp { 1.0f }; + int texture_slot = 0; + float alpha = 1.0f; + int highlight = 0; +}; + struct LegacyCanvasDrawMergeTextureBlendUniforms { glm::mat4 mvp { 1.0f }; int texture_slot = 0; @@ -72,6 +79,23 @@ inline void setup_legacy_canvas_draw_merge_texture_shader( setup_legacy_canvas_draw_merge_texture_shader(uniforms, legacy_shader_manager_draw_merge_execution()); } +inline void setup_legacy_canvas_draw_merge_texture_alpha_shader( + const LegacyCanvasDrawMergeTextureAlphaUniforms& uniforms, + const LegacyCanvasDrawMergeShaderExecution& execution) noexcept +{ + execution.use_shader(kShader::TextureAlpha); + execution.set_int(kShaderUniform::Tex, uniforms.texture_slot); + execution.set_float(kShaderUniform::Alpha, uniforms.alpha); + execution.set_int(kShaderUniform::Highlight, uniforms.highlight); + execution.set_mat4(kShaderUniform::MVP, uniforms.mvp); +} + +inline void setup_legacy_canvas_draw_merge_texture_alpha_shader( + const LegacyCanvasDrawMergeTextureAlphaUniforms& uniforms) +{ + setup_legacy_canvas_draw_merge_texture_alpha_shader(uniforms, legacy_shader_manager_draw_merge_execution()); +} + inline void setup_legacy_canvas_draw_merge_texture_blend_shader( const LegacyCanvasDrawMergeTextureBlendUniforms& uniforms, const LegacyCanvasDrawMergeShaderExecution& execution) noexcept diff --git a/src/node_canvas.cpp b/src/node_canvas.cpp index dfa4ef0..bb012fc 100644 --- a/src/node_canvas.cpp +++ b/src/node_canvas.cpp @@ -392,11 +392,13 @@ void NodeCanvas::draw() glm::translate(glm::vec3(0, 0, -1)); m_sampler.bind(0); - ShaderManager::use(kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_float(kShaderUniform::Alpha, 1.f); - ShaderManager::u_int(kShaderUniform::Highlight, false); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms { + .mvp = plane_mvp_z, + .texture_slot = 0, + .alpha = 1.f, + .highlight = false, + }); set_active_texture_unit(0); m_canvas->m_layers_merge.rtt(plane_index).bindTexture(); @@ -583,10 +585,13 @@ void NodeCanvas::draw() else { m_canvas->m_cam_fov < 20.f ? m_sampler_nearest.bind(0) : m_sampler.bind(0); - ShaderManager::use(kShader::TextureAlpha); - ShaderManager::u_int(kShaderUniform::Tex, 0); - ShaderManager::u_int(kShaderUniform::Highlight, m_canvas->m_layers[layer_index]->m_hightlight); - ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp_z); + pp::panopainter::setup_legacy_canvas_draw_merge_texture_alpha_shader( + pp::panopainter::LegacyCanvasDrawMergeTextureAlphaUniforms { + .mvp = plane_mvp_z, + .texture_slot = 0, + .alpha = 1.f, + .highlight = m_canvas->m_layers[layer_index]->m_hightlight, + }); for (int frame = onion_range.first_frame; frame <= onion_range.last_frame; frame++) {