Extract retained stroke preview setup planner

This commit is contained in:
2026-06-13 11:27:30 +02:00
parent 499747173b
commit 3ec4f25889
6 changed files with 232 additions and 28 deletions

View File

@@ -2421,12 +2421,99 @@ void legacy_node_stroke_preview_pass_sequence_preserves_dual_main_and_composite_
PP_EXPECT(h, !missing_dual_prepare);
PP_EXPECT(h, steps.empty());
steps.clear();
const bool missing_main_prepare =
pp::panopainter::execute_legacy_node_stroke_preview_pass_sequence(
pp::panopainter::LegacyNodeStrokePreviewPassSequenceRequest {
.dual_pass_enabled = true,
.prepare_dual_pass = [&] {
steps.emplace_back("prepare_dual");
},
.execute_dual_pass = [&] {
steps.emplace_back("execute_dual");
},
.capture_background = [&] {
steps.emplace_back("capture_background");
},
.prepare_main_pass = {},
.execute_main_pass = [&] {
steps.emplace_back("execute_main");
},
.finish_main_pass = [&] {
steps.emplace_back("finish_main");
},
.execute_final_composite = [&] {
steps.emplace_back("execute_composite");
},
.copy_preview_result = [&] {
steps.emplace_back("copy_preview");
},
});
PP_EXPECT(h, !missing_main_prepare);
PP_EXPECT(h, steps.empty());
const bool missing_required =
pp::panopainter::execute_legacy_node_stroke_preview_pass_sequence(
pp::panopainter::LegacyNodeStrokePreviewPassSequenceRequest {});
PP_EXPECT(h, !missing_required);
}
void legacy_node_stroke_preview_stroke_setup_plan_preserves_curve_and_dual_inputs(pp::tests::Harness& h)
{
const auto plan = pp::panopainter::plan_legacy_node_stroke_preview_stroke_setup(
pp::panopainter::LegacyNodeStrokePreviewStrokeSetupRequest {
.preview_size = glm::vec2(120.0F, 80.0F),
.zoom = 2.0F,
.brush_tip_size = 30.0F,
.stroke_max_size_override = 0.0F,
.pad_override = 17.0F,
.tip_size_pressure = false,
.dual_enabled = true,
.dual_size = 0.25F,
.pattern_scale = 0.5F,
.pattern_flipx = true,
.pattern_flipy = false,
.preview_point_count = 4,
});
PP_EXPECT(h, near(plan.stroke_max_size, 60.0F));
PP_EXPECT(h, near(plan.dual_stroke_max_size, 15.0F));
PP_EXPECT(h, plan.dual_enabled);
PP_EXPECT(h, near(plan.pattern_scale, glm::vec2(-0.5F, 0.5F)));
PP_EXPECT(h, plan.points.size() == 4U);
PP_EXPECT(h, near(plan.points[0].position.x, 17.0F));
PP_EXPECT(h, near(plan.points[0].position.y, 80.0F));
PP_EXPECT(h, near(plan.points[0].position.z, 0.0F));
PP_EXPECT(h, near(plan.points[0].pressure, 0.0F));
PP_EXPECT(h, near(plan.points[1].pressure, 0.55F));
PP_EXPECT(h, near(plan.points[2].pressure, 1.0F));
PP_EXPECT(h, near(plan.points[3].pressure, 0.55F));
const auto pressure_fallback = pp::panopainter::plan_legacy_node_stroke_preview_stroke_setup(
pp::panopainter::LegacyNodeStrokePreviewStrokeSetupRequest {
.preview_size = glm::vec2(120.0F, 80.0F),
.zoom = 2.0F,
.brush_tip_size = 30.0F,
.stroke_max_size_override = 20.0F,
.pad_override = NAN,
.tip_size_pressure = true,
.dual_enabled = false,
.dual_size = 2.0F,
.pattern_scale = 0.25F,
.pattern_flipx = false,
.pattern_flipy = true,
.preview_point_count = 0,
});
PP_EXPECT(h, near(pressure_fallback.stroke_max_size, 20.0F));
PP_EXPECT(h, near(pressure_fallback.dual_stroke_max_size, 40.0F));
PP_EXPECT(h, !pressure_fallback.dual_enabled);
PP_EXPECT(h, near(pressure_fallback.pattern_scale, glm::vec2(0.25F, -0.25F)));
PP_EXPECT(h, pressure_fallback.points.empty());
}
void plans_canvas_blend_gate_from_persisted_indices(pp::tests::Harness& h)
{
const std::vector<int> normal_layers { 0, 0, 0 };
@@ -2887,6 +2974,9 @@ int main()
harness.run(
"legacy_node_stroke_preview_pass_sequence_preserves_dual_main_and_composite_order",
legacy_node_stroke_preview_pass_sequence_preserves_dual_main_and_composite_order);
harness.run(
"legacy_node_stroke_preview_stroke_setup_plan_preserves_curve_and_dual_inputs",
legacy_node_stroke_preview_stroke_setup_plan_preserves_curve_and_dual_inputs);
harness.run("plans_canvas_blend_gate_from_persisted_indices", plans_canvas_blend_gate_from_persisted_indices);
harness.run("canvas_blend_gate_preserves_legacy_fallbacks", canvas_blend_gate_preserves_legacy_fallbacks);
harness.run("plans_canvas_stroke_feedback_paths", plans_canvas_stroke_feedback_paths);