Route texture alpha setup through helper

This commit is contained in:
2026-06-13 05:48:47 +02:00
parent 14ea181ec3
commit 5ab06a42e3
6 changed files with 70 additions and 24 deletions

View File

@@ -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,

View File

@@ -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

View File

@@ -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();

View File

@@ -1393,11 +1393,13 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> 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();

View File

@@ -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

View File

@@ -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++)
{