| Index: gm/beziereffects.cpp
|
| diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp
|
| index f609ba8aef37cc38f8d602a5df8e01e832ef33b6..84e2a69e1954a19a2b13b88f876d113469ffee9d 100644
|
| --- a/gm/beziereffects.cpp
|
| +++ b/gm/beziereffects.cpp
|
| @@ -32,67 +32,48 @@ namespace skiagm {
|
| class BezierCubicOrConicTestBatch : public GrTestBatch {
|
| public:
|
| DEFINE_BATCH_CLASS_ID
|
| - struct Geometry : public GrTestBatch::Geometry {
|
| - SkRect fBounds;
|
| - };
|
|
|
| const char* name() const override { return "BezierCubicOrConicTestBatch"; }
|
|
|
| - static GrDrawBatch* Create(const GrGeometryProcessor* gp, const Geometry& geo,
|
| - const SkScalar klmEqs[9], SkScalar sign) {
|
| - return new BezierCubicOrConicTestBatch(gp, geo, klmEqs, sign);
|
| - }
|
| -
|
| -private:
|
| - BezierCubicOrConicTestBatch(const GrGeometryProcessor* gp, const Geometry& geo,
|
| - const SkScalar klmEqs[9], SkScalar sign)
|
| - : INHERITED(ClassID(), gp, geo.fBounds) {
|
| + BezierCubicOrConicTestBatch(const GrGeometryProcessor* gp, const SkRect& bounds,
|
| + GrColor color, const SkScalar klmEqs[9], SkScalar sign)
|
| + : INHERITED(ClassID(), bounds, color)
|
| + , fGeometryProcessor(SkRef(gp)) {
|
| for (int i = 0; i < 9; i++) {
|
| fKlmEqs[i] = klmEqs[i];
|
| }
|
| -
|
| - fGeometry = geo;
|
| fSign = sign;
|
| }
|
|
|
| +private:
|
| +
|
| struct Vertex {
|
| SkPoint fPosition;
|
| float fKLM[4]; // The last value is ignored. The effect expects a vec4f.
|
| };
|
|
|
| - Geometry* geoData(int index) override {
|
| - SkASSERT(0 == index);
|
| - return &fGeometry;
|
| - }
|
| -
|
| - const Geometry* geoData(int index) const override {
|
| - SkASSERT(0 == index);
|
| - return &fGeometry;
|
| - }
|
| -
|
| - void generateGeometry(Target* target) const override {
|
| + void onPrepareDraws(Target* target) const override {
|
| QuadHelper helper;
|
| - size_t vertexStride = this->geometryProcessor()->getVertexStride();
|
| + size_t vertexStride = fGeometryProcessor->getVertexStride();
|
| SkASSERT(vertexStride == sizeof(Vertex));
|
| Vertex* verts = reinterpret_cast<Vertex*>(helper.init(target, vertexStride, 1));
|
| if (!verts) {
|
| return;
|
| }
|
| -
|
| - verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds.fTop,
|
| - fGeometry.fBounds.fRight, fGeometry.fBounds.fBottom,
|
| + const SkRect& bounds = this->bounds();
|
| + verts[0].fPosition.setRectFan(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom,
|
| sizeof(Vertex));
|
| for (int v = 0; v < 4; ++v) {
|
| verts[v].fKLM[0] = eval_line(verts[v].fPosition, fKlmEqs + 0, fSign);
|
| verts[v].fKLM[1] = eval_line(verts[v].fPosition, fKlmEqs + 3, fSign);
|
| verts[v].fKLM[2] = eval_line(verts[v].fPosition, fKlmEqs + 6, 1.f);
|
| }
|
| - helper.recordDraw(target);
|
| + helper.recordDraw(target, fGeometryProcessor);
|
| }
|
|
|
| - Geometry fGeometry;
|
| - SkScalar fKlmEqs[9];
|
| - SkScalar fSign;
|
| + SkScalar fKlmEqs[9];
|
| + SkScalar fSign;
|
| + SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
|
|
|
| static const int kVertsPerCubic = 4;
|
| static const int kIndicesPerCubic = 6;
|
| @@ -218,12 +199,8 @@ protected:
|
| GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref();
|
| pipelineBuilder.setRenderTarget(rt);
|
|
|
| - BezierCubicOrConicTestBatch::Geometry geometry;
|
| - geometry.fColor = color;
|
| - geometry.fBounds = bounds;
|
| -
|
| SkAutoTUnref<GrDrawBatch> batch(
|
| - BezierCubicOrConicTestBatch::Create(gp, geometry, klmEqs, klmSigns[c]));
|
| + new BezierCubicOrConicTestBatch(gp, bounds, color, klmEqs, klmSigns[c]));
|
|
|
| drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);
|
| }
|
| @@ -359,12 +336,8 @@ protected:
|
| GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode))->unref();
|
| pipelineBuilder.setRenderTarget(rt);
|
|
|
| - BezierCubicOrConicTestBatch::Geometry geometry;
|
| - geometry.fColor = color;
|
| - geometry.fBounds = bounds;
|
| -
|
| SkAutoTUnref<GrDrawBatch> batch(
|
| - BezierCubicOrConicTestBatch::Create(gp, geometry, klmEqs, 1.f));
|
| + new BezierCubicOrConicTestBatch(gp, bounds, color, klmEqs, 1.f));
|
|
|
| drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);
|
| }
|
| @@ -423,57 +396,39 @@ private:
|
| class BezierQuadTestBatch : public GrTestBatch {
|
| public:
|
| DEFINE_BATCH_CLASS_ID
|
| - struct Geometry : public GrTestBatch::Geometry {
|
| - SkRect fBounds;
|
| - };
|
| -
|
| const char* name() const override { return "BezierQuadTestBatch"; }
|
|
|
| - static GrDrawBatch* Create(const GrGeometryProcessor* gp, const Geometry& geo,
|
| - const GrPathUtils::QuadUVMatrix& devToUV) {
|
| - return new BezierQuadTestBatch(gp, geo, devToUV);
|
| + BezierQuadTestBatch(const GrGeometryProcessor* gp, const SkRect& bounds, GrColor color,
|
| + const GrPathUtils::QuadUVMatrix& devToUV)
|
| + : INHERITED(ClassID(), bounds, color)
|
| + , fDevToUV(devToUV)
|
| + , fGeometryProcessor(SkRef(gp)) {
|
| }
|
|
|
| private:
|
| - BezierQuadTestBatch(const GrGeometryProcessor* gp, const Geometry& geo,
|
| - const GrPathUtils::QuadUVMatrix& devToUV)
|
| - : INHERITED(ClassID(), gp, geo.fBounds)
|
| - , fGeometry(geo)
|
| - , fDevToUV(devToUV) {
|
| - }
|
|
|
| struct Vertex {
|
| SkPoint fPosition;
|
| float fKLM[4]; // The last value is ignored. The effect expects a vec4f.
|
| };
|
|
|
| - Geometry* geoData(int index) override {
|
| - SkASSERT(0 == index);
|
| - return &fGeometry;
|
| - }
|
| -
|
| - const Geometry* geoData(int index) const override {
|
| - SkASSERT(0 == index);
|
| - return &fGeometry;
|
| - }
|
| -
|
| - void generateGeometry(Target* target) const override {
|
| + void onPrepareDraws(Target* target) const override {
|
| QuadHelper helper;
|
| - size_t vertexStride = this->geometryProcessor()->getVertexStride();
|
| + size_t vertexStride = fGeometryProcessor->getVertexStride();
|
| SkASSERT(vertexStride == sizeof(Vertex));
|
| Vertex* verts = reinterpret_cast<Vertex*>(helper.init(target, vertexStride, 1));
|
| if (!verts) {
|
| return;
|
| }
|
| - verts[0].fPosition.setRectFan(fGeometry.fBounds.fLeft, fGeometry.fBounds.fTop,
|
| - fGeometry.fBounds.fRight, fGeometry.fBounds.fBottom,
|
| + const SkRect& bounds = this->bounds();
|
| + verts[0].fPosition.setRectFan(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom,
|
| sizeof(Vertex));
|
| fDevToUV.apply<4, sizeof(Vertex), sizeof(SkPoint)>(verts);
|
| - helper.recordDraw(target);
|
| + helper.recordDraw(target, fGeometryProcessor);
|
| }
|
|
|
| - Geometry fGeometry;
|
| - GrPathUtils::QuadUVMatrix fDevToUV;
|
| + GrPathUtils::QuadUVMatrix fDevToUV;
|
| + SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor;
|
|
|
| static const int kVertsPerCubic = 4;
|
| static const int kIndicesPerCubic = 6;
|
| @@ -595,12 +550,8 @@ protected:
|
|
|
| GrPathUtils::QuadUVMatrix DevToUV(pts);
|
|
|
| - BezierQuadTestBatch::Geometry geometry;
|
| - geometry.fColor = color;
|
| - geometry.fBounds = bounds;
|
| -
|
| - SkAutoTUnref<GrDrawBatch> batch(BezierQuadTestBatch::Create(gp, geometry,
|
| - DevToUV));
|
| + SkAutoTUnref<GrDrawBatch> batch(
|
| + new BezierQuadTestBatch(gp, bounds, color, DevToUV));
|
|
|
| drawContext->drawContextPriv().testingOnly_drawBatch(pipelineBuilder, batch);
|
| }
|
|
|