1c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 2c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org/* 3c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org * Copyright 2014 Google Inc. 4c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org * 5c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 6c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org * found in the LICENSE file. 7c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org */ 8c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 9c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org// This test only works with the GPU backend. 10c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 11c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "gm.h" 12c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 13c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#if SK_SUPPORT_GPU 14c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 15c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "GrContext.h" 16c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "GrPathUtils.h" 17c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "GrTest.h" 18c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "SkColorPriv.h" 19c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "SkDevice.h" 20c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "SkGeometry.h" 21c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "SkTLList.h" 22c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 23c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#include "effects/GrConvexPolyEffect.h" 24c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 25c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgnamespace skiagm { 26c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org/** 27b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt * This GM directly exercises a GrProcessor that draws convex polygons. 28c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org */ 29c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgclass ConvexPolyEffect : public GM { 30c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgpublic: 31c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ConvexPolyEffect() { 32c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org this->setBGColor(0xFFFFFFFF); 33c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 34c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 35c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgprotected: 36c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual SkString onShortName() SK_OVERRIDE { 37c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return SkString("convex_poly_effect"); 38c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 39c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 40c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual SkISize onISize() SK_OVERRIDE { 41f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(720, 800); 42c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 43c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 44c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 45c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // This is a GPU-specific GM. 46c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return kGPUOnly_Flag; 47c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 484c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 49c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual void onOnceBeforeDraw() SK_OVERRIDE { 50c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath tri; 51c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.moveTo(5.f, 5.f); 52c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.lineTo(100.f, 20.f); 53c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.lineTo(15.f, 100.f); 544c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 55c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(tri); 56c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(SkPath())->reverseAddPath(tri); 574c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 58c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.close(); 59c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(tri); 604c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 61c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath ngon; 62c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org static const SkScalar kRadius = 50.f; 63c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org const SkPoint center = { kRadius, kRadius }; 64c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org for (int i = 0; i < GrConvexPolyEffect::kMaxEdges; ++i) { 65c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar angle = 2 * SK_ScalarPI * i / GrConvexPolyEffect::kMaxEdges; 66c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPoint point; 67c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point.fY = SkScalarSinCos(angle, &point.fX); 68c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point.scale(kRadius); 69c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point = center + point; 70c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (0 == i) { 71c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.moveTo(point); 72c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } else { 73c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.lineTo(point); 74c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 75c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 764c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 77c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(ngon); 78c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkMatrix scaleM; 79c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org scaleM.setScale(1.1f, 0.4f); 80c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.transform(scaleM); 81c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(ngon); 82f0b0cda76fce5756aa12df4b807349e6dd85fd20skia.committer@gmail.com 83f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // integer edges 84f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.f, 1.f, 30.f, 25.f)); 85f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // half-integer edges 86f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 24.5f)); 87f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // vertically/horizontally thin rects that cover pixel centers 88f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.25f, 0.5f, 5.75f, 24.5f)); 89f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 0.75f)); 90f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // vertically/horizontally thin rects that don't cover pixel centers 91f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); 92f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); 93f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // small in x and y 94f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.05f, .55f, 5.45f, .85f)); 95f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // inverted in x and y 96f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); 97c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 98c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 99c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 1009c135db83d198e7d8200027c7d2cf60f38517ee3reed@google.com GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); 101c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == rt) { 102c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 103c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 104c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrContext* context = rt->getContext(); 105c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == context) { 106c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 107c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 108c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 109c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar y = 0; 110c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org for (SkTLList<SkPath>::Iter iter(fPaths, SkTLList<SkPath>::Iter::kHead_IterStart); 11149f085dddff10473b6ebf832a974288300224e60bsalomon iter.get(); 112c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org iter.next()) { 113f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org const SkPath* path = iter.get(); 114c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar x = 0; 115c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 116b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { 117c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrTestTarget tt; 118c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org context->getTestTarget(&tt); 119c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == tt.target()) { 120c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkDEBUGFAIL("Couldn't get Gr test target."); 121c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 122c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 123c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrDrawState* drawState = tt.target()->drawState(); 1244c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 125c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkMatrix m; 126c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath p; 127c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org m.setTranslate(x, y); 128c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org path->transform(m, &p); 1294c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 130b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; 131b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(edgeType, p)); 132b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt if (!fp) { 133cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org continue; 134c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 135b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt drawState->addCoverageProcessor(fp); 136c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setIdentityViewMatrix(); 137c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setRenderTarget(rt); 138c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setColor(0xff000000); 1394c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 140c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPoint verts[4]; 141c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkRect bounds = p.getBounds(); 142c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // Make sure any artifacts around the exterior of path are visible by using overly 143c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // conservative bounding geometry. 144c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org bounds.outset(5.f, 5.f); 145c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org bounds.toQuad(verts); 146c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 147c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->setVertexSourceToArray(verts, 4); 148c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); 149c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 1504c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 151f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org x += SkScalarCeilToScalar(path->getBounds().width() + 10.f); 152c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 1534c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 154c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // Draw AA and non AA paths using normal API for reference. 155c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->save(); 156c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->translate(x, y); 157c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPaint paint; 158c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->drawPath(*path, paint); 159c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->translate(path->getBounds().width() + 10.f, 0); 160c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org paint.setAntiAlias(true); 161c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->drawPath(*path, paint); 162c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->restore(); 1634c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 164f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org y += SkScalarCeilToScalar(path->getBounds().height() + 20.f); 165f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org } 166f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 167f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org for (SkTLList<SkRect>::Iter iter(fRects, SkTLList<SkRect>::Iter::kHead_IterStart); 16849f085dddff10473b6ebf832a974288300224e60bsalomon iter.get(); 169f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org iter.next()) { 170f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 171f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkScalar x = 0; 172f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 173b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt for (int et = 0; et < kGrProcessorEdgeTypeCnt; ++et) { 174d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org GrTestTarget tt; 175d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org context->getTestTarget(&tt); 176d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org if (NULL == tt.target()) { 177d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkDEBUGFAIL("Couldn't get Gr test target."); 178d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org return; 179d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 180d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkRect rect = *iter.get(); 181d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org rect.offset(x, y); 182b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt GrPrimitiveEdgeType edgeType = (GrPrimitiveEdgeType) et; 183b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt SkAutoTUnref<GrFragmentProcessor> fp(GrConvexPolyEffect::Create(edgeType, rect)); 184b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt if (!fp) { 185cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org continue; 186d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 187f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 188d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org GrDrawState* drawState = tt.target()->drawState(); 189b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt drawState->addCoverageProcessor(fp); 190d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setIdentityViewMatrix(); 191d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setRenderTarget(rt); 192d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setColor(0xff000000); 193f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 194d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkPoint verts[4]; 195d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkRect bounds = rect; 196d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org bounds.outset(5.f, 5.f); 197d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org bounds.toQuad(verts); 198f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 199d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->setVertexSourceToArray(verts, 4); 200d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); 201d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 202f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 203d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org x += SkScalarCeilToScalar(rect.width() + 10.f); 204d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 205f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 206d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org // Draw rect without and with AA using normal API for reference 207f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->save(); 208f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->translate(x, y); 209f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkPaint paint; 210d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org canvas->drawRect(*iter.get(), paint); 211d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org x += SkScalarCeilToScalar(iter.get()->width() + 10.f); 212f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org paint.setAntiAlias(true); 213f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->drawRect(*iter.get(), paint); 214f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->restore(); 215f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 216d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org y += SkScalarCeilToScalar(iter.get()->height() + 20.f); 217c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 218c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 219c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 220c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgprivate: 221c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkTLList<SkPath> fPaths; 222f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkTLList<SkRect> fRects; 223f0b0cda76fce5756aa12df4b807349e6dd85fd20skia.committer@gmail.com 224c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org typedef GM INHERITED; 225c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org}; 226c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 227c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgDEF_GM( return SkNEW(ConvexPolyEffect); ) 228c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org} 229c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 230c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#endif 231