diff options
29 files changed, 69 insertions, 331 deletions
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 85531bb74a..3a2b3fc09a 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1442,13 +1442,14 @@ protected: const SkPaint&); virtual void onDrawRRect(const SkRRect&, const SkPaint&); virtual void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&); + +#ifdef SK_SUPPORT_LEGACY_DRAWVERTICES_VIRTUAL virtual void onDrawVertices(VertexMode, int vertexCount, const SkPoint vertices[], const SkPoint texs[], const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, const SkPaint&); + const uint16_t indices[], int indexCount, const SkPaint&) {} +#endif + virtual void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&); - // Subclasses can use this put the vertices object call on the regular draw vertices code path. - // This is temporary until we teach recording and other SkCanvas classes about SkVertices. - void devolveSkVerticesToRaw(const SkVertices*, SkBlendMode, const SkPaint&); virtual void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int count, SkBlendMode, const SkRect* cull, const SkPaint*); diff --git a/include/utils/SkDumpCanvas.h b/include/utils/SkDumpCanvas.h index 19e5da567d..b8fff72258 100644 --- a/include/utils/SkDumpCanvas.h +++ b/include/utils/SkDumpCanvas.h @@ -112,15 +112,7 @@ protected: const SkPaint*, SrcRectConstraint) override; void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; - void onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, - const SkPaint& paint) override { - this->devolveSkVerticesToRaw(vertices, mode, paint); - } + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override; diff --git a/include/utils/SkLuaCanvas.h b/include/utils/SkLuaCanvas.h index a11d72f26c..49ff377af3 100644 --- a/include/utils/SkLuaCanvas.h +++ b/include/utils/SkLuaCanvas.h @@ -58,15 +58,7 @@ protected: const SkPaint*, SrcRectConstraint) override; void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; - void onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, - const SkPaint& paint) override { - this->devolveSkVerticesToRaw(vertices, mode, paint); - } + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override; diff --git a/include/utils/SkNWayCanvas.h b/include/utils/SkNWayCanvas.h index 3ed7d4c41a..3407853fd6 100644 --- a/include/utils/SkNWayCanvas.h +++ b/include/utils/SkNWayCanvas.h @@ -70,11 +70,7 @@ protected: const SkPaint*, SrcRectConstraint) override; void onDrawBitmapNine(const SkBitmap&, const SkIRect& center, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override; diff --git a/include/utils/SkNoDrawCanvas.h b/include/utils/SkNoDrawCanvas.h index 75c15b201e..d21d678f16 100644 --- a/include/utils/SkNoDrawCanvas.h +++ b/include/utils/SkNoDrawCanvas.h @@ -66,8 +66,6 @@ protected: const SkPaint*) override {} void onDrawBitmapLattice(const SkBitmap&, const Lattice&, const SkRect&, const SkPaint*) override {} - void onDrawVertices(VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkBlendMode, const uint16_t[], int, const SkPaint&) override {} void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override {} void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, SkBlendMode, const SkRect*, const SkPaint*) override {} diff --git a/include/utils/SkPaintFilterCanvas.h b/include/utils/SkPaintFilterCanvas.h index 7dc7969e6e..31b3663730 100644 --- a/include/utils/SkPaintFilterCanvas.h +++ b/include/utils/SkPaintFilterCanvas.h @@ -74,11 +74,7 @@ protected: const SkPaint*, SrcRectConstraint) override; void onDrawImageNine(const SkImage*, const SkIRect& center, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkBlendMode, const SkPaint& paint) override; diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index ccdb71b5a0..fbc2a3cc47 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -1792,11 +1792,14 @@ void SkCanvas::drawPoints(PointMode mode, size_t count, const SkPoint pts[], con this->onDrawPoints(mode, count, pts, paint); } -void SkCanvas::drawVertices(VertexMode vmode, int vertexCount, const SkPoint vertices[], +void SkCanvas::drawVertices(VertexMode vmode, int vertexCount, const SkPoint positions[], const SkPoint texs[], const SkColor colors[], SkBlendMode bmode, const uint16_t indices[], int indexCount, const SkPaint& paint) { - this->onDrawVertices(vmode, vertexCount, std::move(vertices), texs, colors, bmode, indices, - indexCount, paint); + auto vertices = SkVertices::MakeCopy(vmode, vertexCount, positions, texs, colors, + indexCount, indices); + if (vertices) { + this->onDrawVerticesObject(vertices.get(), bmode, paint); + } } void SkCanvas::drawVertices(const sk_sp<SkVertices>& vertices, SkBlendMode mode, @@ -2659,23 +2662,6 @@ void SkCanvas::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, this->onDrawTextBlob(blob, x, y, paint); } -void SkCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint verts[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawVertices()"); - LOOPER_BEGIN(paint, SkDrawFilter::kPath_Type, nullptr) - - while (iter.next()) { - iter.fDevice->drawVertices(vmode, vertexCount, verts, texs, - colors, bmode, indices, indexCount, - looper.paint()); - } - - LOOPER_END -} - void SkCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, const SkPaint& paint) { TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawVertices()"); @@ -2689,13 +2675,6 @@ void SkCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmod LOOPER_END } -void SkCanvas::devolveSkVerticesToRaw(const SkVertices* vertices, SkBlendMode mode, - const SkPaint& paint) { - this->onDrawVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(), - vertices->texCoords(), vertices->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) { diff --git a/src/core/SkColorSpaceXformCanvas.cpp b/src/core/SkColorSpaceXformCanvas.cpp index 112709dc93..e8fc8e40db 100644 --- a/src/core/SkColorSpaceXformCanvas.cpp +++ b/src/core/SkColorSpaceXformCanvas.cpp @@ -215,20 +215,21 @@ public: SkTLazy<SkPaint> lazy; fTarget->drawPoints(mode, count, pts, this->xform(paint, &lazy)); } - void onDrawVertices(VertexMode vmode, int count, - const SkPoint* verts, const SkPoint* texs, const SkColor* colors, - SkBlendMode mode, - const uint16_t* indices, int indexCount, const SkPaint& paint) override { - SkSTArray<8, SkColor> xformed; - if (colors) { - xformed.reset(count); - this->xform(xformed.begin(), colors, count); - colors = xformed.begin(); + void onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, + const SkPaint& paint) override { + sk_sp<SkVertices> copy; + if (vertices->hasColors()) { + int count = vertices->vertexCount(); + SkSTArray<8, SkColor> xformed(count); + this->xform(xformed.begin(), vertices->colors(), count); + copy = SkVertices::MakeCopy(vertices->mode(), count, vertices->positions(), + vertices->texCoords(), xformed.begin(), + vertices->indexCount(), vertices->indices()); + vertices = copy.get(); } SkTLazy<SkPaint> lazy; - fTarget->drawVertices(vmode, count, verts, texs, colors, mode, indices, indexCount, - this->xform(paint, &lazy)); + fTarget->drawVertices(vertices, mode, this->xform(paint, &lazy)); } void onDrawText(const void* ptr, size_t len, diff --git a/src/core/SkLiteDL.cpp b/src/core/SkLiteDL.cpp index 2da6eb5ef6..6751634ea4 100644 --- a/src/core/SkLiteDL.cpp +++ b/src/core/SkLiteDL.cpp @@ -55,7 +55,7 @@ namespace { M(DrawImage) M(DrawImageNine) M(DrawImageRect) M(DrawImageLattice) \ M(DrawText) M(DrawPosText) M(DrawPosTextH) \ M(DrawTextOnPath) M(DrawTextRSXform) M(DrawTextBlob) \ - M(DrawPatch) M(DrawPoints) M(DrawVertices) M(DrawVerticesObject) M(DrawAtlas) + M(DrawPatch) M(DrawPoints) M(DrawVertices) M(DrawAtlas) #define M(T) T, enum class Type : uint8_t { TYPES(M) }; @@ -467,45 +467,7 @@ namespace { }; struct DrawVertices final : Op { static const auto kType = Type::DrawVertices; - DrawVertices(SkCanvas::VertexMode mode, int count, SkBlendMode bmode, int nindices, - const SkPaint& paint, bool has_texs, bool has_colors, bool has_indices) - : mode(mode), count(count), xfermode(bmode), nindices(nindices) - , paint(paint), has_texs(has_texs), has_colors(has_colors), has_indices(has_indices) {} - SkCanvas::VertexMode mode; - int count; - SkBlendMode xfermode; - int nindices; - SkPaint paint; - bool has_texs; - bool has_colors; - bool has_indices; - void draw(SkCanvas* c, const SkMatrix&) { - SkPoint* vertices = pod<SkPoint>(this, 0); - size_t offset = count*sizeof(SkPoint); - - SkPoint* texs = nullptr; - if (has_texs) { - texs = pod<SkPoint>(this, offset); - offset += count*sizeof(SkPoint); - } - - SkColor* colors = nullptr; - if (has_colors) { - colors = pod<SkColor>(this, offset); - offset += count*sizeof(SkColor); - } - - uint16_t* indices = nullptr; - if (has_indices) { - indices = pod<uint16_t>(this, offset); - } - c->drawVertices(mode, count, vertices, texs, colors, xfermode, - indices, nindices, paint); - } - }; - struct DrawVerticesObject final : Op { - static const auto kType = Type::DrawVerticesObject; - DrawVerticesObject(const SkVertices* v, SkBlendMode m, const SkPaint& p) + DrawVertices(const SkVertices* v, SkBlendMode m, const SkPaint& p) : vertices(sk_ref_sp(const_cast<SkVertices*>(v))), mode(m), paint(p) {} sk_sp<SkVertices> vertices; SkBlendMode mode; @@ -712,22 +674,8 @@ void SkLiteDL::drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint void* pod = this->push<DrawPoints>(count*sizeof(SkPoint), mode, count, paint); copy_v(pod, points,count); } -void SkLiteDL::drawVertices(SkCanvas::VertexMode mode, int count, const SkPoint vertices[], - const SkPoint texs[], const SkColor colors[], SkBlendMode xfermode, - const uint16_t indices[], int nindices, const SkPaint& paint) { - size_t bytes = count * sizeof(SkPoint); - if (texs ) { bytes += count * sizeof(SkPoint); } - if (colors) { bytes += count * sizeof(SkColor); } - if (indices) { bytes += nindices * sizeof(uint16_t); } - void* pod = this->push<DrawVertices>(bytes, mode, count, xfermode, nindices, paint, - texs != nullptr, colors != nullptr, indices != nullptr); - copy_v(pod, vertices, count, - texs, texs ? count : 0, - colors, colors ? count : 0, - indices, indices ? nindices : 0); -} void SkLiteDL::drawVertices(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint) { - this->push<DrawVerticesObject>(0, vertices, mode, paint); + this->push<DrawVertices>(0, vertices, mode, paint); } void SkLiteDL::drawAtlas(const SkImage* atlas, const SkRSXform xforms[], const SkRect texs[], const SkColor colors[], int count, SkBlendMode xfermode, diff --git a/src/core/SkLiteDL.h b/src/core/SkLiteDL.h index bc5f4e701e..f5f7b21983 100644 --- a/src/core/SkLiteDL.h +++ b/src/core/SkLiteDL.h @@ -74,8 +74,6 @@ public: void drawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode, const SkPaint&); void drawPoints(SkCanvas::PointMode, size_t, const SkPoint[], const SkPaint&); - void drawVertices(SkCanvas::VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkBlendMode, const uint16_t[], int, const SkPaint&); void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&); void drawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, SkBlendMode, const SkRect*, const SkPaint*); diff --git a/src/core/SkLiteRecorder.cpp b/src/core/SkLiteRecorder.cpp index a01ac655e7..f899f8822f 100644 --- a/src/core/SkLiteRecorder.cpp +++ b/src/core/SkLiteRecorder.cpp @@ -179,14 +179,6 @@ void SkLiteRecorder::onDrawPoints(SkCanvas::PointMode mode, const SkPaint& paint) { fDL->drawPoints(mode, count, pts, paint); } -void SkLiteRecorder::onDrawVertices(SkCanvas::VertexMode mode, - int count, const SkPoint vertices[], - const SkPoint texs[], const SkColor colors[], - SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - fDL->drawVertices(mode, count, vertices, texs, colors, bmode, indices, indexCount, paint); -} void SkLiteRecorder::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint) { fDL->drawVertices(vertices, mode, paint); diff --git a/src/core/SkLiteRecorder.h b/src/core/SkLiteRecorder.h index 82aeca385a..ea7cc78b2d 100644 --- a/src/core/SkLiteRecorder.h +++ b/src/core/SkLiteRecorder.h @@ -74,8 +74,6 @@ public: void onDrawPatch(const SkPoint[12], const SkColor[4], const SkPoint[4], SkBlendMode, const SkPaint&) override; void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; - void onDrawVertices(VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkBlendMode, const uint16_t[], int, const SkPaint&) override; void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, SkBlendMode, const SkRect*, const SkPaint*) override; diff --git a/src/core/SkOverdrawCanvas.cpp b/src/core/SkOverdrawCanvas.cpp index c6b7b9c9cf..ad37b9a98f 100644 --- a/src/core/SkOverdrawCanvas.cpp +++ b/src/core/SkOverdrawCanvas.cpp @@ -213,13 +213,9 @@ void SkOverdrawCanvas::onDrawPoints(PointMode mode, size_t count, const SkPoint fList[0]->onDrawPoints(mode, count, points, this->overdrawPaint(paint)); } -void SkOverdrawCanvas::onDrawVertices(VertexMode vertexMode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode blendMode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - fList[0]->onDrawVertices(vertexMode, vertexCount, vertices, texs, colors, blendMode, indices, - indexCount, this->overdrawPaint(paint)); +void SkOverdrawCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode blendMode, + const SkPaint& paint) { + fList[0]->onDrawVerticesObject(vertices, blendMode, this->overdrawPaint(paint)); } void SkOverdrawCanvas::onDrawAtlas(const SkImage* image, const SkRSXform xform[], diff --git a/src/core/SkOverdrawCanvas.h b/src/core/SkOverdrawCanvas.h index dd584ef0bf..5c247b1630 100644 --- a/src/core/SkOverdrawCanvas.h +++ b/src/core/SkOverdrawCanvas.h @@ -38,8 +38,7 @@ public: void onDrawDRRect(const SkRRect&, const SkRRect&, const SkPaint&) override; void onDrawRRect(const SkRRect&, const SkPaint&) override; void onDrawPoints(PointMode, size_t, const SkPoint[], const SkPaint&) override; - void onDrawVertices(VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[], - SkBlendMode, const uint16_t[], int, const SkPaint&) override; + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int, SkBlendMode, const SkRect*, const SkPaint*) override; void onDrawPath(const SkPath&, const SkPaint&) override; diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp index a2ada86419..9bdb6c5cc4 100644 --- a/src/core/SkPictureRecord.cpp +++ b/src/core/SkPictureRecord.cpp @@ -722,17 +722,6 @@ void SkPictureRecord::onDrawDrawable(SkDrawable* drawable, const SkMatrix* matri this->validate(initialOffset, size); } -void SkPictureRecord::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint pos[], const SkPoint texs[], - const SkColor cols[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - auto vertices = SkVertices::MakeCopy(vmode, vertexCount, pos, texs, cols, indexCount, indices); - if (vertices) { - this->onDrawVerticesObject(vertices.get(), bmode, paint); - } -} - void SkPictureRecord::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, const SkPaint& paint) { // op + paint index + vertices index + mode diff --git a/src/core/SkPictureRecord.h b/src/core/SkPictureRecord.h index 197684e347..4e0bf460e9 100644 --- a/src/core/SkPictureRecord.h +++ b/src/core/SkPictureRecord.h @@ -203,12 +203,6 @@ protected: const SkPaint*) override; void onDrawImageLattice(const SkImage*, const SkCanvas::Lattice& lattice, const SkRect& dst, const SkPaint*) override; - - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; diff --git a/src/core/SkRecorder.cpp b/src/core/SkRecorder.cpp index 9b38bcd2b3..0f2891a825 100644 --- a/src/core/SkRecorder.cpp +++ b/src/core/SkRecorder.cpp @@ -326,15 +326,6 @@ void SkRecorder::onDrawShadowedPicture(const SkPicture* pic, const SkMatrix* mat } -void SkRecorder::onDrawVertices(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->onDrawVerticesObject(SkVertices::MakeCopy(vmode, vertexCount, vertices, texs, colors, - indexCount, indices).get(), bmode, paint); -} - void SkRecorder::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, const SkPaint& paint) { APPEND(DrawVertices, paint, sk_ref_sp(const_cast<SkVertices*>(vertices)), bmode); diff --git a/src/core/SkRecorder.h b/src/core/SkRecorder.h index c13344227e..3407fc7032 100644 --- a/src/core/SkRecorder.h +++ b/src/core/SkRecorder.h @@ -124,11 +124,6 @@ public: const SkPaint*) override; void onDrawBitmapLattice(const SkBitmap&, const Lattice& lattice, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawAtlas(const SkImage*, const SkRSXform[], const SkRect[], const SkColor[], int count, SkBlendMode, const SkRect* cull, const SkPaint*) override; diff --git a/src/pipe/SkPipeCanvas.cpp b/src/pipe/SkPipeCanvas.cpp index e707f0db19..b05a643cb8 100644 --- a/src/pipe/SkPipeCanvas.cpp +++ b/src/pipe/SkPipeCanvas.cpp @@ -731,47 +731,14 @@ void SkPipeCanvas::onDrawRegion(const SkRegion& region, const SkPaint& paint) { write_paint(writer, paint, kGeometry_PaintUsage); } -void SkPipeCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - SkASSERT(vertexCount > 0); - - unsigned extra = 0; - if (vertexCount <= kVCount_DrawVerticesMask) { - extra |= vertexCount; - } - extra |= (unsigned)vmode << kVMode_DrawVerticesShift; - extra |= (unsigned)bmode << kXMode_DrawVerticesShift; - - if (texs) { - extra |= kHasTex_DrawVerticesMask; - } - if (colors) { - extra |= kHasColors_DrawVerticesMask; - } - if (indexCount > 0) { - extra |= kHasIndices_DrawVerticesMask; - } +void SkPipeCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, + const SkPaint& paint) { + unsigned extra = static_cast<unsigned>(bmode); SkPipeWriter writer(this); writer.write32(pack_verb(SkPipeVerb::kDrawVertices, extra)); - if (vertexCount > kVCount_DrawVerticesMask) { - writer.write32(vertexCount); - } - writer.write(vertices, vertexCount * sizeof(SkPoint)); - if (texs) { - writer.write(texs, vertexCount * sizeof(SkPoint)); - } - if (colors) { - writer.write(colors, vertexCount * sizeof(SkColor)); - } - if (indexCount > 0) { - writer.write32(indexCount); - SkASSERT(SkIsAlign2(indexCount)); - writer.write(indices, indexCount * sizeof(uint16_t)); - } + // TODO: dedup vertices? + writer.writeDataAsByteArray(vertices->encode().get()); write_paint(writer, paint, kVertices_PaintUsage); } diff --git a/src/pipe/SkPipeCanvas.h b/src/pipe/SkPipeCanvas.h index a506da4ece..5604ba787a 100644 --- a/src/pipe/SkPipeCanvas.h +++ b/src/pipe/SkPipeCanvas.h @@ -136,11 +136,7 @@ protected: const SkPaint*) override; void onDrawImageLattice(const SkImage*, const Lattice& lattice, const SkRect& dst, const SkPaint*) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onClipRect(const SkRect&, SkClipOp, ClipEdgeStyle) override; void onClipRRect(const SkRRect&, SkClipOp, ClipEdgeStyle) override; diff --git a/src/utils/SkDeferredCanvas.cpp b/src/utils/SkDeferredCanvas.cpp index 871cb509cf..ecd5495e8f 100644 --- a/src/utils/SkDeferredCanvas.cpp +++ b/src/utils/SkDeferredCanvas.cpp @@ -520,14 +520,10 @@ void SkDeferredCanvas::onDrawAtlas(const SkImage* image, const SkRSXform xform[] fCanvas->drawAtlas(image, xform, rects, colors, count, bmode, cull, paint); } -void SkDeferredCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { +void SkDeferredCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, + const SkPaint& paint) { this->flush_before_saves(); - fCanvas->drawVertices(vmode, vertexCount, vertices, texs, colors, bmode, - indices, indexCount, paint); + fCanvas->drawVertices(vertices, bmode, paint); } void SkDeferredCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], diff --git a/src/utils/SkDeferredCanvas.h b/src/utils/SkDeferredCanvas.h index f983a19e23..b2bae1b943 100644 --- a/src/utils/SkDeferredCanvas.h +++ b/src/utils/SkDeferredCanvas.h @@ -84,11 +84,7 @@ protected: void onDrawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, const SkPaint*, SrcRectConstraint) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawAtlas(const SkImage* image, const SkRSXform xform[], const SkRect rects[], const SkColor colors[], int count, SkBlendMode, const SkRect* cull, const SkPaint* paint) override; diff --git a/src/utils/SkDumpCanvas.cpp b/src/utils/SkDumpCanvas.cpp index dc420136f5..030f4deed3 100644 --- a/src/utils/SkDumpCanvas.cpp +++ b/src/utils/SkDumpCanvas.cpp @@ -465,14 +465,10 @@ void SkDumpCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matri picture->cullRect().fRight, picture->cullRect().fBottom); } -void SkDumpCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { - this->dump(kDrawVertices_Verb, &paint, "drawVertices(%s [%d] %g %g ...)", - toString(vmode), vertexCount, SkScalarToFloat(vertices[0].fX), - SkScalarToFloat(vertices[0].fY)); +void SkDumpCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode, + const SkPaint& paint) { + this->dump(kDrawVertices_Verb, &paint, "drawVertices(%s [%d] ...)", + toString(vertices->mode()), vertices->vertexCount()); } void SkDumpCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], diff --git a/src/utils/SkNWayCanvas.cpp b/src/utils/SkNWayCanvas.cpp index 4f51d85f4f..4f6ad46d85 100644 --- a/src/utils/SkNWayCanvas.cpp +++ b/src/utils/SkNWayCanvas.cpp @@ -282,15 +282,11 @@ void SkNWayCanvas::onDrawPicture(const SkPicture* picture, const SkMatrix* matri } } -void SkNWayCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { +void SkNWayCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, + const SkPaint& paint) { Iter iter(fList); while (iter.next()) { - iter->drawVertices(vmode, vertexCount, vertices, texs, colors, bmode, - indices, indexCount, paint); + iter->drawVertices(vertices, bmode, paint); } } diff --git a/src/utils/SkPaintFilterCanvas.cpp b/src/utils/SkPaintFilterCanvas.cpp index c6b28d0c5d..e504c72119 100644 --- a/src/utils/SkPaintFilterCanvas.cpp +++ b/src/utils/SkPaintFilterCanvas.cpp @@ -147,15 +147,11 @@ void SkPaintFilterCanvas::onDrawImageNine(const SkImage* image, const SkIRect& c } } -void SkPaintFilterCanvas::onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, - const SkPaint& paint) { +void SkPaintFilterCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, + const SkPaint& paint) { AutoPaintFilter apf(this, kVertices_Type, paint); if (apf.shouldDraw()) { - this->INHERITED::onDrawVertices(vmode, vertexCount, vertices, texs, colors, bmode, indices, - indexCount, *apf.paint()); + this->INHERITED::onDrawVerticesObject(vertices, bmode, *apf.paint()); } } diff --git a/tools/debugger/SkDebugCanvas.cpp b/tools/debugger/SkDebugCanvas.cpp index 522f4edbeb..6349810ff9 100644 --- a/tools/debugger/SkDebugCanvas.cpp +++ b/tools/debugger/SkDebugCanvas.cpp @@ -663,12 +663,10 @@ void SkDebugCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4 this->addDrawCommand(new SkDrawPatchCommand(cubics, colors, texCoords, bmode, paint)); } -void SkDebugCanvas::onDrawVertices(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->addDrawCommand(new SkDrawVerticesCommand(vmode, vertexCount, vertices, - texs, colors, bmode, indices, indexCount, paint)); +void SkDebugCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmode, + const SkPaint& paint) { + this->addDrawCommand(new SkDrawVerticesCommand(sk_ref_sp(const_cast<SkVertices*>(vertices)), + bmode, paint)); } void SkDebugCanvas::willRestore() { diff --git a/tools/debugger/SkDebugCanvas.h b/tools/debugger/SkDebugCanvas.h index 2b15bbaf90..0f2ae514dd 100644 --- a/tools/debugger/SkDebugCanvas.h +++ b/tools/debugger/SkDebugCanvas.h @@ -225,15 +225,7 @@ protected: void onDrawArc(const SkRect&, SkScalar, SkScalar, bool, const SkPaint&) override; void onDrawRRect(const SkRRect&, const SkPaint&) override; void onDrawPoints(PointMode, size_t count, const SkPoint pts[], const SkPaint&) override; - void onDrawVertices(VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint&) override; - void onDrawVerticesObject(const SkVertices* vertices, SkBlendMode mode, - const SkPaint& paint) override { - this->devolveSkVerticesToRaw(vertices, mode, paint); - } + void onDrawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override; void onDrawPath(const SkPath&, const SkPaint&) override; void onDrawBitmap(const SkBitmap&, SkScalar left, SkScalar top, const SkPaint*) override; void onDrawBitmapRect(const SkBitmap&, const SkRect* src, const SkRect& dst, const SkPaint*, diff --git a/tools/debugger/SkDrawCommand.cpp b/tools/debugger/SkDrawCommand.cpp index 09b8ab49ad..691a4f8012 100644 --- a/tools/debugger/SkDrawCommand.cpp +++ b/tools/debugger/SkDrawCommand.cpp @@ -3394,61 +3394,20 @@ SkDrawTextRSXformCommand* SkDrawTextRSXformCommand::fromJSON(Json::Value& comman /////////////////////////////////////////////////////////////////////////////////////////////////// -SkDrawVerticesCommand::SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode bmode, - const uint16_t indices[], int indexCount, +SkDrawVerticesCommand::SkDrawVerticesCommand(sk_sp<SkVertices> vertices, SkBlendMode bmode, const SkPaint& paint) : INHERITED(kDrawVertices_OpType) + , fVertices(std::move(vertices)) , fBlendMode(bmode) + , fPaint(paint) { - fVmode = vmode; - - fVertexCount = vertexCount; - - fVertices = new SkPoint[vertexCount]; - memcpy(fVertices, vertices, vertexCount * sizeof(SkPoint)); - - if (texs) { - fTexs = new SkPoint[vertexCount]; - memcpy(fTexs, texs, vertexCount * sizeof(SkPoint)); - } else { - fTexs = nullptr; - } - - if (colors) { - fColors = new SkColor[vertexCount]; - memcpy(fColors, colors, vertexCount * sizeof(SkColor)); - } else { - fColors = nullptr; - } - - if (indexCount > 0) { - fIndices = new uint16_t[indexCount]; - memcpy(fIndices, indices, indexCount * sizeof(uint16_t)); - } else { - fIndices = nullptr; - } - - fIndexCount = indexCount; - fPaint = paint; - // TODO(chudy) fInfo.push(SkObjectParser::CustomTextToString("To be implemented.")); fInfo.push(SkObjectParser::PaintToString(paint)); } -SkDrawVerticesCommand::~SkDrawVerticesCommand() { - delete [] fVertices; - delete [] fTexs; - delete [] fColors; - delete [] fIndices; -} - void SkDrawVerticesCommand::execute(SkCanvas* canvas) const { - canvas->drawVertices(fVmode, fVertexCount, fVertices, - fTexs, fColors, fBlendMode, fIndices, - fIndexCount, fPaint); + canvas->drawVertices(fVertices, fBlendMode, fPaint); } SkRestoreCommand::SkRestoreCommand() diff --git a/tools/debugger/SkDrawCommand.h b/tools/debugger/SkDrawCommand.h index 964badcf58..e23eed138c 100644 --- a/tools/debugger/SkDrawCommand.h +++ b/tools/debugger/SkDrawCommand.h @@ -16,6 +16,7 @@ #include "SkRSXform.h" #include "SkString.h" #include "SkTDArray.h" +#include "SkVertices.h" #include "SkJSONCPP.h" #include "UrlDataManager.h" @@ -732,24 +733,14 @@ private: class SkDrawVerticesCommand : public SkDrawCommand { public: - SkDrawVerticesCommand(SkCanvas::VertexMode vmode, int vertexCount, - const SkPoint vertices[], const SkPoint texs[], - const SkColor colors[], SkBlendMode, - const uint16_t indices[], int indexCount, - const SkPaint& paint); - virtual ~SkDrawVerticesCommand(); + SkDrawVerticesCommand(sk_sp<SkVertices>, SkBlendMode, const SkPaint&); + void execute(SkCanvas* canvas) const override; private: - SkCanvas::VertexMode fVmode; - int fVertexCount; - SkPoint* fVertices; - SkPoint* fTexs; - SkColor* fColors; - SkBlendMode fBlendMode; - uint16_t* fIndices; - int fIndexCount; - SkPaint fPaint; + sk_sp<SkVertices> fVertices; + SkBlendMode fBlendMode; + SkPaint fPaint; typedef SkDrawCommand INHERITED; }; |