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 { 26c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgextern const GrVertexAttrib kAttribs[] = { 27c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding}, 28c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org}; 29c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org} 30c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 31c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgnamespace skiagm { 32c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org/** 33c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org * This GM directly exercises a GrEffect that draws convex polygons. 34c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org */ 35c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgclass ConvexPolyEffect : public GM { 36c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgpublic: 37c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ConvexPolyEffect() { 38c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org this->setBGColor(0xFFFFFFFF); 39c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 40c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 41c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgprotected: 42c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual SkString onShortName() SK_OVERRIDE { 43c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return SkString("convex_poly_effect"); 44c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 45c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 46c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual SkISize onISize() SK_OVERRIDE { 47f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(720, 800); 48c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 49c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 50c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 51c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // This is a GPU-specific GM. 52c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return kGPUOnly_Flag; 53c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 544c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 55c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual void onOnceBeforeDraw() SK_OVERRIDE { 56c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath tri; 57c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.moveTo(5.f, 5.f); 58c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.lineTo(100.f, 20.f); 59c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.lineTo(15.f, 100.f); 604c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 61c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(tri); 62c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(SkPath())->reverseAddPath(tri); 634c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 64c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tri.close(); 65c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(tri); 664c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 67c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath ngon; 68c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org static const SkScalar kRadius = 50.f; 69c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org const SkPoint center = { kRadius, kRadius }; 70c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org for (int i = 0; i < GrConvexPolyEffect::kMaxEdges; ++i) { 71c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar angle = 2 * SK_ScalarPI * i / GrConvexPolyEffect::kMaxEdges; 72c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPoint point; 73c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point.fY = SkScalarSinCos(angle, &point.fX); 74c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point.scale(kRadius); 75c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org point = center + point; 76c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (0 == i) { 77c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.moveTo(point); 78c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } else { 79c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.lineTo(point); 80c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 81c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 824c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 83c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(ngon); 84c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkMatrix scaleM; 85c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org scaleM.setScale(1.1f, 0.4f); 86c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org ngon.transform(scaleM); 87c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org fPaths.addToTail(ngon); 88f0b0cda76fce5756aa12df4b807349e6dd85fd20skia.committer@gmail.com 89f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // integer edges 90f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.f, 1.f, 30.f, 25.f)); 91f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // half-integer edges 92f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 24.5f)); 93f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // vertically/horizontally thin rects that cover pixel centers 94f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.25f, 0.5f, 5.75f, 24.5f)); 95f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, 0.5f, 29.5f, 0.75f)); 96f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // vertically/horizontally thin rects that don't cover pixel centers 97f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.55f, 0.5f, 5.75f, 24.5f)); 98f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.5f, .05f, 29.5f, .25f)); 99f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // small in x and y 100f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(5.05f, .55f, 5.45f, .85f)); 101f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org // inverted in x and y 102f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); 103c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 104c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 105c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 1069c135db83d198e7d8200027c7d2cf60f38517ee3reed@google.com GrRenderTarget* rt = canvas->internal_private_accessTopLayerRenderTarget(); 107c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == rt) { 108c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 109c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 110c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrContext* context = rt->getContext(); 111c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == context) { 112c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 113c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 114c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 115c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar y = 0; 116c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org for (SkTLList<SkPath>::Iter iter(fPaths, SkTLList<SkPath>::Iter::kHead_IterStart); 117f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org NULL != iter.get(); 118c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org iter.next()) { 119f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org const SkPath* path = iter.get(); 120c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkScalar x = 0; 121c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 122cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org for (int et = 0; et < kGrEffectEdgeTypeCnt; ++et) { 123c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrTestTarget tt; 124c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org context->getTestTarget(&tt); 125c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (NULL == tt.target()) { 126c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkDEBUGFAIL("Couldn't get Gr test target."); 127c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org return; 128c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 129c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org GrDrawState* drawState = tt.target()->drawState(); 130c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setVertexAttribs<kAttribs>(SK_ARRAY_COUNT(kAttribs)); 1314c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 132c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkMatrix m; 133c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPath p; 134c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org m.setTranslate(x, y); 135c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org path->transform(m, &p); 1364c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 137cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org GrEffectEdgeType edgeType = (GrEffectEdgeType) et; 138c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkAutoTUnref<GrEffectRef> effect(GrConvexPolyEffect::Create(edgeType, p)); 139c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org if (!effect) { 140cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org continue; 141c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 142c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->addCoverageEffect(effect, 1); 143c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setIdentityViewMatrix(); 144c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setRenderTarget(rt); 145c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org drawState->setColor(0xff000000); 1464c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 147c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPoint verts[4]; 148c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkRect bounds = p.getBounds(); 149c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // Make sure any artifacts around the exterior of path are visible by using overly 150c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // conservative bounding geometry. 151c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org bounds.outset(5.f, 5.f); 152c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org bounds.toQuad(verts); 153c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 154c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->setVertexSourceToArray(verts, 4); 155c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); 156c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 1574c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 158f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org x += SkScalarCeilToScalar(path->getBounds().width() + 10.f); 159c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 1604c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 161c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org // Draw AA and non AA paths using normal API for reference. 162c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->save(); 163c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->translate(x, y); 164c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkPaint paint; 165c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->drawPath(*path, paint); 166c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->translate(path->getBounds().width() + 10.f, 0); 167c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org paint.setAntiAlias(true); 168c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->drawPath(*path, paint); 169c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org canvas->restore(); 1704c18e9fbb685cccf23342757e786027a032197daskia.committer@gmail.com 171f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org y += SkScalarCeilToScalar(path->getBounds().height() + 20.f); 172f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org } 173f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 174f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org for (SkTLList<SkRect>::Iter iter(fRects, SkTLList<SkRect>::Iter::kHead_IterStart); 175f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org NULL != iter.get(); 176f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org iter.next()) { 177f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 178f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkScalar x = 0; 179f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 180cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org for (int et = 0; et < kGrEffectEdgeTypeCnt; ++et) { 181d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org GrTestTarget tt; 182d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org context->getTestTarget(&tt); 183d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org if (NULL == tt.target()) { 184d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkDEBUGFAIL("Couldn't get Gr test target."); 185d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org return; 186d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 187d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkRect rect = *iter.get(); 188d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org rect.offset(x, y); 189cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org GrEffectEdgeType edgeType = (GrEffectEdgeType) et; 190d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkAutoTUnref<GrEffectRef> effect(GrConvexPolyEffect::Create(edgeType, rect)); 191d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org if (!effect) { 192cabf4b2f3664b98c1084fbb94a999af15ddfb52dcommit-bot@chromium.org continue; 193d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 194f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 195d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org GrDrawState* drawState = tt.target()->drawState(); 196d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setVertexAttribs<kAttribs>(SK_ARRAY_COUNT(kAttribs)); 197d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->addCoverageEffect(effect, 1); 198d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setIdentityViewMatrix(); 199d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setRenderTarget(rt); 200d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org drawState->setColor(0xff000000); 201f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 202d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkPoint verts[4]; 203d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org SkRect bounds = rect; 204d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org bounds.outset(5.f, 5.f); 205d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org bounds.toQuad(verts); 206f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 207d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->setVertexSourceToArray(verts, 4); 208d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->setIndexSourceToBuffer(context->getQuadIndexBuffer()); 209d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org tt.target()->drawIndexed(kTriangleFan_GrPrimitiveType, 0, 0, 4, 6); 210f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 211d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org x += SkScalarCeilToScalar(rect.width() + 10.f); 212d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org } 213f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 214d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org // Draw rect without and with AA using normal API for reference 215f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->save(); 216f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->translate(x, y); 217f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkPaint paint; 218d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org canvas->drawRect(*iter.get(), paint); 219d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org x += SkScalarCeilToScalar(iter.get()->width() + 10.f); 220f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org paint.setAntiAlias(true); 221f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->drawRect(*iter.get(), paint); 222f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org canvas->restore(); 223f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org 224d85f32ca40475fb246dd8ca93abaf1c3db0389e1commit-bot@chromium.org y += SkScalarCeilToScalar(iter.get()->height() + 20.f); 225c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 226c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org } 227c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 228c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgprivate: 229c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org SkTLList<SkPath> fPaths; 230f0539800165314f8bebd8a5ab765ec35012f1b03commit-bot@chromium.org SkTLList<SkRect> fRects; 231f0b0cda76fce5756aa12df4b807349e6dd85fd20skia.committer@gmail.com 232c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org typedef GM INHERITED; 233c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org}; 234c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 235c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.orgDEF_GM( return SkNEW(ConvexPolyEffect); ) 236c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org} 237c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org 238c3fe54975daf6274103bcfefe5ed2e7af8d0170acommit-bot@chromium.org#endif 239