Extract preview mix-pass material planning
This commit is contained in:
@@ -72,6 +72,11 @@ bool near(float a, float b)
|
||||
return std::fabs(a - b) < 0.0001F;
|
||||
}
|
||||
|
||||
bool near(const glm::vec2& a, const glm::vec2& b)
|
||||
{
|
||||
return near(a.x, b.x) && near(a.y, b.y);
|
||||
}
|
||||
|
||||
bool has_texture_binding(
|
||||
const pp::paint_renderer::CanvasStrokeMaterialPlan& plan,
|
||||
CanvasStrokeTextureRole role,
|
||||
@@ -2186,6 +2191,55 @@ void legacy_node_stroke_preview_composite_adapter_preserves_retained_inputs(pp::
|
||||
PP_EXPECT(h, has_preview_texture_slot(plan, StrokePreviewTextureRole::mixer, 3));
|
||||
}
|
||||
|
||||
void legacy_node_stroke_preview_mix_pass_adapter_preserves_retained_material_and_uniforms(pp::tests::Harness& h)
|
||||
{
|
||||
const pp::panopainter::LegacyNodeStrokePreviewMixPassRequest request {
|
||||
.resolution = glm::vec2(128.0F, 64.0F),
|
||||
.pattern_scale = 0.25F,
|
||||
.pattern_flipx = true,
|
||||
.pattern_flipy = true,
|
||||
.pattern_invert = true,
|
||||
.pattern_brightness = 0.6F,
|
||||
.pattern_contrast = 0.8F,
|
||||
.pattern_depth = 0.9F,
|
||||
.pattern_rand_offset = true,
|
||||
.pattern_enabled = true,
|
||||
.pattern_eachsample = false,
|
||||
.tip_wet = 0.3F,
|
||||
.tip_mix = 0.7F,
|
||||
.tip_noise = 0.2F,
|
||||
.dual_enabled = true,
|
||||
.dual_blend_mode = 9,
|
||||
.pattern_blend_mode = 7,
|
||||
.dual_opacity = 0.4F,
|
||||
.blend_mode = 5,
|
||||
};
|
||||
|
||||
const auto plan = pp::panopainter::plan_legacy_node_stroke_preview_mix_pass(request);
|
||||
|
||||
PP_EXPECT(h, plan.material.dual_pass.enabled);
|
||||
PP_EXPECT(h, !plan.material.stroke_pass.uses_pattern);
|
||||
PP_EXPECT(h, plan.material.composite_pass.use_dual);
|
||||
PP_EXPECT(h, plan.material.composite_pass.use_pattern);
|
||||
PP_EXPECT(h, plan.material.composite_pass.dual_blend_mode == request.dual_blend_mode);
|
||||
PP_EXPECT(h, near(plan.material.composite_pass.dual_alpha, request.dual_opacity));
|
||||
PP_EXPECT(h, plan.material.composite_pass.pattern_blend_mode == request.pattern_blend_mode);
|
||||
|
||||
PP_EXPECT(h, near(plan.shader.resolution, request.resolution));
|
||||
PP_EXPECT(h, near(plan.shader.pattern_scale, glm::vec2(-0.25F, -0.25F)));
|
||||
PP_EXPECT(h, near(plan.shader.pattern_invert, 1.0F));
|
||||
PP_EXPECT(h, near(plan.shader.pattern_brightness, request.pattern_brightness));
|
||||
PP_EXPECT(h, near(plan.shader.pattern_contrast, request.pattern_contrast));
|
||||
PP_EXPECT(h, near(plan.shader.pattern_depth, request.pattern_depth));
|
||||
PP_EXPECT(h, plan.shader.pattern_blend_mode == request.pattern_blend_mode);
|
||||
PP_EXPECT(h, near(plan.shader.pattern_offset, glm::vec2(0.5F, 0.5F)));
|
||||
PP_EXPECT(h, plan.shader.blend_mode == request.blend_mode);
|
||||
PP_EXPECT(h, plan.shader.use_dual == plan.material.composite_pass.use_dual);
|
||||
PP_EXPECT(h, plan.shader.dual_blend_mode == plan.material.composite_pass.dual_blend_mode);
|
||||
PP_EXPECT(h, near(plan.shader.dual_alpha, plan.material.composite_pass.dual_alpha));
|
||||
PP_EXPECT(h, plan.shader.use_pattern == plan.material.composite_pass.use_pattern);
|
||||
}
|
||||
|
||||
void plans_canvas_blend_gate_from_persisted_indices(pp::tests::Harness& h)
|
||||
{
|
||||
const std::vector<int> normal_layers { 0, 0, 0 };
|
||||
@@ -2637,6 +2691,9 @@ int main()
|
||||
harness.run(
|
||||
"legacy_node_stroke_preview_composite_adapter_preserves_retained_inputs",
|
||||
legacy_node_stroke_preview_composite_adapter_preserves_retained_inputs);
|
||||
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("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);
|
||||
|
||||
Reference in New Issue
Block a user