Share retained stroke face sample dispatch
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user