remove legacy vertices virtual from SkDevice

BUG=skia:6366

Change-Id: I9fb49538f358343a7c2e4541d0044d961ac1b54d
Reviewed-on: https://skia-review.googlesource.com/9870
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Florin Malita <fmalita@chromium.org>
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp
index b775783..3be63ba 100644
--- a/src/core/SkBitmapDevice.cpp
+++ b/src/core/SkBitmapDevice.cpp
@@ -20,6 +20,7 @@
 #include "SkShader.h"
 #include "SkSpecialImage.h"
 #include "SkSurface.h"
+#include "SkVertices.h"
 
 class SkColorTable;
 
@@ -355,8 +356,7 @@
     this->drawRect(*dstPtr, paintWithShader);
 }
 
-void SkBitmapDevice::drawSprite(const SkBitmap& bitmap,
-                                int x, int y, const SkPaint& paint) {
+void SkBitmapDevice::drawSprite(const SkBitmap& bitmap, int x, int y, const SkPaint& paint) {
     BDDraw(this).drawSprite(bitmap, x, y, paint);
 }
 
@@ -367,21 +367,18 @@
 
 void SkBitmapDevice::drawPosText(const void* text, size_t len, const SkScalar xpos[],
                                  int scalarsPerPos, const SkPoint& offset, const SkPaint& paint) {
-    BDDraw(this).drawPosText((const char*)text, len, xpos, scalarsPerPos, offset, paint, &fSurfaceProps);
+    BDDraw(this).drawPosText((const char*)text, len, xpos, scalarsPerPos, offset, paint,
+                             &fSurfaceProps);
 }
 
-void SkBitmapDevice::drawVertices(SkCanvas::VertexMode vmode,
-                                  int vertexCount,
-                                  const SkPoint verts[], const SkPoint textures[],
-                                  const SkColor colors[], SkBlendMode bmode,
-                                  const uint16_t indices[], int indexCount,
+void SkBitmapDevice::drawVertices(const SkVertices* vertices, SkBlendMode bmode,
                                   const SkPaint& paint) {
-    BDDraw(this).drawVertices(vmode, vertexCount, verts, textures, colors, bmode, indices,
-                              indexCount, paint);
+    BDDraw(this).drawVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(),
+                              vertices->texCoords(), vertices->colors(), bmode,
+                              vertices->indices(), vertices->indexCount(), paint);
 }
 
-void SkBitmapDevice::drawDevice(SkBaseDevice* device,
-                                int x, int y, const SkPaint& paint) {
+void SkBitmapDevice::drawDevice(SkBaseDevice* device, int x, int y, const SkPaint& paint) {
     SkASSERT(!paint.getImageFilter());
     BDDraw(this).drawSprite(static_cast<SkBitmapDevice*>(device)->fBitmap, x, y, paint);
 }
diff --git a/src/core/SkBitmapDevice.h b/src/core/SkBitmapDevice.h
index d6b5127..d0f8be4 100644
--- a/src/core/SkBitmapDevice.h
+++ b/src/core/SkBitmapDevice.h
@@ -107,9 +107,7 @@
                   const SkPaint&) override;
     void drawPosText(const void* text, size_t len, const SkScalar pos[],
                      int scalarsPerPos, const SkPoint& offset, const SkPaint& paint) override;
-    void drawVertices(SkCanvas::VertexMode, int vertexCount, const SkPoint verts[],
-                      const SkPoint texs[], const SkColor colors[], SkBlendMode,
-                      const uint16_t indices[], int indexCount, const SkPaint&) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
     void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override;
 
     ///////////////////////////////////////////////////////////////////////////
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index fbc2a3c..45acc53 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -99,8 +99,7 @@
     void drawPosText(const void*, size_t, const SkScalar[], int, const SkPoint&,
                      const SkPaint&) override {}
     void drawDevice(SkBaseDevice*, int, int, const SkPaint&) override {}
-    void drawVertices(SkCanvas::VertexMode, int, const SkPoint[], const SkPoint[], const SkColor[],
-                      SkBlendMode, const uint16_t[], int, const SkPaint&) override {}
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override {}
 
 private:
     typedef SkBaseDevice INHERITED;
@@ -2669,7 +2668,7 @@
 
     while (iter.next()) {
         // In the common case of one iteration we could std::move vertices here.
-        iter.fDevice->drawVerticesObject(vertices, bmode, looper.paint());
+        iter.fDevice->drawVertices(vertices, bmode, looper.paint());
     }
 
     LOOPER_END
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index 11a6a87..21287a2 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -131,7 +131,7 @@
     SkISize lod = SkPatchUtils::GetLevelOfDetail(cubics, &this->ctm());
     auto vertices = SkPatchUtils::MakeVertices(cubics, colors, texCoords, lod.width(), lod.height());
     if (vertices) {
-        this->drawVerticesObject(vertices.get(), bmode, paint);
+        this->drawVertices(vertices.get(), bmode, paint);
     }
 }
 
@@ -272,13 +272,6 @@
     }
 }
 
-void SkBaseDevice::drawVerticesObject(const SkVertices* vertices, SkBlendMode mode,
-                                      const SkPaint& paint) {
-    this->drawVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(),
-                       vertices->texCoords(), vertices->colors(), mode, vertices->indices(),
-                       vertices->indexCount(), paint);
-}
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 void SkBaseDevice::drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&) {}
diff --git a/src/core/SkDevice.h b/src/core/SkDevice.h
index 6267b44..f1f5488 100644
--- a/src/core/SkDevice.h
+++ b/src/core/SkDevice.h
@@ -233,12 +233,7 @@
     virtual void drawPosText(const void* text, size_t len,
                              const SkScalar pos[], int scalarsPerPos,
                              const SkPoint& offset, const SkPaint& paint) = 0;
-    virtual void drawVertices(SkCanvas::VertexMode, int vertexCount,
-                              const SkPoint verts[], const SkPoint texs[],
-                              const SkColor colors[], SkBlendMode,
-                              const uint16_t indices[], int indexCount,
-                              const SkPaint& paint) = 0;
-    virtual void drawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&);
+    virtual void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) = 0;
     // default implementation unrolls the blob runs.
     virtual void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y,
                               const SkPaint& paint, SkDrawFilter* drawFilter);
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index 55f0f17..676dc2b 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -1575,100 +1575,70 @@
     }
 }
 
-void SkGpuDevice::drawVertices(SkCanvas::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 SkGpuDevice::wireframeVertices(SkCanvas::VertexMode vmode, int vertexCount,
+                                    const SkPoint vertices[], SkBlendMode bmode,
+                                    const uint16_t indices[], int indexCount,
+                                    const SkPaint& paint) {
     ASSERT_SINGLE_OWNER
     CHECK_SHOULD_DRAW();
-    GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawVertices", fContext.get());
+    GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "wireframeVertices", fContext.get());
 
-    // If both textures and vertex-colors are nullptr, strokes hairlines with the paint's color.
-    if ((nullptr == texs || nullptr == paint.getShader()) && nullptr == colors) {
+    SkPaint copy(paint);
+    copy.setStyle(SkPaint::kStroke_Style);
+    copy.setStrokeWidth(0);
 
-        texs = nullptr;
-
-        SkPaint copy(paint);
-        copy.setStyle(SkPaint::kStroke_Style);
-        copy.setStrokeWidth(0);
-
-        GrPaint grPaint;
-        // we ignore the shader if texs is null.
-        if (!SkPaintToGrPaintNoShader(this->context(), fRenderTargetContext.get(), copy,
-                                      &grPaint)) {
-            return;
-        }
-
-        int triangleCount = 0;
-        int n = (nullptr == indices) ? vertexCount : indexCount;
-        switch (vmode) {
-            case SkCanvas::kTriangles_VertexMode:
-                triangleCount = n / 3;
-                break;
-            case SkCanvas::kTriangleStrip_VertexMode:
-            case SkCanvas::kTriangleFan_VertexMode:
-                triangleCount = n - 2;
-                break;
-        }
-
-        VertState       state(vertexCount, indices, indexCount);
-        VertState::Proc vertProc = state.chooseProc(vmode);
-
-        //number of indices for lines per triangle with kLines
-        indexCount = triangleCount * 6;
-
-        std::unique_ptr<uint16_t[]> lineIndices(new uint16_t[indexCount]);
-        int i = 0;
-        while (vertProc(&state)) {
-            lineIndices[i]     = state.f0;
-            lineIndices[i + 1] = state.f1;
-            lineIndices[i + 2] = state.f1;
-            lineIndices[i + 3] = state.f2;
-            lineIndices[i + 4] = state.f2;
-            lineIndices[i + 5] = state.f0;
-            i += 6;
-        }
-        fRenderTargetContext->drawVertices(this->clip(),
-                                           std::move(grPaint),
-                                           this->ctm(),
-                                           kLines_GrPrimitiveType,
-                                           vertexCount,
-                                           vertices,
-                                           texs,
-                                           colors,
-                                           lineIndices.get(),
-                                           indexCount);
+    GrPaint grPaint;
+    // we ignore the shader since we have no texture coordinates.
+    if (!SkPaintToGrPaintNoShader(this->context(), fRenderTargetContext.get(), copy, &grPaint)) {
         return;
     }
 
-    GrPrimitiveType primType = SkVertexModeToGrPrimitiveType(vmode);
+    int triangleCount = 0;
+    int n = (nullptr == indices) ? vertexCount : indexCount;
+    switch (vmode) {
+        case SkCanvas::kTriangles_VertexMode:
+            triangleCount = n / 3;
+            break;
+        case SkCanvas::kTriangleStrip_VertexMode:
+        case SkCanvas::kTriangleFan_VertexMode:
+            triangleCount = n - 2;
+            break;
+    }
 
-    GrPaint grPaint;
-    if (!init_vertices_paint(fContext.get(), fRenderTargetContext.get(),
-                             paint, this->ctm(), bmode, SkToBool(texs),
-                             SkToBool(colors), &grPaint)) {
-        return;
+    VertState       state(vertexCount, indices, indexCount);
+    VertState::Proc vertProc = state.chooseProc(vmode);
+
+    //number of indices for lines per triangle with kLines
+    indexCount = triangleCount * 6;
+
+    std::unique_ptr<uint16_t[]> lineIndices(new uint16_t[indexCount]);
+    int i = 0;
+    while (vertProc(&state)) {
+        lineIndices[i]     = state.f0;
+        lineIndices[i + 1] = state.f1;
+        lineIndices[i + 2] = state.f1;
+        lineIndices[i + 3] = state.f2;
+        lineIndices[i + 4] = state.f2;
+        lineIndices[i + 5] = state.f0;
+        i += 6;
     }
     fRenderTargetContext->drawVertices(this->clip(),
                                        std::move(grPaint),
                                        this->ctm(),
-                                       primType,
+                                       kLines_GrPrimitiveType,
                                        vertexCount,
                                        vertices,
-                                       texs,
-                                       colors,
-                                       indices,
-                                       indexCount,
-                                       GrRenderTargetContext::ColorArrayType::kSkColor);
+                                       nullptr,
+                                       nullptr,
+                                       lineIndices.get(),
+                                       indexCount);
 }
 
-void SkGpuDevice::drawVerticesObject(const SkVertices* vertices, SkBlendMode mode,
+void SkGpuDevice::drawVertices(const SkVertices* vertices, SkBlendMode mode,
                                      const SkPaint& paint) {
     ASSERT_SINGLE_OWNER
     CHECK_SHOULD_DRAW();
-    GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawVerticesObject", fContext.get());
+    GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawVertices", fContext.get());
 
     SkASSERT(vertices);
     GrPaint grPaint;
@@ -1676,9 +1646,8 @@
     bool hasTexs = vertices->hasTexCoords();
     if (!hasTexs && !hasColors) {
         // The dreaded wireframe mode. Fallback to drawVertices and go so slooooooow.
-        this->drawVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(),
-                           nullptr, nullptr, mode, vertices->indices(), vertices->indexCount(),
-                           paint);
+        this->wireframeVertices(vertices->mode(), vertices->vertexCount(), vertices->positions(),
+                                mode, vertices->indices(), vertices->indexCount(), paint);
     }
     if (!init_vertices_paint(fContext.get(), fRenderTargetContext.get(), paint, this->ctm(),
                              mode, hasTexs, hasColors, &grPaint)) {
diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h
index ed101f9..8c2bf04 100644
--- a/src/gpu/SkGpuDevice.h
+++ b/src/gpu/SkGpuDevice.h
@@ -89,10 +89,7 @@
                      int scalarsPerPos, const SkPoint& offset, const SkPaint&) override;
     void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y,
                       const SkPaint& paint, SkDrawFilter* drawFilter) override;
-    void drawVertices(SkCanvas::VertexMode, int vertexCount, const SkPoint verts[],
-                      const SkPoint texs[], const SkColor colors[], SkBlendMode,
-                      const uint16_t indices[], int indexCount, const SkPaint&) override;
-    void drawVerticesObject(const SkVertices*, SkBlendMode, const SkPaint&) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
     void drawAtlas(const SkImage* atlas, const SkRSXform[], const SkRect[],
                    const SkColor[], int count, SkBlendMode, const SkPaint&) override;
     void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override;
@@ -231,6 +228,9 @@
     bool drawDashLine(const SkPoint pts[2], const SkPaint& paint);
     void drawStrokedLine(const SkPoint pts[2], const SkPaint&);
 
+    void wireframeVertices(SkCanvas::VertexMode, int vertexCount, const SkPoint verts[],
+                           SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint&);
+
     static sk_sp<GrRenderTargetContext> MakeRenderTargetContext(GrContext*,
                                                                 SkBudgeted,
                                                                 const SkImageInfo&,
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 4e637bf..10b4241 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -1453,11 +1453,7 @@
     }
 }
 
-void SkPDFDevice::drawVertices(SkCanvas::VertexMode,
-                               int vertexCount, const SkPoint verts[],
-                               const SkPoint texs[], const SkColor colors[],
-                               SkBlendMode, const uint16_t indices[],
-                               int indexCount, const SkPaint& paint) {
+void SkPDFDevice::drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) {
     if (this->cs().isEmpty(size(*this))) {
         return;
     }
diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h
index 176b8ed..303d450 100644
--- a/src/pdf/SkPDFDevice.h
+++ b/src/pdf/SkPDFDevice.h
@@ -111,11 +111,7 @@
                      const SkPoint& offset, const SkPaint&) override;
     void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y,
                       const SkPaint &, SkDrawFilter*) override;
-    void drawVertices(SkCanvas::VertexMode,
-                      int vertexCount, const SkPoint verts[],
-                      const SkPoint texs[], const SkColor colors[],
-                      SkBlendMode, const uint16_t indices[],
-                      int indexCount, const SkPaint& paint) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
     void drawDevice(SkBaseDevice*, int x, int y,
                     const SkPaint&) override;
 
diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp
index 91ebadb..4c08986 100644
--- a/src/svg/SkSVGDevice.cpp
+++ b/src/svg/SkSVGDevice.cpp
@@ -805,11 +805,7 @@
     }
 }
 
-void SkSVGDevice::drawVertices(SkCanvas::VertexMode, int vertexCount,
-                               const SkPoint verts[], const SkPoint texs[],
-                               const SkColor colors[], SkBlendMode,
-                               const uint16_t indices[], int indexCount,
-                               const SkPaint& paint) {
+void SkSVGDevice::drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) {
     // todo
     SkDebugf("unsupported operation: drawVertices()\n");
 }
diff --git a/src/svg/SkSVGDevice.h b/src/svg/SkSVGDevice.h
index 78f4cea..092ef28 100644
--- a/src/svg/SkSVGDevice.h
+++ b/src/svg/SkSVGDevice.h
@@ -45,11 +45,7 @@
     void drawTextOnPath(const void* text, size_t len,
                         const SkPath& path, const SkMatrix* matrix,
                         const SkPaint& paint) override;
-    void drawVertices(SkCanvas::VertexMode, int vertexCount,
-                      const SkPoint verts[], const SkPoint texs[],
-                      const SkColor colors[], SkBlendMode,
-                      const uint16_t indices[], int indexCount,
-                      const SkPaint& paint) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint& paint) override;
 
     void drawDevice(SkBaseDevice*, int x, int y,
                     const SkPaint&) override;
diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp
index ec74e49..4a018a9 100644
--- a/src/xps/SkXPSDevice.cpp
+++ b/src/xps/SkXPSDevice.cpp
@@ -51,6 +51,7 @@
 #include "SkTTCFHeader.h"
 #include "SkTypefacePriv.h"
 #include "SkUtils.h"
+#include "SkVertices.h"
 #include "SkXPSDevice.h"
 
 //Windows defines a FLOAT type,
@@ -1157,13 +1158,9 @@
     draw(this, &SkDraw::drawPoints, mode, count, points, paint, this);
 }
 
-void SkXPSDevice::drawVertices(SkCanvas::VertexMode vertexMode,
-                               int vertexCount, const SkPoint verts[],
-                               const SkPoint texs[], const SkColor colors[],
-                               SkBlendMode blendMode, const uint16_t indices[],
-                               int indexCount, const SkPaint& paint) {
-    draw(this, &SkDraw::drawVertices, vertexMode, vertexCount, verts, texs, colors,
-         blendMode, indices, indexCount, paint);
+void SkXPSDevice::drawVertices(const SkVertices* v, SkBlendMode blendMode, const SkPaint& paint) {
+    draw(this, &SkDraw::drawVertices, v->mode(), v->vertexCount(), v->positions(), v->texCoords(),
+         v->colors(), blendMode, v->indices(), v->indexCount(), paint);
 }
 
 void SkXPSDevice::drawPaint(const SkPaint& origPaint) {
diff --git a/src/xps/SkXPSDevice.h b/src/xps/SkXPSDevice.h
index a03b293..a0b4257 100644
--- a/src/xps/SkXPSDevice.h
+++ b/src/xps/SkXPSDevice.h
@@ -100,11 +100,7 @@
     void drawPosText(const void* text, size_t len,
                      const SkScalar pos[], int scalarsPerPos,
                      const SkPoint& offset, const SkPaint& paint) override;
-    void drawVertices(SkCanvas::VertexMode, int vertexCount,
-                      const SkPoint verts[], const SkPoint texs[],
-                      const SkColor colors[], SkBlendMode,
-                      const uint16_t indices[], int indexCount,
-                      const SkPaint& paint) override;
+    void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override;
     void drawDevice(SkBaseDevice*, int x, int y,
                     const SkPaint&) override;