Route stroke pad pass through helper callbacks

This commit is contained in:
2026-06-13 10:07:57 +02:00
parent c1724edc47
commit f1f0dd5d03
4 changed files with 82 additions and 30 deletions

View File

@@ -74,6 +74,14 @@ struct LegacyCanvasStrokePadExecutionRequest {
std::string_view context;
pp::renderer::Extent2D extent {};
std::span<const LegacyCanvasStrokePadFace> faces;
bool copy_stroke_destination = false;
std::function<void(std::span<const vertex_t>)> upload_pad_vertices;
std::function<void(int)> begin_face;
std::function<void(int)> bind_destination_texture;
std::function<void(const pp::paint_renderer::CanvasStrokeCopyRegion&)> copy_framebuffer_to_destination_texture;
std::function<void(int)> unbind_destination_texture;
std::function<void()> draw_pad;
std::function<void(int)> finish_face;
std::function<void(int, const LegacyCanvasStrokePadRegionResult&, std::span<vertex_t>)> execute_face;
};
@@ -423,7 +431,11 @@ template <typename ExecuteSample, typename BeginFace, typename PrepareDirtyReque
LegacyCanvasStrokePadExecutionResult result;
if (request.extent.width == 0U ||
request.extent.height == 0U ||
!request.execute_face) {
(!request.execute_face &&
(!request.upload_pad_vertices ||
!request.begin_face ||
!request.draw_pad ||
!request.finish_face))) {
return result;
}
@@ -450,7 +462,34 @@ template <typename ExecuteSample, typename BeginFace, typename PrepareDirtyReque
vertex_t({ pad_region.ndc_quad[5].x, pad_region.ndc_quad[5].y }),
};
request.execute_face(face.index, pad_region, pad_quad);
if (request.execute_face) {
request.execute_face(face.index, pad_region, pad_quad);
} else {
if (!request.upload_pad_vertices ||
!request.begin_face ||
!request.draw_pad ||
!request.finish_face) {
return result;
}
if (request.copy_stroke_destination &&
(!request.bind_destination_texture ||
!request.copy_framebuffer_to_destination_texture ||
!request.unbind_destination_texture)) {
return result;
}
request.upload_pad_vertices(pad_quad);
request.begin_face(face.index);
if (request.copy_stroke_destination) {
request.bind_destination_texture(face.index);
request.copy_framebuffer_to_destination_texture(pad_region.copy_region);
}
request.draw_pad();
if (request.copy_stroke_destination) {
request.unbind_destination_texture(face.index);
}
request.finish_face(face.index);
}
++result.padded_faces;
}