| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrAADistanceFieldPathRenderer.h" | 9 #include "GrAADistanceFieldPathRenderer.h" |
| 10 | 10 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 SkDebugf("Cached paths: %d, freed paths: %d\n", g_NumCachedPaths, g_NumFreed
Paths); | 79 SkDebugf("Cached paths: %d, freed paths: %d\n", g_NumCachedPaths, g_NumFreed
Paths); |
| 80 #endif | 80 #endif |
| 81 } | 81 } |
| 82 | 82 |
| 83 //////////////////////////////////////////////////////////////////////////////// | 83 //////////////////////////////////////////////////////////////////////////////// |
| 84 bool GrAADistanceFieldPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) c
onst { | 84 bool GrAADistanceFieldPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) c
onst { |
| 85 | 85 |
| 86 // TODO: Support inverse fill | 86 // TODO: Support inverse fill |
| 87 if (!args.fShaderCaps->shaderDerivativeSupport() || !args.fAntiAlias || | 87 if (!args.fShaderCaps->shaderDerivativeSupport() || !args.fAntiAlias || |
| 88 SkStrokeRec::kHairline_Style == args.fStroke->getStyle() || | 88 SkStrokeRec::kHairline_Style == args.fStroke->getStyle() || |
| 89 args.fPath->isInverseFillType() || args.fPath->isVolatile()) { | 89 args.fPath->isInverseFillType() || args.fPath->isVolatile() || |
| 90 // We don't currently apply the dash or factor it into the DF key. (skbu
g.com/5082) |
| 91 args.fStroke->isDashed()) { |
| 90 return false; | 92 return false; |
| 91 } | 93 } |
| 92 | 94 |
| 93 // currently don't support perspective | 95 // currently don't support perspective |
| 94 if (args.fViewMatrix->hasPerspective()) { | 96 if (args.fViewMatrix->hasPerspective()) { |
| 95 return false; | 97 return false; |
| 96 } | 98 } |
| 97 | 99 |
| 98 // only support paths with bounds within kMediumMIP by kMediumMIP, | 100 // only support paths with bounds within kMediumMIP by kMediumMIP, |
| 99 // scaled to have bounds within 2.0f*kLargeMIP by 2.0f*kLargeMIP | 101 // scaled to have bounds within 2.0f*kLargeMIP by 2.0f*kLargeMIP |
| 100 // the goal is to accelerate rendering of lots of small paths that may be sc
aling | 102 // the goal is to accelerate rendering of lots of small paths that may be sc
aling |
| 101 SkScalar maxScale = args.fViewMatrix->getMaxScale(); | 103 SkScalar maxScale = args.fViewMatrix->getMaxScale(); |
| 102 const SkRect& bounds = args.fPath->getBounds(); | 104 const SkRect& bounds = args.fPath->getBounds(); |
| 103 SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height()); | 105 SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height()); |
| 104 // Approximate stroked size by adding the maximum of the stroke width or 2x
the miter limit | 106 // Approximate stroked size by adding the maximum of the stroke width or 2x
the miter limit |
| 105 if (!args.fStroke->isFillStyle()) { | 107 if (!args.fStroke->isFillStyle()) { |
| 106 SkScalar extraWidth = args.fStroke->getWidth(); | 108 SkScalar extraWidth = args.fStroke->getWidth(); |
| 107 if (SkPaint::kMiter_Join == args.fStroke->getJoin()) { | 109 if (SkPaint::kMiter_Join == args.fStroke->getJoin()) { |
| 108 extraWidth = SkTMax(extraWidth, 2.0f*args.fStroke->getMiter()); | 110 extraWidth = SkTMax(extraWidth, 2.0f*args.fStroke->getMiter()); |
| 109 } | 111 } |
| 110 maxDim += extraWidth; | 112 maxDim += extraWidth; |
| 111 } | 113 } |
| 112 | 114 |
| 113 return maxDim <= kMediumMIP && maxDim * maxScale <= 2.0f*kLargeMIP; | 115 return maxDim <= kMediumMIP && maxDim * maxScale <= 2.0f*kLargeMIP; |
| 114 } | 116 } |
| 115 | 117 |
| 116 //////////////////////////////////////////////////////////////////////////////// | 118 //////////////////////////////////////////////////////////////////////////////// |
| 117 | 119 |
| 118 // padding around path bounds to allow for antialiased pixels | 120 // padding around path bounds to allow for antialiased pixels |
| 119 static const SkScalar kAntiAliasPad = 1.0f; | 121 static const SkScalar kAntiAliasPad = 1.0f; |
| 120 | 122 |
| 121 class AADistanceFieldPathBatch : public GrVertexBatch { | 123 class AADistanceFieldPathBatch : public GrVertexBatch { |
| 122 public: | 124 public: |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 geometry.fAntiAlias = random->nextBool(); | 647 geometry.fAntiAlias = random->nextBool(); |
| 646 geometry.fGenID = random->nextU(); | 648 geometry.fGenID = random->nextU(); |
| 647 | 649 |
| 648 return AADistanceFieldPathBatch::Create(geometry, viewMatrix, | 650 return AADistanceFieldPathBatch::Create(geometry, viewMatrix, |
| 649 gTestStruct.fAtlas, | 651 gTestStruct.fAtlas, |
| 650 &gTestStruct.fPathCache, | 652 &gTestStruct.fPathCache, |
| 651 &gTestStruct.fPathList); | 653 &gTestStruct.fPathList); |
| 652 } | 654 } |
| 653 | 655 |
| 654 #endif | 656 #endif |
| OLD | NEW |