0

DrawVerticesOp: use SkVertices factory

Instead of copying data explicitly, use SkVertices::MakeCopy to ensure
index sanitization.

Bug: 379776579
Change-Id: I14cd2733cb3d465674036f66ee989c922d5a0ae4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6091689
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Commit-Queue: Florin Malita <fmalita@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1395445}
This commit is contained in:
Florin Malita
2024-12-12 08:46:52 -08:00
committed by Chromium LUCI CQ
parent 2dfcf91e00
commit 2401803bc7

@ -1616,23 +1616,13 @@ void DrawVerticesOp::RasterWithFlags(const DrawVerticesOp* op,
SkCanvas* canvas,
const PlaybackParams& params) {
CHECK_EQ(op->vertices->data().size(), op->uvs->data().size());
SkVertices::Builder vertices_builder(
const sk_sp<SkVertices> skverts = SkVertices::MakeCopy(
SkVertices::kTriangles_VertexMode,
base::checked_cast<int>(op->vertices->data().size()),
op->vertices->data().data(), op->uvs->data().data(), nullptr,
base::checked_cast<int>(op->indices->data().size()),
SkVertices::kHasTexCoords_BuilderFlag);
std::copy(op->vertices->data().data(),
op->vertices->data().data() + op->vertices->data().size(),
vertices_builder.positions());
std::copy(op->uvs->data().data(),
op->uvs->data().data() + op->uvs->data().size(),
vertices_builder.texCoords());
std::copy(op->indices->data().data(),
op->indices->data().data() + op->indices->data().size(),
vertices_builder.indices());
const sk_sp<SkVertices> skverts = vertices_builder.detach();
op->indices->data().data());
flags->DrawToSk(canvas, [&skverts](SkCanvas* c, const SkPaint& p) {
c->drawVertices(skverts, SkBlendMode::kSrcOver, p);