diff options
-rw-r--r-- | src/core/SkBitmapDevice.cpp | 21 | ||||
-rw-r--r-- | src/core/SkBitmapDevice.h | 4 | ||||
-rw-r--r-- | src/core/SkCanvas.cpp | 5 | ||||
-rw-r--r-- | src/core/SkDevice.cpp | 9 | ||||
-rw-r--r-- | src/core/SkDevice.h | 7 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 125 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.h | 8 | ||||
-rw-r--r-- | src/pdf/SkPDFDevice.cpp | 6 | ||||
-rw-r--r-- | src/pdf/SkPDFDevice.h | 6 | ||||
-rw-r--r-- | src/svg/SkSVGDevice.cpp | 6 | ||||
-rw-r--r-- | src/svg/SkSVGDevice.h | 6 | ||||
-rw-r--r-- | src/xps/SkXPSDevice.cpp | 11 | ||||
-rw-r--r-- | src/xps/SkXPSDevice.h | 6 |
13 files changed, 74 insertions, 146 deletions
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp index b7757834f1..3be63ba66b 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 @@ void SkBitmapDevice::drawBitmapRect(const SkBitmap& bitmap, 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::drawText(const void* text, size_t len, 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 d6b512754f..d0f8be4acd 100644 --- a/src/core/SkBitmapDevice.h +++ b/src/core/SkBitmapDevice.h @@ -107,9 +107,7 @@ protected: 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 fbc2a3cc47..45acc535d7 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -99,8 +99,7 @@ protected: 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 @@ void SkCanvas::onDrawVerticesObject(const SkVertices* vertices, SkBlendMode bmod 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 11a6a87fde..21287a2260 100644 --- a/src/core/SkDevice.cpp +++ b/src/core/SkDevice.cpp @@ -131,7 +131,7 @@ void SkBaseDevice::drawPatch(const SkPoint cubics[12], const SkColor colors[4], 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::drawAtlas(const SkImage* atlas, const SkRSXform xform[], } } -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 6267b4451d..f1f5488111 100644 --- a/src/core/SkDevice.h +++ b/src/core/SkDevice.h @@ -233,12 +233,7 @@ protected: 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 55f0f17b2f..676dc2b9d9 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -1575,100 +1575,70 @@ static bool init_vertices_paint(GrContext* context, GrRenderTargetContext* rtc, } } -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()); - - // If both textures and vertex-colors are nullptr, strokes hairlines with the paint's color. - if ((nullptr == texs || nullptr == paint.getShader()) && nullptr == colors) { - - texs = nullptr; - - SkPaint copy(paint); - copy.setStyle(SkPaint::kStroke_Style); - copy.setStrokeWidth(0); + GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "wireframeVertices", fContext.get()); - GrPaint grPaint; - // we ignore the shader if texs is null. - if (!SkPaintToGrPaintNoShader(this->context(), fRenderTargetContext.get(), copy, - &grPaint)) { - return; - } + SkPaint copy(paint); + copy.setStyle(SkPaint::kStroke_Style); + copy.setStrokeWidth(0); - 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 @@ void SkGpuDevice::drawVerticesObject(const SkVertices* vertices, SkBlendMode mod 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 ed101f9bcf..8c2bf04881 100644 --- a/src/gpu/SkGpuDevice.h +++ b/src/gpu/SkGpuDevice.h @@ -89,10 +89,7 @@ public: 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 @@ private: 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 4e637bf3ca..10b4241235 100644 --- a/src/pdf/SkPDFDevice.cpp +++ b/src/pdf/SkPDFDevice.cpp @@ -1453,11 +1453,7 @@ void SkPDFDevice::drawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, } } -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 176b8ed1b2..303d450bbe 100644 --- a/src/pdf/SkPDFDevice.h +++ b/src/pdf/SkPDFDevice.h @@ -111,11 +111,7 @@ public: 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 91ebadb7f0..4c08986893 100644 --- a/src/svg/SkSVGDevice.cpp +++ b/src/svg/SkSVGDevice.cpp @@ -805,11 +805,7 @@ void SkSVGDevice::drawTextOnPath(const void* text, size_t len, const SkPath& pat } } -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 78f4cea834..092ef282ba 100644 --- a/src/svg/SkSVGDevice.h +++ b/src/svg/SkSVGDevice.h @@ -45,11 +45,7 @@ protected: 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 ec74e491c2..4a018a97fd 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 @@ void SkXPSDevice::drawPoints(SkCanvas::PointMode mode, 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 a03b2932ca..a0b4257071 100644 --- a/src/xps/SkXPSDevice.h +++ b/src/xps/SkXPSDevice.h @@ -100,11 +100,7 @@ protected: 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; |