#include "SkRandom.h"
#include "SkShader.h"
#include "SkString.h"
+#include "SkVertices.h"
// This bench simulates the calls Skia sees from various HTML5 canvas
// game bench marks
{ SkIntToScalar(src.fRight), SkIntToScalar(src.fTop) },
{ SkIntToScalar(src.fRight), SkIntToScalar(src.fBottom) },
};
- canvas->drawVertices(SkCanvas::kTriangles_VertexMode,
- 4, verts, uvs, nullptr, indices, 6, p2);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangles_VertexMode,
+ 4, verts, uvs, nullptr, 6, indices),
+ SkBlendMode::kModulate, p2);
} else {
canvas->drawBitmapRect(fAtlas, src, dst, &p,
SkCanvas::kFast_SrcRectConstraint);
#include "SkRandom.h"
#include "SkShader.h"
#include "SkString.h"
+#include "SkVertices.h"
enum VertFlags {
kColors_VertFlag,
}
protected:
- virtual const char* onGetName() { return fName.c_str(); }
- virtual void onDraw(int loops, SkCanvas* canvas) {
+ const char* onGetName() override { return fName.c_str(); }
+ void onDraw(int loops, SkCanvas* canvas) override {
SkPaint paint;
this->setupPaint(&paint);
+ auto verts = SkVertices::MakeCopy(SkVertices::kTriangles_VertexMode, PTS,
+ fPts, nullptr, fColors, IDX, fIdx);
for (int i = 0; i < loops; i++) {
- canvas->drawVertices(SkCanvas::kTriangles_VertexMode, PTS,
- fPts, nullptr, fColors, fIdx, IDX, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
}
}
private:
}
case 53: {
fuzz_paint(fuzz, &paint, depth - 1);
- SkCanvas::VertexMode vertexMode;
+ SkVertices::VertexMode vertexMode;
SkBlendMode blendMode;
- fuzz_enum_range(fuzz, &vertexMode, 0, SkCanvas::kTriangleFan_VertexMode);
+ fuzz_enum_range(fuzz, &vertexMode, 0, SkVertices::kTriangleFan_VertexMode);
fuzz->next(&blendMode);
constexpr int kMaxCount = 100;
int vertexCount;
fuzz->nextRange(&indices[i], 0, vertexCount - 1);
}
}
- if (make_fuzz_t<bool>(fuzz)) {
- canvas->drawVertices(vertexMode, vertexCount, vertices,
- useTexs ? texs : nullptr, useColors ? colors : nullptr,
- blendMode, indexCount > 0 ? indices : nullptr, indexCount,
- paint);
- } else {
- canvas->drawVertices(SkVertices::MakeCopy(vertexMode, vertexCount, vertices,
- useTexs ? texs : nullptr,
- useColors ? colors : nullptr,
- indexCount, indices),
- blendMode, paint);
- }
+ canvas->drawVertices(SkVertices::MakeCopy(vertexMode, vertexCount, vertices,
+ useTexs ? texs : nullptr,
+ useColors ? colors : nullptr,
+ indexCount, indices),
+ blendMode, paint);
break;
}
default:
#include "SkImagePriv.h"
#include "SkPM4fPriv.h"
#include "SkSurface.h"
+#include "SkVertices.h"
static const int gRectSize = 50;
static const SkScalar gScalarSize = SkIntToScalar(gRectSize);
SkPoint::Make(gScalarSize, gScalarSize),
SkPoint::Make(0, gScalarSize)
};
- canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, vertices, nullptr, fColors,
- SkBlendMode::kModulate, nullptr, 0, paint);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode, 4, vertices,
+ nullptr, fColors),
+ SkBlendMode::kModulate, paint);
}
const char* label() override {
return "Vertices";
sk_sp<SkShader> fShader1;
sk_sp<SkShader> fShader2;
sk_sp<SkColorFilter> fColorFilter;
- bool fUseObject;
SkScalar fShaderScale;
public:
- VerticesGM(bool useObject, SkScalar shaderScale = 1)
- : fUseObject(useObject), fShaderScale(shaderScale) {}
+ VerticesGM(SkScalar shaderScale) : fShaderScale(shaderScale) {}
protected:
SkString onShortName() override {
SkString name("vertices");
- if (fUseObject) {
- name.append("_object");
- }
if (fShaderScale != 1) {
name.append("_scaled_shader");
}
const SkColor* colors = attrs.fHasColors ? fColors : nullptr;
const SkPoint* texs = attrs.fHasTexs ? fTexs : nullptr;
- if (fUseObject) {
- auto v = SkVertices::MakeCopy(SkCanvas::kTriangleFan_VertexMode,
- kMeshVertexCnt, fPts, texs, colors,
- kMeshIndexCnt, kMeshFan);
- canvas->drawVertices(v, mode, paint);
- } else {
- canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode,
- kMeshVertexCnt, fPts, texs, colors, mode,
- kMeshFan, kMeshIndexCnt, paint);
- }
+ auto v = SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode,
+ kMeshVertexCnt, fPts, texs, colors,
+ kMeshIndexCnt, kMeshFan);
+ canvas->drawVertices(v, mode, paint);
canvas->translate(40, 0);
++x;
}
/////////////////////////////////////////////////////////////////////////////////////
-DEF_GM(return new VerticesGM(true);)
-DEF_GM(return new VerticesGM(false);)
-DEF_GM(return new VerticesGM(false, 1 / kShaderSize);)
+DEF_GM(return new VerticesGM(1);)
+DEF_GM(return new VerticesGM(1 / kShaderSize);)
-static void draw_batching(SkCanvas* canvas, bool useObject) {
+static void draw_batching(SkCanvas* canvas) {
// Triangle fans can't batch so we convert to regular triangles,
static constexpr int kNumTris = kMeshIndexCnt - 2;
- SkVertices::Builder builder(SkCanvas::kTriangles_VertexMode, kMeshVertexCnt, 3 * kNumTris,
+ SkVertices::Builder builder(SkVertices::kTriangles_VertexMode, kMeshVertexCnt, 3 * kNumTris,
SkVertices::kHasColors_BuilderFlag |
SkVertices::kHasTexCoords_BuilderFlag);
paint.setShader(useShader ? shader : nullptr);
const SkPoint* t = useTex ? texs : nullptr;
- if (useObject) {
- auto v = SkVertices::MakeCopy(SkCanvas::kTriangles_VertexMode, kMeshVertexCnt,
- pts, t, colors, kNumTris * 3, indices);
- canvas->drawVertices(v, SkBlendMode::kModulate, paint);
- } else {
- canvas->drawVertices(SkCanvas::kTriangles_VertexMode, kMeshVertexCnt, pts,
- t, colors, indices, kNumTris * 3, paint);
- }
+ auto v = SkVertices::MakeCopy(SkVertices::kTriangles_VertexMode, kMeshVertexCnt,
+ pts, t, colors, kNumTris * 3, indices);
+ canvas->drawVertices(v, SkBlendMode::kModulate, paint);
canvas->restore();
}
canvas->translate(0, 120);
// This test exists to exercise batching in the gpu backend.
DEF_SIMPLE_GM(vertices_batching, canvas, 100, 500) {
- draw_batching(canvas, false);
+ draw_batching(canvas);
canvas->translate(50, 0);
- draw_batching(canvas, true);
+ draw_batching(canvas);
}
"SK_SUPPORT_LEGACY_SHADER_ISABITMAP",
"SK_SUPPORT_LEGACY_EMBOSSMASKFILTER",
"SK_SUPPORT_LEGACY_CANVAS_HELPERS",
+ "SK_SUPPORT_LEGACY_CANVAS_VERTICES",
]
}
#endif
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
enum VertexMode {
kTriangles_VertexMode,
kTriangleStrip_VertexMode,
this->drawVertices(vmode, vertexCount, vertices, texs, colors, SkBlendMode::kModulate,
indices, indexCount, paint);
}
+#endif
/** Draw vertices from an immutable SkVertices object.
#ifndef SkVertices_DEFINED
#define SkVertices_DEFINED
-#include "SkCanvas.h"
#include "SkColor.h"
#include "SkData.h"
#include "SkPoint.h"
#include "SkRect.h"
#include "SkRefCnt.h"
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
+#include "SkCanvas.h"
+#endif
+
/**
* An immutable set of vertex data that can be used with SkCanvas::drawVertices.
*/
class SkVertices : public SkNVRefCnt<SkVertices> {
public:
+ enum VertexMode {
+ kTriangles_VertexMode,
+ kTriangleStrip_VertexMode,
+ kTriangleFan_VertexMode,
+ };
+
/**
* Create a vertices by copying the specified arrays. texs and colors may be nullptr,
* and indices is ignored if indexCount == 0.
*/
- static sk_sp<SkVertices> MakeCopy(SkCanvas::VertexMode mode, int vertexCount,
+ static sk_sp<SkVertices> MakeCopy(VertexMode mode, int vertexCount,
const SkPoint positions[],
const SkPoint texs[],
const SkColor colors[],
int indexCount,
const uint16_t indices[]);
- static sk_sp<SkVertices> MakeCopy(SkCanvas::VertexMode mode, int vertexCount,
+ static sk_sp<SkVertices> MakeCopy(VertexMode mode, int vertexCount,
const SkPoint positions[],
const SkPoint texs[],
const SkColor colors[]) {
return MakeCopy(mode, vertexCount, positions, texs, colors, 0, nullptr);
}
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
+ static sk_sp<SkVertices> MakeCopy(SkCanvas::VertexMode mode, int vertexCount,
+ const SkPoint positions[],
+ const SkPoint texs[],
+ const SkColor colors[],
+ int indexCount,
+ const uint16_t indices[]) {
+ return MakeCopy(static_cast<VertexMode>(mode), vertexCount, positions, texs, colors,
+ indexCount, indices);
+ }
+
+ static sk_sp<SkVertices> MakeCopy(SkCanvas::VertexMode mode, int vertexCount,
+ const SkPoint positions[],
+ const SkPoint texs[],
+ const SkColor colors[]) {
+ return MakeCopy(static_cast<VertexMode>(mode), vertexCount, positions, texs, colors);
+ }
+#endif
+
struct Sizes;
enum BuilderFlags {
};
class Builder {
public:
+ Builder(VertexMode mode, int vertexCount, int indexCount, uint32_t flags);
+
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
Builder(SkCanvas::VertexMode mode, int vertexCount, int indexCount, uint32_t flags);
+#endif
bool isValid() const { return fVertices != nullptr; }
sk_sp<SkVertices> detach();
private:
- Builder(SkCanvas::VertexMode mode, int vertexCount, int indexCount, const Sizes&);
+ Builder(VertexMode mode, int vertexCount, int indexCount, const Sizes&);
- void init(SkCanvas::VertexMode mode, int vertexCount, int indexCount, const Sizes&);
+ void init(VertexMode mode, int vertexCount, int indexCount, const Sizes&);
// holds a partially complete object. only completed in detach()
sk_sp<SkVertices> fVertices;
};
uint32_t uniqueID() const { return fUniqueID; }
- SkCanvas::VertexMode mode() const { return fMode; }
+ VertexMode mode() const { return fMode; }
const SkRect& bounds() const { return fBounds; }
bool hasColors() const { return SkToBool(this->colors()); }
int fVertexCnt;
int fIndexCnt;
- SkCanvas::VertexMode fMode;
+ VertexMode fMode;
// below here is where the actual array data is stored.
};
#include "SkColorFilter.h"
#include "SkTime.h"
#include "SkTypeface.h"
+#include "SkVertices.h"
#include "SkOSFile.h"
#include "SkStream.h"
s += ds;
}
t += dt;
- canvas->drawVertices(SkCanvas::kTriangleStrip_VertexMode, stripCount,
- strip, doTextures ? tex : nullptr,
- doColors ? colors : nullptr, nullptr, 0, paint);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangleStrip_VertexMode, stripCount,
+ strip, doTextures ? tex : nullptr,
+ doColors ? colors : nullptr),
+ SkBlendMode::kModulate, paint);
}
}
#include "SkGradientShader.h"
#include "SkLayerRasterizer.h"
#include "SkPaint.h"
+#include "SkVertices.h"
#include "SkView.h"
#include "sk_tool_utils.h"
class Rec {
public:
- SkCanvas::VertexMode fMode;
+ SkVertices::VertexMode fMode;
int fCount;
SkPoint* fVerts;
SkPoint* fTexs;
int n = 10;
SkRandom rand;
- rec->fMode = SkCanvas::kTriangles_VertexMode;
+ rec->fMode = SkVertices::kTriangles_VertexMode;
rec->fCount = n * 3;
rec->fVerts = new SkPoint[rec->fCount];
const SkScalar ty = SkIntToScalar(texHeight);
const int n = 24;
- rec->fMode = SkCanvas::kTriangleFan_VertexMode;
+ rec->fMode = SkVertices::kTriangleFan_VertexMode;
rec->fCount = n + 2;
rec->fVerts = new SkPoint[rec->fCount];
rec->fTexs = new SkPoint[rec->fCount];
const SkScalar ty = SkIntToScalar(texHeight);
const int n = 24;
- rec->fMode = SkCanvas::kTriangleStrip_VertexMode;
+ rec->fMode = SkVertices::kTriangleStrip_VertexMode;
rec->fCount = 2 * (n + 1);
rec->fVerts = new SkPoint[rec->fCount];
rec->fTexs = new SkPoint[rec->fCount];
paint.setFilterQuality(kLow_SkFilterQuality);
for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) {
+ auto verts = SkVertices::MakeCopy(fRecs[i].fMode, fRecs[i].fCount,
+ fRecs[i].fVerts, fRecs[i].fTexs, nullptr);
canvas->save();
paint.setShader(nullptr);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->translate(SkIntToScalar(210), 0);
paint.setShader(fShader0);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->translate(SkIntToScalar(210), 0);
paint.setShader(fShader1);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->restore();
canvas->translate(0, SkIntToScalar(250));
#include "SkColorFilter.h"
#include "SkTime.h"
#include "SkTypeface.h"
+#include "SkVertices.h"
#include "SkOSFile.h"
#include "SkStream.h"
paint.setFilterQuality(kLow_SkFilterQuality);
for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) {
+ auto verts = SkVertices::MakeCopy(fRecs[i].fMode, fRecs[i].fCount,
+ fRecs[i].fVerts, fRecs[i].fTexs,
+ nullptr);
canvas->save();
paint.setShader(nullptr);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->translate(SkIntToScalar(250), 0);
paint.setShader(fShader0);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->translate(SkIntToScalar(250), 0);
paint.setShader(fShader1);
- canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount,
- fRecs[i].fVerts, fRecs[i].fTexs,
- nullptr, nullptr, 0, paint);
+ canvas->drawVertices(verts, SkBlendMode::kModulate, paint);
canvas->restore();
canvas->translate(0, SkIntToScalar(250));
private:
struct Rec {
- SkCanvas::VertexMode fMode;
+ SkVertices::VertexMode fMode;
int fCount;
SkPoint* fVerts;
SkPoint* fTexs;
int n = 10;
SkRandom rand;
- rec->fMode = SkCanvas::kTriangles_VertexMode;
+ rec->fMode = SkVertices::kTriangles_VertexMode;
rec->fCount = n * 3;
rec->fVerts = new SkPoint[rec->fCount];
const SkScalar ty = SkIntToScalar(texHeight);
const int n = 24;
- rec->fMode = SkCanvas::kTriangleFan_VertexMode;
+ rec->fMode = SkVertices::kTriangleFan_VertexMode;
rec->fCount = n + 2;
rec->fVerts = new SkPoint[rec->fCount];
rec->fTexs = new SkPoint[rec->fCount];
const SkScalar ty = SkIntToScalar(texHeight);
const int n = 24;
- rec->fMode = SkCanvas::kTriangleStrip_VertexMode;
+ rec->fMode = SkVertices::kTriangleStrip_VertexMode;
rec->fCount = 2 * (n + 1);
rec->fVerts = new SkPoint[rec->fCount];
rec->fTexs = new SkPoint[rec->fCount];
#include "SkClipOpPriv.h"
#include "SkVertices.h"
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
+static_assert((int)SkCanvas::kTriangles_VertexMode == (int)SkVertices::kTriangles_VertexMode, "");
+static_assert((int)SkCanvas::kTriangleStrip_VertexMode == (int)SkVertices::kTriangleStrip_VertexMode, "");
+static_assert((int)SkCanvas::kTriangleFan_VertexMode == (int)SkVertices::kTriangleFan_VertexMode, "");
+#endif
+
#define RETURN_ON_NULL(ptr) do { if (nullptr == (ptr)) return; } while (0)
class SkNoPixelsDevice : public SkBaseDevice {
this->onDrawPoints(mode, count, pts, paint);
}
+#ifdef SK_SUPPORT_LEGACY_CANVAS_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->onDrawVerticesObject(vertices.get(), bmode, paint);
}
}
+#endif
void SkCanvas::drawVertices(const sk_sp<SkVertices>& vertices, SkBlendMode mode,
const SkPaint& paint) {
} // anonymous ns
-void SkDraw::drawVertices(SkCanvas::VertexMode vmode, int count,
+void SkDraw::drawVertices(SkVertices::VertexMode vmode, int count,
const SkPoint vertices[], const SkPoint textures[],
const SkColor colors[], SkBlendMode bmode,
const uint16_t indices[], int indexCount,
#include "SkMask.h"
#include "SkPaint.h"
#include "SkStrokeRec.h"
+#include "SkVertices.h"
class SkBitmap;
class SkClipStack;
void drawPosText(const char text[], size_t byteLength,
const SkScalar pos[], int scalarsPerPosition,
const SkPoint& offset, const SkPaint&, const SkSurfaceProps*) const;
- void drawVertices(SkCanvas::VertexMode mode, int count,
+ void drawVertices(SkVertices::VertexMode mode, int count,
const SkPoint vertices[], const SkPoint textures[],
const SkColor colors[], SkBlendMode bmode,
const uint16_t indices[], int ptCount,
case DRAW_VERTICES_RETIRED_03_2017: {
const SkPaint* paint = fPictureData->getPaint(reader);
DrawVertexFlags flags = (DrawVertexFlags)reader->readInt();
- SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)reader->readInt();
+ SkVertices::VertexMode vmode = (SkVertices::VertexMode)reader->readInt();
int vCount = reader->readInt();
const SkPoint* verts = (const SkPoint*)reader->skip(vCount * sizeof(SkPoint));
const SkPoint* texs = nullptr;
return true;
}
-VertState::Proc VertState::chooseProc(SkCanvas::VertexMode mode) {
+VertState::Proc VertState::chooseProc(SkVertices::VertexMode mode) {
switch (mode) {
- case SkCanvas::kTriangles_VertexMode:
+ case SkVertices::kTriangles_VertexMode:
return fIndices ? TrianglesX : Triangles;
- case SkCanvas::kTriangleStrip_VertexMode:
+ case SkVertices::kTriangleStrip_VertexMode:
return fIndices ? TriangleStripX : TriangleStrip;
- case SkCanvas::kTriangleFan_VertexMode:
+ case SkVertices::kTriangleFan_VertexMode:
return fIndices ? TriangleFanX : TriangleFan;
default:
return nullptr;
#ifndef SkVertState_DEFINED
#define SkVertState_DEFINED
-#include "SkCanvas.h"
+#include "SkVertices.h"
/** \struct VertState
This is a helper for drawVertices(). It is used to iterate over the triangles
* Choose an appropriate function to traverse the vertices.
* @param mode Specifies the SkCanvas::VertexMode.
*/
- Proc chooseProc(SkCanvas::VertexMode mode);
+ Proc chooseProc(SkVertices::VertexMode mode);
private:
int fCount;
size_t fISize;
};
-SkVertices::Builder::Builder(SkCanvas::VertexMode mode, int vertexCount, int indexCount,
+SkVertices::Builder::Builder(VertexMode mode, int vertexCount, int indexCount,
uint32_t builderFlags) {
bool hasTexs = SkToBool(builderFlags & SkVertices::kHasTexCoords_BuilderFlag);
bool hasColors = SkToBool(builderFlags & SkVertices::kHasColors_BuilderFlag);
SkVertices::Sizes(vertexCount, indexCount, hasTexs, hasColors));
}
-SkVertices::Builder::Builder(SkCanvas::VertexMode mode, int vertexCount, int indexCount,
+SkVertices::Builder::Builder(VertexMode mode, int vertexCount, int indexCount,
const SkVertices::Sizes& sizes) {
this->init(mode, vertexCount, indexCount, sizes);
}
-void SkVertices::Builder::init(SkCanvas::VertexMode mode, int vertexCount, int indexCount,
+#ifdef SK_SUPPORT_LEGACY_CANVAS_VERTICES
+SkVertices::Builder::Builder(SkCanvas::VertexMode mode, int vertexCount, int indexCount,
+ uint32_t builderFlags) {
+ bool hasTexs = SkToBool(builderFlags & SkVertices::kHasTexCoords_BuilderFlag);
+ bool hasColors = SkToBool(builderFlags & SkVertices::kHasColors_BuilderFlag);
+ this->init(static_cast<VertexMode>(mode), vertexCount, indexCount,
+ SkVertices::Sizes(vertexCount, indexCount, hasTexs, hasColors));
+}
+#endif
+
+void SkVertices::Builder::init(VertexMode mode, int vertexCount, int indexCount,
const SkVertices::Sizes& sizes) {
if (!sizes.isValid()) {
return; // fVertices will already be null
///////////////////////////////////////////////////////////////////////////////////////////////////
-sk_sp<SkVertices> SkVertices::MakeCopy(SkCanvas::VertexMode mode, int vertexCount,
+sk_sp<SkVertices> SkVertices::MakeCopy(VertexMode mode, int vertexCount,
const SkPoint pos[], const SkPoint texs[],
const SkColor colors[], int indexCount,
const uint16_t indices[]) {
const int vertexCount = reader.readInt();
const int indexCount = reader.readInt();
- const SkCanvas::VertexMode mode = static_cast<SkCanvas::VertexMode>(packed & kMode_Mask);
+ const VertexMode mode = static_cast<VertexMode>(packed & kMode_Mask);
const bool hasTexs = SkToBool(packed & kHasTexs_Mask);
const bool hasColors = SkToBool(packed & kHasColors_Mask);
Sizes sizes(vertexCount, indexCount, hasTexs, hasColors);
}
}
-void SkGpuDevice::wireframeVertices(SkCanvas::VertexMode vmode, int vertexCount,
+void SkGpuDevice::wireframeVertices(SkVertices::VertexMode vmode, int vertexCount,
const SkPoint vertices[], SkBlendMode bmode,
const uint16_t indices[], int indexCount,
const SkPaint& paint) {
int triangleCount = 0;
int n = (nullptr == indices) ? vertexCount : indexCount;
switch (vmode) {
- case SkCanvas::kTriangles_VertexMode:
+ case SkVertices::kTriangles_VertexMode:
triangleCount = n / 3;
break;
- case SkCanvas::kTriangleStrip_VertexMode:
- case SkCanvas::kTriangleFan_VertexMode:
+ case SkVertices::kTriangleStrip_VertexMode:
+ case SkVertices::kTriangleFan_VertexMode:
triangleCount = n - 2;
break;
}
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[],
+ void wireframeVertices(SkVertices::VertexMode, int vertexCount, const SkPoint verts[],
SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint&);
static sk_sp<GrRenderTargetContext> MakeRenderTargetContext(GrContext*,
#include "SkImageInfo.h"
#include "SkMatrix.h"
#include "SkPM4f.h"
+#include "SkVertices.h"
#include "SkXfermodePriv.h"
class GrCaps;
//////////////////////////////////////////////////////////////////////////////
-static inline GrPrimitiveType SkVertexModeToGrPrimitiveType(const SkCanvas::VertexMode mode) {
+static inline GrPrimitiveType SkVertexModeToGrPrimitiveType(SkVertices::VertexMode mode) {
switch (mode) {
- case SkCanvas::kTriangles_VertexMode:
+ case SkVertices::kTriangles_VertexMode:
return kTriangles_GrPrimitiveType;
- case SkCanvas::kTriangleStrip_VertexMode:
+ case SkVertices::kTriangleStrip_VertexMode:
return kTriangleStrip_GrPrimitiveType;
- case SkCanvas::kTriangleFan_VertexMode:
+ case SkVertices::kTriangleFan_VertexMode:
return kTriangleFan_GrPrimitiveType;
}
SkFAIL("Invalid mode");
const SkPoint* positions, int vertexCount, const uint16_t* indices, int indexCount,
const uint32_t* colors, const SkPoint* localCoords, const SkRect& bounds,
GrRenderTargetContext::ColorArrayType colorArrayType) {
- static constexpr SkCanvas::VertexMode kIgnoredMode = SkCanvas::kTriangles_VertexMode;
+ static constexpr SkVertices::VertexMode kIgnoredMode = SkVertices::kTriangles_VertexMode;
SkASSERT(positions);
if (!colors) {
// When we tessellate we will fill a color array with the GrColor value passed above as
#include "SkRSXform.h"
#include "SkTextBlob.h"
#include "SkTypeface.h"
+#include "SkVertices.h"
class SkPipeReader;
static void drawVertices_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* canvas) {
SkASSERT(SkPipeVerb::kDrawVertices == unpack_verb(packedVerb));
- SkCanvas::VertexMode vmode = (SkCanvas::VertexMode)
- ((packedVerb & kVMode_DrawVerticesMask) >> kVMode_DrawVerticesShift);
- int vertexCount = packedVerb & kVCount_DrawVerticesMask;
- if (0 == vertexCount) {
- vertexCount = reader.read32();
- }
- SkBlendMode bmode = (SkBlendMode)
- ((packedVerb & kXMode_DrawVerticesMask) >> kXMode_DrawVerticesShift);
- const SkPoint* vertices = skip<SkPoint>(reader, vertexCount);
- const SkPoint* texs = nullptr;
- if (packedVerb & kHasTex_DrawVerticesMask) {
- texs = skip<SkPoint>(reader, vertexCount);
- }
- const SkColor* colors = nullptr;
- if (packedVerb & kHasColors_DrawVerticesMask) {
- colors = skip<SkColor>(reader, vertexCount);
- }
- int indexCount = 0;
- const uint16_t* indices = nullptr;
- if (packedVerb & kHasIndices_DrawVerticesMask) {
- indexCount = reader.read32();
- indices = skip<uint16_t>(reader, indexCount);
- }
-
- canvas->drawVertices(vmode, vertexCount, vertices, texs, colors, bmode,
- indices, indexCount, read_paint(reader));
+ SkBlendMode bmode = (SkBlendMode)unpack_verb_extra(packedVerb);
+ sk_sp<SkData> data = reader.readByteArrayAsData();
+ canvas->drawVertices(SkVertices::Decode(data->data(), data->size()), bmode, read_paint(reader));
}
static void drawPicture_handler(SkPipeReader& reader, uint32_t packedVerb, SkCanvas* canvas) {
}
}
-static const char* toString(SkCanvas::VertexMode vm) {
+static const char* toString(SkVertices::VertexMode vm) {
static const char* gVMNames[] = {
"TRIANGLES", "STRIP", "FAN"
};
flags |= SkVertices::kHasColors_BuilderFlag;
}
- SkVertices::Builder builder(SkCanvas::kTriangles_VertexMode, vertexCount, indexCount, flags);
+ SkVertices::Builder builder(SkVertices::kTriangles_VertexMode, vertexCount, indexCount, flags);
SkPoint* pos = builder.positions();
SkPoint* texs = builder.texCoords();
SkColor* colors = builder.colors();
if (!fSucceeded) {
return nullptr;
}
- return SkVertices::MakeCopy(SkCanvas::kTriangles_VertexMode, this->vertexCount(),
+ return SkVertices::MakeCopy(SkVertices::kTriangles_VertexMode, this->vertexCount(),
fPositions.begin(), nullptr, fColors.begin(),
this->indexCount(), fIndices.begin());
}
#include "SkColorPriv.h"
#include "SkGradientShader.h"
#include "SkRect.h"
+#include "SkVertices.h"
#include "Test.h"
#include "sk_tool_utils.h"
}
void draw(SkCanvas* canvas, SkPaint* paint) {
- canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, fPts, fPts,
- nullptr, SkBlendMode::kModulate, nullptr, 0, *paint);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode, 4, fPts,
+ fPts, nullptr),
+ SkBlendMode::kModulate, *paint);
}
};
#include "SkSurface.h"
#include "SkTemplates.h"
#include "SkTDArray.h"
+#include "SkVertices.h"
#include "Test.h"
DEF_TEST(canvas_clipbounds, reporter) {
SkPaint paint;
paint.setShader(SkShader::MakeBitmapShader(d.fBitmap, SkShader::kClamp_TileMode,
SkShader::kClamp_TileMode));
- canvas->drawVertices(SkCanvas::kTriangleFan_VertexMode, 4, pts, pts,
- nullptr, SkBlendMode::kModulate, nullptr, 0, paint);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangleFan_VertexMode, 4, pts, pts,
+ nullptr),
+ SkBlendMode::kModulate, paint);
}
// NYI: issue 240.
TEST_STEP_NO_PDF(DrawVerticesShader, DrawVerticesShaderTestStep);
for (auto colF : colFlags) {
uint32_t flags = texF | colF;
- SkVertices::Builder builder(SkCanvas::kTriangles_VertexMode, vCount, iCount, flags);
+ SkVertices::Builder builder(SkVertices::kTriangles_VertexMode, vCount, iCount, flags);
for (int i = 0; i < vCount; ++i) {
float x = (float)i;
#include "SkSwizzle.h"
#include "SkTaskGroup.h"
#include "SkTime.h"
+#include "SkVertices.h"
#include "imgui.h"
canvas->save();
canvas->clipRect(SkRect::MakeLTRB(drawCmd->ClipRect.x, drawCmd->ClipRect.y,
drawCmd->ClipRect.z, drawCmd->ClipRect.w));
- canvas->drawVertices(SkCanvas::kTriangles_VertexMode, drawList->VtxBuffer.size(),
- pos.begin(), uv.begin(), color.begin(),
- drawList->IdxBuffer.begin() + indexOffset, drawCmd->ElemCount,
- *paint);
+ canvas->drawVertices(SkVertices::MakeCopy(SkVertices::kTriangles_VertexMode,
+ drawList->VtxBuffer.size(), pos.begin(),
+ uv.begin(), color.begin(),
+ drawCmd->ElemCount,
+ drawList->IdxBuffer.begin() + indexOffset),
+ SkBlendMode::kModulate, *paint);
indexOffset += drawCmd->ElemCount;
canvas->restore();
}