aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkBitmapDevice.cpp21
-rw-r--r--src/core/SkBitmapDevice.h4
-rw-r--r--src/core/SkCanvas.cpp5
-rw-r--r--src/core/SkDevice.cpp9
-rw-r--r--src/core/SkDevice.h7
-rw-r--r--src/gpu/SkGpuDevice.cpp125
-rw-r--r--src/gpu/SkGpuDevice.h8
-rw-r--r--src/pdf/SkPDFDevice.cpp6
-rw-r--r--src/pdf/SkPDFDevice.h6
-rw-r--r--src/svg/SkSVGDevice.cpp6
-rw-r--r--src/svg/SkSVGDevice.h6
-rw-r--r--src/xps/SkXPSDevice.cpp11
-rw-r--r--src/xps/SkXPSDevice.h6
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;