Route stroke pad pass through helper callbacks
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user