Narrow retained canvas stroke execution helpers
This commit is contained in:
@@ -64,6 +64,24 @@ struct LegacyCanvasStrokePadRegionResult {
|
||||
std::array<pp::paint_renderer::CanvasStrokePoint, 6> ndc_quad {};
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokePadFace {
|
||||
int index = 0;
|
||||
bool dirty = false;
|
||||
glm::vec4 pass_dirty_box {};
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokePadExecutionRequest {
|
||||
std::string_view context;
|
||||
pp::renderer::Extent2D extent {};
|
||||
std::span<const LegacyCanvasStrokePadFace> faces;
|
||||
std::function<void(int, const LegacyCanvasStrokePadRegionResult&, std::span<vertex_t>)> execute_face;
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokePadExecutionResult {
|
||||
bool ok = false;
|
||||
std::size_t padded_faces = 0;
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokeComputeRequest {
|
||||
StrokeSample previous_sample {};
|
||||
std::span<const StrokeSample> samples;
|
||||
@@ -228,6 +246,47 @@ std::size_t execute_legacy_canvas_stroke_frame_faces(
|
||||
};
|
||||
}
|
||||
|
||||
[[nodiscard]] inline LegacyCanvasStrokePadExecutionResult execute_legacy_canvas_stroke_pad_faces(
|
||||
const LegacyCanvasStrokePadExecutionRequest& request)
|
||||
{
|
||||
LegacyCanvasStrokePadExecutionResult result;
|
||||
if (request.extent.width == 0U ||
|
||||
request.extent.height == 0U ||
|
||||
!request.execute_face) {
|
||||
return result;
|
||||
}
|
||||
|
||||
for (const auto& face : request.faces) {
|
||||
if (!face.dirty) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const auto pad_region = plan_legacy_canvas_stroke_pad_region(
|
||||
LegacyCanvasStrokePadRegionRequest {
|
||||
.extent = request.extent,
|
||||
.pass_dirty_box = face.pass_dirty_box,
|
||||
});
|
||||
if (!pad_region.has_pixels) {
|
||||
continue;
|
||||
}
|
||||
|
||||
std::array<vertex_t, 6> pad_quad = {
|
||||
vertex_t({ pad_region.ndc_quad[0].x, pad_region.ndc_quad[0].y }),
|
||||
vertex_t({ pad_region.ndc_quad[1].x, pad_region.ndc_quad[1].y }),
|
||||
vertex_t({ pad_region.ndc_quad[2].x, pad_region.ndc_quad[2].y }),
|
||||
vertex_t({ pad_region.ndc_quad[3].x, pad_region.ndc_quad[3].y }),
|
||||
vertex_t({ pad_region.ndc_quad[4].x, pad_region.ndc_quad[4].y }),
|
||||
vertex_t({ pad_region.ndc_quad[5].x, pad_region.ndc_quad[5].y }),
|
||||
};
|
||||
|
||||
request.execute_face(face.index, pad_region, pad_quad);
|
||||
++result.padded_faces;
|
||||
}
|
||||
|
||||
result.ok = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline LegacyStrokeSampleExecutionResult execute_legacy_canvas_stroke_sample(
|
||||
const LegacyStrokeSampleExecutionRequest& request)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user