Extract stroke dual pass boundary

This commit is contained in:
2026-06-13 16:49:31 +02:00
parent 3986bd3c70
commit 43bdc85c11
3 changed files with 99 additions and 52 deletions

View File

@@ -179,9 +179,42 @@ struct LegacyCanvasStrokeMixPassResult {
std::size_t composed_planes = 0;
};
struct LegacyCanvasStrokeDualPassRequest {
std::string_view context;
std::span<const LegacyCanvasStrokeMixPassPlane> planes;
std::function<void()> bind_brush_tip;
std::function<void()> unbind_brush_tip;
std::function<void()> setup_dual_shader;
std::function<void()> execute_frame_pass;
};
struct LegacyCanvasStrokeDualPassResult {
bool ok = false;
std::size_t composed_planes = 0;
};
[[nodiscard]] inline LegacyCanvasStrokeMixPassResult execute_legacy_canvas_stroke_mix_pass(
const LegacyCanvasStrokeMixPassRequest& request);
[[nodiscard]] inline LegacyCanvasStrokeDualPassResult execute_legacy_canvas_stroke_dual_pass(
const LegacyCanvasStrokeDualPassRequest& request)
{
LegacyCanvasStrokeDualPassResult result;
if (!request.setup_dual_shader ||
!request.bind_brush_tip ||
!request.unbind_brush_tip ||
!request.execute_frame_pass) {
return result;
}
request.setup_dual_shader();
request.bind_brush_tip();
request.execute_frame_pass();
request.unbind_brush_tip();
result.ok = true;
return result;
}
template <std::size_t PlaneCount, typename HasTarget>
[[nodiscard]] inline std::array<LegacyCanvasStrokeMixPassPlane, PlaneCount>
plan_legacy_canvas_stroke_mix_pass_planes(