diff options
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r-- | src/core/SkCanvas.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 41c5116718..eb81bd7951 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -49,6 +49,7 @@ #endif #include "SkClipOpPriv.h" +#include "SkVertices.h" #define RETURN_ON_NULL(ptr) do { if (nullptr == (ptr)) return; } while (0) @@ -1857,8 +1858,14 @@ void SkCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], con void SkCanvas::drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { - this->onDrawVertices(vmode, vertexCount, vertices, texs, colors, bmode, - indices, indexCount, paint); + this->onDrawVertices(vmode, vertexCount, std::move(vertices), texs, colors, bmode, indices, + indexCount, paint); +} + +void SkCanvas::drawVertices(sk_sp<SkVertices> vertices, SkBlendMode mode, const SkPaint& paint, + uint32_t flags) { + RETURN_ON_NULL(vertices); + this->onDrawVerticesObject(std::move(vertices), mode, paint, flags); } void SkCanvas::drawPath(const SkPath& path, const SkPaint& paint) { @@ -2815,6 +2822,28 @@ void SkCanvas::onDrawVertices(VertexMode vmode, int vertexCount, LOOPER_END } +void SkCanvas::onDrawVerticesObject(sk_sp<SkVertices> vertices, SkBlendMode bmode, + const SkPaint& paint, uint32_t flags) { + TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawVertices()"); + LOOPER_BEGIN(paint, SkDrawFilter::kPath_Type, nullptr) + + while (iter.next()) { + // In the common case of one iteration we could std::move vertices here. + iter.fDevice->drawVerticesObject(iter, vertices, bmode, looper.paint(), flags); + } + + LOOPER_END +} + +void SkCanvas::onDrawVerticesObjectFallback(sk_sp<SkVertices> vertices, SkBlendMode mode, + const SkPaint& paint, uint32_t flags) { + const SkPoint* texs = + (flags & SkCanvas::kIgnoreTexCoords_VerticesFlag) ? nullptr : vertices->texCoords(); + const SkColor* colors = (flags & kIgnoreColors_VerticesFlag) ? nullptr : vertices->colors(); + this->onDrawVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(), texs, + colors, mode, vertices->indices(), vertices->indexCount(), paint); +} + void SkCanvas::drawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkBlendMode bmode, const SkPaint& paint) { |