Share retained stroke frame execution helpers

This commit is contained in:
2026-06-13 09:54:32 +02:00
parent 5dc0bc7342
commit 3f98e4e0c5
5 changed files with 118 additions and 90 deletions

View File

@@ -293,6 +293,41 @@ std::size_t execute_legacy_canvas_stroke_frame_samples(
return result;
}
template <typename ExecuteSample, typename BeginFace, typename PrepareDirtyRequest, typename FinishFace>
[[nodiscard]] inline LegacyCanvasStrokeFaceDirtyResult execute_legacy_canvas_stroke_face_sample(
const LegacyCanvasStrokeFaceDirtyRequest& dirty_request,
ExecuteSample&& execute_sample,
BeginFace&& begin_face,
PrepareDirtyRequest&& prepare_dirty_request,
FinishFace&& finish_face,
glm::vec4* accumulated_dirty_box = nullptr,
glm::vec4* pass_dirty_box = nullptr,
bool* committed_dirty = nullptr,
bool* pass_dirty = nullptr) noexcept(noexcept(execute_sample()))
{
LegacyCanvasStrokeFaceDirtyResult result;
begin_face();
auto request = dirty_request;
request.sample_dirty_box = execute_sample();
prepare_dirty_request(request);
finish_face(request.sample_dirty_box);
glm::vec4 accumulated = request.previous_accumulated_dirty_box;
result = apply_legacy_canvas_stroke_face_dirty_update(
request,
accumulated,
pass_dirty_box,
committed_dirty,
pass_dirty);
result.accumulated_dirty_box = accumulated;
if (accumulated_dirty_box) {
*accumulated_dirty_box = accumulated;
}
return result;
}
[[nodiscard]] inline LegacyCanvasStrokePadExecutionResult execute_legacy_canvas_stroke_pad_faces(
const LegacyCanvasStrokePadExecutionRequest& request)
{