aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkCanvas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r--src/core/SkCanvas.cpp33
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) {