Share retained stroke face sample dispatch

This commit is contained in:
2026-06-13 11:00:11 +02:00
parent f234f69502
commit 6cdf8c13a7
5 changed files with 109 additions and 10 deletions

View File

@@ -49,6 +49,19 @@ struct LegacyStrokeSamplePolygonExecutionRequest {
std::function<void()> draw_brush_shape;
};
struct LegacyStrokeFaceSamplePolygonExecutionRequest {
std::string_view context;
glm::vec2 target_size {};
std::span<const vertex_t> polygon_vertices;
int face_index = 0;
bool copy_stroke_destination = false;
std::function<void(int)> bind_destination_texture;
std::function<void(int, int, int, int, int, int, int)> copy_framebuffer_to_destination_texture;
std::function<void(int)> unbind_destination_texture;
std::function<void(int, std::span<const vertex_t>)> upload_brush_vertices;
std::function<void(int)> draw_brush_shape;
};
enum class LegacyCanvasStrokeTextureInput {
brush_tip,
stroke_destination,
@@ -952,6 +965,52 @@ template <typename ExecuteSample, typename BeginFace, typename PrepareDirtyReque
});
}
[[nodiscard]] inline LegacyStrokeSampleExecutionResult execute_legacy_canvas_stroke_face_sample_polygon(
const LegacyStrokeFaceSamplePolygonExecutionRequest& request)
{
if (!request.upload_brush_vertices || !request.draw_brush_shape) {
return {};
}
if (request.copy_stroke_destination &&
(!request.bind_destination_texture ||
!request.copy_framebuffer_to_destination_texture ||
!request.unbind_destination_texture)) {
return {};
}
return execute_legacy_canvas_stroke_sample_polygon(
LegacyStrokeSamplePolygonExecutionRequest {
.context = request.context,
.target_size = request.target_size,
.polygon_vertices = request.polygon_vertices,
.copy_stroke_destination = request.copy_stroke_destination,
.bind_destination_texture = [&] {
request.bind_destination_texture(request.face_index);
},
.copy_framebuffer_to_destination_texture =
[&](int src_x, int src_y, int dst_x, int dst_y, int width, int height) {
request.copy_framebuffer_to_destination_texture(
request.face_index,
src_x,
src_y,
dst_x,
dst_y,
width,
height);
},
.unbind_destination_texture = [&] {
request.unbind_destination_texture(request.face_index);
},
.upload_brush_vertices = [&](std::span<const vertex_t> vertices) {
request.upload_brush_vertices(request.face_index, vertices);
},
.draw_brush_shape = [&] {
request.draw_brush_shape(request.face_index);
},
});
}
[[nodiscard]] inline LegacyCanvasStrokeMixPassResult execute_legacy_canvas_stroke_mix_pass(
const LegacyCanvasStrokeMixPassRequest& request)
{