Extract draw merge temporary branch helper
This commit is contained in:
@@ -80,6 +80,11 @@ agent or engineer to remove them without reconstructing context from chat.
|
|||||||
composite setup now routes through `execute_canvas_draw_merge_temporary_composite(...)`;
|
composite setup now routes through `execute_canvas_draw_merge_temporary_composite(...)`;
|
||||||
setup, sampler, texture, draw, and unbind callbacks still remain retained in
|
setup, sampler, texture, draw, and unbind callbacks still remain retained in
|
||||||
the legacy Canvas path.
|
the legacy Canvas path.
|
||||||
|
- 2026-06-13: DEBT-0036 was narrowed again. `Canvas::draw_merge()` temporary
|
||||||
|
erase and paint branch wiring now routes through
|
||||||
|
`execute_legacy_canvas_draw_merge_temporary_composite(...)`; the retained
|
||||||
|
path still owns the concrete setup, sampler, texture, draw, and unbind
|
||||||
|
callbacks.
|
||||||
- 2026-06-13: DEBT-0036 was narrowed again. `NodeStrokePreview::draw_stroke_immediate()`
|
- 2026-06-13: DEBT-0036 was narrowed again. `NodeStrokePreview::draw_stroke_immediate()`
|
||||||
now routes retained preview feedback/material/composite planning plus stroke
|
now routes retained preview feedback/material/composite planning plus stroke
|
||||||
shader uniform assembly through
|
shader uniform assembly through
|
||||||
|
|||||||
@@ -660,6 +660,11 @@ Progress Notes:
|
|||||||
path still owns the concrete setup, sampler, texture, draw, and unbind
|
path still owns the concrete setup, sampler, texture, draw, and unbind
|
||||||
callbacks. Next slice should target another narrow draw-merge seam without
|
callbacks. Next slice should target another narrow draw-merge seam without
|
||||||
reopening the landed temporary-composite helper.
|
reopening the landed temporary-composite helper.
|
||||||
|
- 2026-06-13: `Canvas::draw_merge()` temporary erase and paint branch wiring
|
||||||
|
now routes through `execute_legacy_canvas_draw_merge_temporary_composite(...)`;
|
||||||
|
the retained path still owns the concrete setup, sampler, texture, draw, and
|
||||||
|
unbind callbacks. Next slice should target another narrow draw-merge seam
|
||||||
|
without reopening the landed temporary-composite helper.
|
||||||
- 2026-06-13: `pp_paint_renderer_stroke_execution_tests` now also covers
|
- 2026-06-13: `pp_paint_renderer_stroke_execution_tests` now also covers
|
||||||
retained frame-plan assembly for previous-sample projection mode and zoom
|
retained frame-plan assembly for previous-sample projection mode and zoom
|
||||||
scaling. Next slice should target the remaining preview/Canvas stroke
|
scaling. Next slice should target the remaining preview/Canvas stroke
|
||||||
|
|||||||
@@ -480,22 +480,6 @@ void Canvas::stroke_draw_mix(const glm::vec2& bb_min, const glm::vec2& bb_sz)
|
|||||||
gl.restore();
|
gl.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Setup, typename BindSamplers, typename BindTextures, typename Draw, typename UnbindTextures>
|
|
||||||
static void execute_canvas_draw_merge_temporary_composite(
|
|
||||||
Setup&& setup,
|
|
||||||
BindSamplers&& bind_samplers,
|
|
||||||
BindTextures&& bind_textures,
|
|
||||||
Draw&& draw,
|
|
||||||
UnbindTextures&& unbind_textures)
|
|
||||||
{
|
|
||||||
pp::panopainter::execute_legacy_canvas_stroke_temporary_composite(
|
|
||||||
std::forward<Setup>(setup),
|
|
||||||
std::forward<BindSamplers>(bind_samplers),
|
|
||||||
std::forward<BindTextures>(bind_textures),
|
|
||||||
std::forward<Draw>(draw),
|
|
||||||
std::forward<UnbindTextures>(unbind_textures));
|
|
||||||
}
|
|
||||||
|
|
||||||
std::array<std::vector<vertex_t>, 6> Canvas::stroke_draw_project(std::array<vertex_t, 4>& B, bool project_3d /*= false*/, glm::mat4 mv /*= glm::mat4(1)*/) const
|
std::array<std::vector<vertex_t>, 6> Canvas::stroke_draw_project(std::array<vertex_t, 4>& B, bool project_3d /*= false*/, glm::mat4 mv /*= glm::mat4(1)*/) const
|
||||||
{
|
{
|
||||||
// intersect P with the current face to clip diverging points from the plane
|
// intersect P with the current face to clip diverging points from the plane
|
||||||
@@ -1451,8 +1435,9 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
use_blend,
|
use_blend,
|
||||||
pp::panopainter::LegacyCanvasDrawMergeLayerCompositeExecution {
|
pp::panopainter::LegacyCanvasDrawMergeLayerCompositeExecution {
|
||||||
.execute_temporary_erase = [&] {
|
.execute_temporary_erase = [&] {
|
||||||
execute_canvas_draw_merge_temporary_composite(
|
pp::panopainter::execute_legacy_canvas_draw_merge_temporary_composite(
|
||||||
[&] {
|
pp::panopainter::LegacyCanvasDrawMergeTemporaryCompositeExecution {
|
||||||
|
.setup = [&] {
|
||||||
//ShaderManager::u_vec2(kShaderUniform::Resolution, zw(m_box) / zoom);
|
//ShaderManager::u_vec2(kShaderUniform::Resolution, zw(m_box) / zoom);
|
||||||
//ShaderManager::u_int(kShaderUniform::Lock, m_layers[layer_index]->m_alpha_locked);
|
//ShaderManager::u_int(kShaderUniform::Lock, m_layers[layer_index]->m_alpha_locked);
|
||||||
pp::panopainter::setup_legacy_stroke_erase_shader(
|
pp::panopainter::setup_legacy_stroke_erase_shader(
|
||||||
@@ -1465,12 +1450,12 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
.mask_enabled = m_smask_active,
|
.mask_enabled = m_smask_active,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[&] {
|
.bind_samplers = [&] {
|
||||||
m_sampler.bind(0);
|
m_sampler.bind(0);
|
||||||
m_sampler.bind(1);
|
m_sampler.bind(1);
|
||||||
m_sampler.bind(2);
|
m_sampler.bind(2);
|
||||||
},
|
},
|
||||||
[&] {
|
.bind_textures = [&] {
|
||||||
set_active_texture_unit(0);
|
set_active_texture_unit(0);
|
||||||
m_layers[layer_index]->rtt(plane_index).bindTexture();
|
m_layers[layer_index]->rtt(plane_index).bindTexture();
|
||||||
set_active_texture_unit(1);
|
set_active_texture_unit(1);
|
||||||
@@ -1478,15 +1463,16 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
set_active_texture_unit(2);
|
set_active_texture_unit(2);
|
||||||
m_smask.rtt(plane_index).bindTexture();
|
m_smask.rtt(plane_index).bindTexture();
|
||||||
},
|
},
|
||||||
[&] {
|
.draw = [&] {
|
||||||
m_plane.draw_fill();
|
m_plane.draw_fill();
|
||||||
},
|
},
|
||||||
[&] {
|
.unbind_textures = [&] {
|
||||||
m_smask.rtt(plane_index).unbindTexture();
|
m_smask.rtt(plane_index).unbindTexture();
|
||||||
set_active_texture_unit(1);
|
set_active_texture_unit(1);
|
||||||
m_tmp[plane_index].unbindTexture();
|
m_tmp[plane_index].unbindTexture();
|
||||||
set_active_texture_unit(0);
|
set_active_texture_unit(0);
|
||||||
m_layers[layer_index]->rtt(plane_index).unbindTexture();
|
m_layers[layer_index]->rtt(plane_index).unbindTexture();
|
||||||
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
.execute_temporary_paint = [&] {
|
.execute_temporary_paint = [&] {
|
||||||
@@ -1495,8 +1481,9 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
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;
|
||||||
|
|
||||||
execute_canvas_draw_merge_temporary_composite(
|
pp::panopainter::execute_legacy_canvas_draw_merge_temporary_composite(
|
||||||
[&] {
|
pp::panopainter::LegacyCanvasDrawMergeTemporaryCompositeExecution {
|
||||||
|
.setup = [&] {
|
||||||
pp::panopainter::setup_legacy_stroke_composite_shader(
|
pp::panopainter::setup_legacy_stroke_composite_shader(
|
||||||
pp::panopainter::LegacyStrokeCompositeUniforms {
|
pp::panopainter::LegacyStrokeCompositeUniforms {
|
||||||
.resolution = Canvas::I->m_size,
|
.resolution = Canvas::I->m_size,
|
||||||
@@ -1521,14 +1508,14 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
.use_pattern = stroke_material.composite_pass.use_pattern,
|
.use_pattern = stroke_material.composite_pass.use_pattern,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[&] {
|
.bind_samplers = [&] {
|
||||||
m_sampler.bind(0);
|
m_sampler.bind(0);
|
||||||
m_sampler.bind(1);
|
m_sampler.bind(1);
|
||||||
m_sampler.bind(2);
|
m_sampler.bind(2);
|
||||||
m_sampler.bind(3);
|
m_sampler.bind(3);
|
||||||
m_sampler_stencil.bind(4);
|
m_sampler_stencil.bind(4);
|
||||||
},
|
},
|
||||||
[&] {
|
.bind_textures = [&] {
|
||||||
set_active_texture_unit(0);
|
set_active_texture_unit(0);
|
||||||
m_layers[layer_index]->rtt(plane_index).bindTexture();
|
m_layers[layer_index]->rtt(plane_index).bindTexture();
|
||||||
set_active_texture_unit(1);
|
set_active_texture_unit(1);
|
||||||
@@ -1543,10 +1530,10 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
b->m_pattern_texture->bind() :
|
b->m_pattern_texture->bind() :
|
||||||
unbind_texture_2d();
|
unbind_texture_2d();
|
||||||
},
|
},
|
||||||
[&] {
|
.draw = [&] {
|
||||||
m_plane.draw_fill();
|
m_plane.draw_fill();
|
||||||
},
|
},
|
||||||
[&] {
|
.unbind_textures = [&] {
|
||||||
set_active_texture_unit(3);
|
set_active_texture_unit(3);
|
||||||
if (stroke_material.composite_pass.use_dual)
|
if (stroke_material.composite_pass.use_dual)
|
||||||
m_tmp_dual[plane_index].unbindTexture();
|
m_tmp_dual[plane_index].unbindTexture();
|
||||||
@@ -1556,6 +1543,7 @@ void Canvas::draw_merge(bool draw_checkerboard, std::array<bool, 6> faces /*= SI
|
|||||||
m_tmp[plane_index].unbindTexture();
|
m_tmp[plane_index].unbindTexture();
|
||||||
set_active_texture_unit(0);
|
set_active_texture_unit(0);
|
||||||
m_layers[layer_index]->rtt(plane_index).unbindTexture();
|
m_layers[layer_index]->rtt(plane_index).unbindTexture();
|
||||||
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
.execute_layer_texture = [&] {
|
.execute_layer_texture = [&] {
|
||||||
|
|||||||
@@ -94,6 +94,14 @@ struct LegacyCanvasDrawMergeLayerCompositeExecution {
|
|||||||
std::function<void()> execute_layer_blend;
|
std::function<void()> execute_layer_blend;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct LegacyCanvasDrawMergeTemporaryCompositeExecution {
|
||||||
|
std::function<void()> setup;
|
||||||
|
std::function<void()> bind_samplers;
|
||||||
|
std::function<void()> bind_textures;
|
||||||
|
std::function<void()> draw;
|
||||||
|
std::function<void()> unbind_textures;
|
||||||
|
};
|
||||||
|
|
||||||
struct LegacyCanvasDrawMergePlaneSetupUniforms {
|
struct LegacyCanvasDrawMergePlaneSetupUniforms {
|
||||||
LegacyCanvasDrawMergeCheckerboardUniforms checkerboard;
|
LegacyCanvasDrawMergeCheckerboardUniforms checkerboard;
|
||||||
bool use_blend = false;
|
bool use_blend = false;
|
||||||
@@ -330,6 +338,16 @@ inline void execute_legacy_canvas_draw_merge_layer_composite(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void execute_legacy_canvas_draw_merge_temporary_composite(
|
||||||
|
const LegacyCanvasDrawMergeTemporaryCompositeExecution& execution)
|
||||||
|
{
|
||||||
|
execution.setup();
|
||||||
|
execution.bind_samplers();
|
||||||
|
execution.bind_textures();
|
||||||
|
execution.draw();
|
||||||
|
execution.unbind_textures();
|
||||||
|
}
|
||||||
|
|
||||||
inline void execute_legacy_canvas_draw_merge_plane_setup(
|
inline void execute_legacy_canvas_draw_merge_plane_setup(
|
||||||
const LegacyCanvasDrawMergePlaneSetupUniforms& uniforms,
|
const LegacyCanvasDrawMergePlaneSetupUniforms& uniforms,
|
||||||
const LegacyCanvasDrawMergePlaneSetupExecution& execution)
|
const LegacyCanvasDrawMergePlaneSetupExecution& execution)
|
||||||
|
|||||||
Reference in New Issue
Block a user