| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright 2014 Google Inc. | 
|  | 3 | * | 
|  | 4 | * Use of this source code is governed by a BSD-style license that can be | 
|  | 5 | * found in the LICENSE file. | 
|  | 6 | */ | 
|  | 7 |  | 
|  | 8 | // This test only works with the GPU backend. | 
|  | 9 |  | 
|  | 10 | #include "gm.h" | 
|  | 11 |  | 
|  | 12 | #if SK_SUPPORT_GPU | 
|  | 13 |  | 
|  | 14 | #include "GrContext.h" | 
| joshualitt | 5478d42 | 2014-11-14 16:00:38 -0800 | [diff] [blame] | 15 | #include "GrDefaultGeoProcFactory.h" | 
| Brian Osman | 1105224 | 2016-10-27 14:47:55 -0400 | [diff] [blame] | 16 | #include "GrRenderTargetContextPriv.h" | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 17 | #include "GrPathUtils.h" | 
|  | 18 | #include "GrTest.h" | 
|  | 19 | #include "SkColorPriv.h" | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 20 | #include "SkGeometry.h" | 
|  | 21 | #include "SkTLList.h" | 
|  | 22 |  | 
| Brian Salomon | 8952743 | 2016-12-16 09:52:16 -0500 | [diff] [blame] | 23 | #include "ops/GrMeshDrawOp.h" | 
|  | 24 | #include "ops/GrTestMeshDrawOp.h" | 
| joshualitt | 2771b56 | 2015-08-07 12:46:26 -0700 | [diff] [blame] | 25 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 26 | #include "effects/GrConvexPolyEffect.h" | 
|  | 27 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 28 | /** outset rendered rect to visualize anti-aliased poly edges */ | 
|  | 29 | static SkRect outset(const SkRect& unsorted) { | 
|  | 30 | SkRect r = unsorted; | 
|  | 31 | r.outset(5.f, 5.f); | 
|  | 32 | return r; | 
|  | 33 | } | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 34 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 35 | /** sorts a rect */ | 
|  | 36 | static SkRect sorted_rect(const SkRect& unsorted) { | 
|  | 37 | SkRect r = unsorted; | 
|  | 38 | r.sort(); | 
|  | 39 | return r; | 
|  | 40 | } | 
|  | 41 |  | 
|  | 42 | namespace skiagm { | 
| Brian Salomon | 6b316e9 | 2016-12-16 09:35:49 -0500 | [diff] [blame] | 43 | class PolyBoundsOp : public GrTestMeshDrawOp { | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 44 | public: | 
| Brian Salomon | 25a8809 | 2016-12-01 09:36:50 -0500 | [diff] [blame] | 45 | DEFINE_OP_CLASS_ID | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 46 |  | 
| Brian Salomon | 6b316e9 | 2016-12-16 09:35:49 -0500 | [diff] [blame] | 47 | const char* name() const override { return "PolyBoundsOp"; } | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 48 |  | 
| Brian Salomon | f833478 | 2017-01-03 09:42:58 -0500 | [diff] [blame] | 49 | static std::unique_ptr<GrDrawOp> Make(const SkRect& rect, GrColor color) { | 
|  | 50 | return std::unique_ptr<GrDrawOp>(new PolyBoundsOp(rect, color)); | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 51 | } | 
|  | 52 |  | 
|  | 53 | private: | 
| Brian Salomon | 6b316e9 | 2016-12-16 09:35:49 -0500 | [diff] [blame] | 54 | PolyBoundsOp(const SkRect& rect, GrColor color) | 
|  | 55 | : INHERITED(ClassID(), outset(sorted_rect(rect)), color), fRect(outset(rect)) {} | 
|  | 56 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 57 | void onPrepareDraws(Target* target) const override { | 
|  | 58 | using namespace GrDefaultGeoProcFactory; | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 59 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 60 | Color color(this->color()); | 
| Brian Salomon | 8c852be | 2017-01-04 10:44:42 -0500 | [diff] [blame] | 61 | sk_sp<GrGeometryProcessor> gp(GrDefaultGeoProcFactory::Make( | 
|  | 62 | color, Coverage::kSolid_Type, LocalCoords::kUnused_Type, SkMatrix::I())); | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 63 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 64 | size_t vertexStride = gp->getVertexStride(); | 
| bsalomon | b5238a7 | 2015-05-05 07:49:49 -0700 | [diff] [blame] | 65 | SkASSERT(vertexStride == sizeof(SkPoint)); | 
|  | 66 | QuadHelper helper; | 
| bsalomon | 7539856 | 2015-08-17 12:55:38 -0700 | [diff] [blame] | 67 | SkPoint* verts = reinterpret_cast<SkPoint*>(helper.init(target, vertexStride, 1)); | 
| bsalomon | b5238a7 | 2015-05-05 07:49:49 -0700 | [diff] [blame] | 68 | if (!verts) { | 
| joshualitt | 4b31de8 | 2015-03-05 14:33:41 -0800 | [diff] [blame] | 69 | return; | 
|  | 70 | } | 
|  | 71 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 72 | fRect.toQuad(verts); | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 73 |  | 
| bungeman | 06ca8ec | 2016-06-09 08:01:03 -0700 | [diff] [blame] | 74 | helper.recordDraw(target, gp.get()); | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 75 | } | 
|  | 76 |  | 
| bsalomon | 342bfc2 | 2016-04-01 06:06:20 -0700 | [diff] [blame] | 77 | SkRect fRect; | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 78 |  | 
| Brian Salomon | 6b316e9 | 2016-12-16 09:35:49 -0500 | [diff] [blame] | 79 | typedef GrTestMeshDrawOp INHERITED; | 
| joshualitt | 95964c6 | 2015-02-11 13:45:50 -0800 | [diff] [blame] | 80 | }; | 
|  | 81 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 82 | /** | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 83 | * This GM directly exercises a GrProcessor that draws convex polygons. | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 84 | */ | 
|  | 85 | class ConvexPolyEffect : public GM { | 
|  | 86 | public: | 
|  | 87 | ConvexPolyEffect() { | 
|  | 88 | this->setBGColor(0xFFFFFFFF); | 
|  | 89 | } | 
|  | 90 |  | 
|  | 91 | protected: | 
| mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 92 | SkString onShortName() override { | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 93 | return SkString("convex_poly_effect"); | 
|  | 94 | } | 
|  | 95 |  | 
| mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 96 | SkISize onISize() override { | 
| tfarina | f539318 | 2014-06-09 23:59:03 -0700 | [diff] [blame] | 97 | return SkISize::Make(720, 800); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 98 | } | 
|  | 99 |  | 
| mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 100 | void onOnceBeforeDraw() override { | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 101 | SkPath tri; | 
|  | 102 | tri.moveTo(5.f, 5.f); | 
|  | 103 | tri.lineTo(100.f, 20.f); | 
|  | 104 | tri.lineTo(15.f, 100.f); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 105 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 106 | fPaths.addToTail(tri); | 
|  | 107 | fPaths.addToTail(SkPath())->reverseAddPath(tri); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 108 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 109 | tri.close(); | 
|  | 110 | fPaths.addToTail(tri); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 111 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 112 | SkPath ngon; | 
| mtklein | dbfd7ab | 2016-09-01 11:24:54 -0700 | [diff] [blame] | 113 | constexpr SkScalar kRadius = 50.f; | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 114 | const SkPoint center = { kRadius, kRadius }; | 
|  | 115 | for (int i = 0; i < GrConvexPolyEffect::kMaxEdges; ++i) { | 
|  | 116 | SkScalar angle = 2 * SK_ScalarPI * i / GrConvexPolyEffect::kMaxEdges; | 
|  | 117 | SkPoint point; | 
|  | 118 | point.fY = SkScalarSinCos(angle, &point.fX); | 
|  | 119 | point.scale(kRadius); | 
|  | 120 | point = center + point; | 
|  | 121 | if (0 == i) { | 
|  | 122 | ngon.moveTo(point); | 
|  | 123 | } else { | 
|  | 124 | ngon.lineTo(point); | 
|  | 125 | } | 
|  | 126 | } | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 127 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 128 | fPaths.addToTail(ngon); | 
|  | 129 | SkMatrix scaleM; | 
|  | 130 | scaleM.setScale(1.1f, 0.4f); | 
|  | 131 | ngon.transform(scaleM); | 
|  | 132 | fPaths.addToTail(ngon); | 
| skia.committer@gmail.com | f0b0cda | 2014-02-09 03:02:01 +0000 | [diff] [blame] | 133 |  | 
| bsalomon | 7888de0 | 2016-03-28 15:04:45 -0700 | [diff] [blame] | 134 | SkPath linePath; | 
|  | 135 | linePath.moveTo(5.f, 5.f); | 
|  | 136 | linePath.lineTo(6.f, 6.f); | 
|  | 137 | fPaths.addToTail(linePath); | 
|  | 138 |  | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 139 | // integer edges | 
|  | 140 | fRects.addToTail(SkRect::MakeLTRB(5.f, 1.f, 30.f, 25.f)); | 
|  | 141 | // half-integer edges | 
|  | 142 | fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 24.5f)); | 
|  | 143 | // vertically/horizontally thin rects that cover pixel centers | 
|  | 144 | fRects.addToTail(SkRect::MakeLTRB(5.25f, 0.5f, 5.75f, 24.5f)); | 
|  | 145 | fRects.addToTail(SkRect::MakeLTRB(5.5f,  0.5f, 29.5f, 0.75f)); | 
|  | 146 | // vertically/horizontally thin rects that don't cover pixel centers | 
|  | 147 | fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); | 
|  | 148 | fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); | 
|  | 149 | // small in x and y | 
|  | 150 | fRects.addToTail(SkRect::MakeLTRB(5.05f, .55f, 5.45f, .85f)); | 
|  | 151 | // inverted in x and y | 
|  | 152 | fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 153 | } | 
|  | 154 |  | 
| mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 155 | void onDraw(SkCanvas* canvas) override { | 
| Brian Osman | 1105224 | 2016-10-27 14:47:55 -0400 | [diff] [blame] | 156 | GrRenderTargetContext* renderTargetContext = | 
|  | 157 | canvas->internal_private_accessTopLayerRenderTargetContext(); | 
|  | 158 | if (!renderTargetContext) { | 
| robertphillips | 175dd9b | 2016-04-28 14:32:04 -0700 | [diff] [blame] | 159 | skiagm::GM::DrawGpuOnlyMessage(canvas); | 
| joshualitt | f5883a6 | 2016-01-13 07:47:38 -0800 | [diff] [blame] | 160 | return; | 
|  | 161 | } | 
|  | 162 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 163 | SkScalar y = 0; | 
| mtklein | dbfd7ab | 2016-09-01 11:24:54 -0700 | [diff] [blame] | 164 | constexpr SkScalar kDX = 12.f; | 
| bsalomon | f045d60 | 2015-11-18 19:01:12 -0800 | [diff] [blame] | 165 | for (PathList::Iter iter(fPaths, PathList::Iter::kHead_IterStart); | 
| bsalomon | 49f085d | 2014-09-05 13:34:00 -0700 | [diff] [blame] | 166 | iter.get(); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 167 | iter.next()) { | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 168 | const SkPath* path = iter.get(); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 169 | SkScalar x = 0; | 
|  | 170 |  | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 171 | for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { | 
| robertphillips | 1d24b8d | 2015-03-26 19:57:08 -0700 | [diff] [blame] | 172 | const SkMatrix m = SkMatrix::MakeTrans(x, y); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 173 | SkPath p; | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 174 | path->transform(m, &p); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 175 |  | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 176 | GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; | 
| bungeman | 06ca8ec | 2016-06-09 08:01:03 -0700 | [diff] [blame] | 177 | sk_sp<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, p)); | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 178 | if (!fp) { | 
| commit-bot@chromium.org | cabf4b2 | 2014-03-05 18:27:43 +0000 | [diff] [blame] | 179 | continue; | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 180 | } | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 181 |  | 
| robertphillips | 28a838e | 2016-06-23 14:07:00 -0700 | [diff] [blame] | 182 | GrPaint grPaint; | 
| Brian Salomon | a163392 | 2017-01-09 11:46:10 -0500 | [diff] [blame] | 183 | grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); | 
| robertphillips | 28a838e | 2016-06-23 14:07:00 -0700 | [diff] [blame] | 184 | grPaint.addCoverageFragmentProcessor(std::move(fp)); | 
| joshualitt | 9853cce | 2014-11-17 14:22:48 -0800 | [diff] [blame] | 185 |  | 
| Brian Salomon | f833478 | 2017-01-03 09:42:58 -0500 | [diff] [blame] | 186 | std::unique_ptr<GrDrawOp> op = PolyBoundsOp::Make(p.getBounds(), 0xff000000); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 187 |  | 
| Brian Salomon | 82f4431 | 2017-01-11 13:42:54 -0500 | [diff] [blame] | 188 | renderTargetContext->priv().testingOnly_addDrawOp(std::move(grPaint), | 
|  | 189 | GrAAType::kNone, std::move(op)); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 190 |  | 
| bsalomon | 7888de0 | 2016-03-28 15:04:45 -0700 | [diff] [blame] | 191 | x += SkScalarCeilToScalar(path->getBounds().width() + kDX); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 192 | } | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 193 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 194 | // Draw AA and non AA paths using normal API for reference. | 
|  | 195 | canvas->save(); | 
|  | 196 | canvas->translate(x, y); | 
|  | 197 | SkPaint paint; | 
|  | 198 | canvas->drawPath(*path, paint); | 
|  | 199 | canvas->translate(path->getBounds().width() + 10.f, 0); | 
|  | 200 | paint.setAntiAlias(true); | 
|  | 201 | canvas->drawPath(*path, paint); | 
|  | 202 | canvas->restore(); | 
| skia.committer@gmail.com | 4c18e9f | 2014-01-31 03:01:59 +0000 | [diff] [blame] | 203 |  | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 204 | y += SkScalarCeilToScalar(path->getBounds().height() + 20.f); | 
|  | 205 | } | 
|  | 206 |  | 
| bsalomon | f045d60 | 2015-11-18 19:01:12 -0800 | [diff] [blame] | 207 | for (RectList::Iter iter(fRects, RectList::Iter::kHead_IterStart); | 
| bsalomon | 49f085d | 2014-09-05 13:34:00 -0700 | [diff] [blame] | 208 | iter.get(); | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 209 | iter.next()) { | 
|  | 210 |  | 
|  | 211 | SkScalar x = 0; | 
|  | 212 |  | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 213 | for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 214 | SkRect rect = *iter.get(); | 
|  | 215 | rect.offset(x, y); | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 216 | GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; | 
| bungeman | 06ca8ec | 2016-06-09 08:01:03 -0700 | [diff] [blame] | 217 | sk_sp<GrFragmentProcessor> fp(GrConvexPolyEffect::Make(edgeType, rect)); | 
| joshualitt | b0a8a37 | 2014-09-23 09:50:21 -0700 | [diff] [blame] | 218 | if (!fp) { | 
| commit-bot@chromium.org | cabf4b2 | 2014-03-05 18:27:43 +0000 | [diff] [blame] | 219 | continue; | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 220 | } | 
|  | 221 |  | 
| robertphillips | 28a838e | 2016-06-23 14:07:00 -0700 | [diff] [blame] | 222 | GrPaint grPaint; | 
| Brian Salomon | a163392 | 2017-01-09 11:46:10 -0500 | [diff] [blame] | 223 | grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); | 
| robertphillips | 28a838e | 2016-06-23 14:07:00 -0700 | [diff] [blame] | 224 | grPaint.addCoverageFragmentProcessor(std::move(fp)); | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 225 |  | 
| Brian Salomon | f833478 | 2017-01-03 09:42:58 -0500 | [diff] [blame] | 226 | std::unique_ptr<GrDrawOp> op = PolyBoundsOp::Make(rect, 0xff000000); | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 227 |  | 
| Brian Salomon | 82f4431 | 2017-01-11 13:42:54 -0500 | [diff] [blame] | 228 | renderTargetContext->priv().testingOnly_addDrawOp(std::move(grPaint), | 
|  | 229 | GrAAType::kNone, std::move(op)); | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 230 |  | 
| bsalomon | 7888de0 | 2016-03-28 15:04:45 -0700 | [diff] [blame] | 231 | x += SkScalarCeilToScalar(rect.width() + kDX); | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 232 | } | 
|  | 233 |  | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 234 | // Draw rect without and with AA using normal API for reference | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 235 | canvas->save(); | 
|  | 236 | canvas->translate(x, y); | 
|  | 237 | SkPaint paint; | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 238 | canvas->drawRect(*iter.get(), paint); | 
| bsalomon | 7888de0 | 2016-03-28 15:04:45 -0700 | [diff] [blame] | 239 | x += SkScalarCeilToScalar(iter.get()->width() + kDX); | 
| commit-bot@chromium.org | f053980 | 2014-02-08 19:31:05 +0000 | [diff] [blame] | 240 | paint.setAntiAlias(true); | 
|  | 241 | canvas->drawRect(*iter.get(), paint); | 
|  | 242 | canvas->restore(); | 
|  | 243 |  | 
| commit-bot@chromium.org | d85f32c | 2014-02-28 14:43:26 +0000 | [diff] [blame] | 244 | y += SkScalarCeilToScalar(iter.get()->height() + 20.f); | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 245 | } | 
|  | 246 | } | 
|  | 247 |  | 
|  | 248 | private: | 
| bsalomon | f045d60 | 2015-11-18 19:01:12 -0800 | [diff] [blame] | 249 | typedef SkTLList<SkPath, 1> PathList; | 
|  | 250 | typedef SkTLList<SkRect, 1> RectList; | 
|  | 251 | PathList fPaths; | 
|  | 252 | RectList fRects; | 
| skia.committer@gmail.com | f0b0cda | 2014-02-09 03:02:01 +0000 | [diff] [blame] | 253 |  | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 254 | typedef GM INHERITED; | 
|  | 255 | }; | 
|  | 256 |  | 
| halcanary | 385fe4d | 2015-08-26 13:07:48 -0700 | [diff] [blame] | 257 | DEF_GM(return new ConvexPolyEffect;) | 
| commit-bot@chromium.org | c3fe549 | 2014-01-30 18:15:51 +0000 | [diff] [blame] | 258 | } | 
|  | 259 |  | 
|  | 260 | #endif |