Share retained stroke preview mix executor
This commit is contained in:
@@ -2240,6 +2240,96 @@ void legacy_node_stroke_preview_mix_pass_adapter_preserves_retained_material_and
|
||||
PP_EXPECT(h, plan.shader.use_pattern == plan.material.composite_pass.use_pattern);
|
||||
}
|
||||
|
||||
void legacy_node_stroke_preview_mix_executor_preserves_setup_and_draw_order(pp::tests::Harness& h)
|
||||
{
|
||||
std::vector<std::string> steps;
|
||||
pp::panopainter::LegacyNodeStrokePreviewMixPassPlan::ShaderPlan observed_shader {};
|
||||
|
||||
const bool ok = pp::panopainter::execute_legacy_node_stroke_preview_mix_pass(
|
||||
pp::panopainter::LegacyNodeStrokePreviewMixExecutionRequest {
|
||||
.shader = pp::panopainter::LegacyNodeStrokePreviewMixPassPlan::ShaderPlan {
|
||||
.resolution = glm::vec2(128.0F, 64.0F),
|
||||
.pattern_scale = glm::vec2(-0.25F, 0.25F),
|
||||
.pattern_invert = 1.0F,
|
||||
.pattern_brightness = 0.6F,
|
||||
.pattern_contrast = 0.8F,
|
||||
.pattern_depth = 0.9F,
|
||||
.pattern_blend_mode = 7,
|
||||
.pattern_offset = glm::vec2(0.5F, 0.5F),
|
||||
.blend_mode = 5,
|
||||
.use_dual = true,
|
||||
.dual_blend_mode = 9,
|
||||
.dual_alpha = 0.4F,
|
||||
.use_pattern = true,
|
||||
},
|
||||
.mixer_width = 128,
|
||||
.mixer_height = 64,
|
||||
.scissor_x = 11,
|
||||
.scissor_y = 12,
|
||||
.scissor_width = 13,
|
||||
.scissor_height = 14,
|
||||
.save_state = [&] {
|
||||
steps.emplace_back("save");
|
||||
},
|
||||
.setup_mix_shader = [&](const auto& shader) {
|
||||
observed_shader = shader;
|
||||
steps.emplace_back("setup");
|
||||
},
|
||||
.bind_mixer_framebuffer = [&] {
|
||||
steps.emplace_back("bind-framebuffer");
|
||||
},
|
||||
.configure_mix_target_state = [&](int width, int height, int x, int y, int scissor_width, int scissor_height) {
|
||||
steps.emplace_back(
|
||||
"configure:" +
|
||||
std::to_string(width) + "," +
|
||||
std::to_string(height) + "," +
|
||||
std::to_string(x) + "," +
|
||||
std::to_string(y) + "," +
|
||||
std::to_string(scissor_width) + "," +
|
||||
std::to_string(scissor_height));
|
||||
},
|
||||
.bind_mix_inputs = [&] {
|
||||
steps.emplace_back("bind-inputs");
|
||||
},
|
||||
.draw_mix = [&] {
|
||||
steps.emplace_back("draw");
|
||||
},
|
||||
.unbind_mixer_framebuffer = [&] {
|
||||
steps.emplace_back("unbind-framebuffer");
|
||||
},
|
||||
.restore_state = [&] {
|
||||
steps.emplace_back("restore");
|
||||
},
|
||||
});
|
||||
|
||||
PP_EXPECT(h, ok);
|
||||
PP_EXPECT(h, near(observed_shader.resolution, glm::vec2(128.0F, 64.0F)));
|
||||
PP_EXPECT(h, near(observed_shader.pattern_scale, glm::vec2(-0.25F, 0.25F)));
|
||||
PP_EXPECT(h, observed_shader.use_dual);
|
||||
PP_EXPECT(h, observed_shader.use_pattern);
|
||||
PP_EXPECT(h, observed_shader.dual_blend_mode == 9);
|
||||
PP_EXPECT(h, near(observed_shader.dual_alpha, 0.4F));
|
||||
|
||||
const std::vector<std::string> expected_steps {
|
||||
"save",
|
||||
"setup",
|
||||
"bind-framebuffer",
|
||||
"configure:128,64,11,12,13,14",
|
||||
"bind-inputs",
|
||||
"draw",
|
||||
"unbind-framebuffer",
|
||||
"restore",
|
||||
};
|
||||
PP_EXPECT(h, steps == expected_steps);
|
||||
|
||||
const bool invalid = pp::panopainter::execute_legacy_node_stroke_preview_mix_pass(
|
||||
pp::panopainter::LegacyNodeStrokePreviewMixExecutionRequest {
|
||||
.mixer_width = 128,
|
||||
.mixer_height = 64,
|
||||
});
|
||||
PP_EXPECT(h, !invalid);
|
||||
}
|
||||
|
||||
void legacy_node_stroke_preview_pass_sequence_preserves_dual_main_and_composite_order(pp::tests::Harness& h)
|
||||
{
|
||||
std::vector<std::string> steps;
|
||||
@@ -2300,6 +2390,37 @@ void legacy_node_stroke_preview_pass_sequence_preserves_dual_main_and_composite_
|
||||
};
|
||||
PP_EXPECT(h, steps == single_steps);
|
||||
|
||||
steps.clear();
|
||||
const bool missing_dual_prepare =
|
||||
pp::panopainter::execute_legacy_node_stroke_preview_pass_sequence(
|
||||
pp::panopainter::LegacyNodeStrokePreviewPassSequenceRequest {
|
||||
.dual_pass_enabled = true,
|
||||
.prepare_dual_pass = {},
|
||||
.execute_dual_pass = [&] {
|
||||
steps.emplace_back("execute_dual");
|
||||
},
|
||||
.capture_background = [&] {
|
||||
steps.emplace_back("capture_background");
|
||||
},
|
||||
.prepare_main_pass = [&] {
|
||||
steps.emplace_back("prepare_main");
|
||||
},
|
||||
.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_dual_prepare);
|
||||
PP_EXPECT(h, steps.empty());
|
||||
|
||||
const bool missing_required =
|
||||
pp::panopainter::execute_legacy_node_stroke_preview_pass_sequence(
|
||||
pp::panopainter::LegacyNodeStrokePreviewPassSequenceRequest {});
|
||||
@@ -2760,6 +2881,9 @@ int main()
|
||||
harness.run(
|
||||
"legacy_node_stroke_preview_mix_pass_adapter_preserves_retained_material_and_uniforms",
|
||||
legacy_node_stroke_preview_mix_pass_adapter_preserves_retained_material_and_uniforms);
|
||||
harness.run(
|
||||
"legacy_node_stroke_preview_mix_executor_preserves_setup_and_draw_order",
|
||||
legacy_node_stroke_preview_mix_executor_preserves_setup_and_draw_order);
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user