| 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 104 return maxDim < 64.f && maxDim * maxScale < 256.f; | 104 return maxDim < 64.f && maxDim * maxScale < 256.f; |
| 105 } | 105 } |
| 106 | 106 |
| 107 //////////////////////////////////////////////////////////////////////////////// | 107 //////////////////////////////////////////////////////////////////////////////// |
| 108 | 108 |
| 109 // padding around path bounds to allow for antialiased pixels | 109 // padding around path bounds to allow for antialiased pixels |
| 110 static const SkScalar kAntiAliasPad = 1.0f; | 110 static const SkScalar kAntiAliasPad = 1.0f; |
| 111 | 111 |
| 112 class AADistanceFieldPathBatch : public GrVertexBatch { | 112 class AADistanceFieldPathBatch : public GrVertexBatch { |
| 113 public: | 113 public: |
| 114 DEFINE_BATCH_CLASS_ID | |
| 115 | |
| 116 typedef GrAADistanceFieldPathRenderer::PathData PathData; | 114 typedef GrAADistanceFieldPathRenderer::PathData PathData; |
| 117 typedef SkTDynamicHash<PathData, PathData::Key> PathCache; | 115 typedef SkTDynamicHash<PathData, PathData::Key> PathCache; |
| 118 typedef GrAADistanceFieldPathRenderer::PathDataList PathDataList; | 116 typedef GrAADistanceFieldPathRenderer::PathDataList PathDataList; |
| 119 | 117 |
| 120 struct Geometry { | 118 struct Geometry { |
| 121 Geometry(const SkStrokeRec& stroke) : fStroke(stroke) {} | 119 Geometry(const SkStrokeRec& stroke) : fStroke(stroke) {} |
| 122 SkPath fPath; | 120 SkPath fPath; |
| 123 SkStrokeRec fStroke; | 121 SkStrokeRec fStroke; |
| 124 bool fAntiAlias; | 122 bool fAntiAlias; |
| 125 PathData* fPathData; | 123 PathData* fPathData; |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 flushInfo.fInstancesToFlush++; | 269 flushInfo.fInstancesToFlush++; |
| 272 } | 270 } |
| 273 | 271 |
| 274 this->flush(target, &flushInfo); | 272 this->flush(target, &flushInfo); |
| 275 } | 273 } |
| 276 | 274 |
| 277 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 275 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 278 | 276 |
| 279 AADistanceFieldPathBatch(const Geometry& geometry, GrColor color, const SkMa
trix& viewMatrix, | 277 AADistanceFieldPathBatch(const Geometry& geometry, GrColor color, const SkMa
trix& viewMatrix, |
| 280 GrBatchAtlas* atlas, | 278 GrBatchAtlas* atlas, |
| 281 PathCache* pathCache, PathDataList* pathList) | 279 PathCache* pathCache, PathDataList* pathList) { |
| 282 : INHERITED(ClassID()) { | 280 this->initClassID<AADistanceFieldPathBatch>(); |
| 283 fBatch.fColor = color; | 281 fBatch.fColor = color; |
| 284 fBatch.fViewMatrix = viewMatrix; | 282 fBatch.fViewMatrix = viewMatrix; |
| 285 fGeoData.push_back(geometry); | 283 fGeoData.push_back(geometry); |
| 286 fGeoData.back().fPathData = nullptr; | 284 fGeoData.back().fPathData = nullptr; |
| 287 | 285 |
| 288 fAtlas = atlas; | 286 fAtlas = atlas; |
| 289 fPathCache = pathCache; | 287 fPathCache = pathCache; |
| 290 fPathList = pathList; | 288 fPathList = pathList; |
| 291 | 289 |
| 292 // Compute bounds | 290 // Compute bounds |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 bool fUsesLocalCoords; | 512 bool fUsesLocalCoords; |
| 515 bool fColorIgnored; | 513 bool fColorIgnored; |
| 516 bool fCoverageIgnored; | 514 bool fCoverageIgnored; |
| 517 }; | 515 }; |
| 518 | 516 |
| 519 BatchTracker fBatch; | 517 BatchTracker fBatch; |
| 520 SkSTArray<1, Geometry, true> fGeoData; | 518 SkSTArray<1, Geometry, true> fGeoData; |
| 521 GrBatchAtlas* fAtlas; | 519 GrBatchAtlas* fAtlas; |
| 522 PathCache* fPathCache; | 520 PathCache* fPathCache; |
| 523 PathDataList* fPathList; | 521 PathDataList* fPathList; |
| 524 | |
| 525 typedef GrVertexBatch INHERITED; | |
| 526 }; | 522 }; |
| 527 | 523 |
| 528 bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) { | 524 bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) { |
| 529 // we've already bailed on inverse filled paths, so this is safe | 525 // we've already bailed on inverse filled paths, so this is safe |
| 530 if (args.fPath->isEmpty()) { | 526 if (args.fPath->isEmpty()) { |
| 531 return true; | 527 return true; |
| 532 } | 528 } |
| 533 | 529 |
| 534 if (!fAtlas) { | 530 if (!fAtlas) { |
| 535 fAtlas = args.fResourceProvider->createAtlas(kAlpha_8_GrPixelConfig, | 531 fAtlas = args.fResourceProvider->createAtlas(kAlpha_8_GrPixelConfig, |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 621 geometry.fPath = GrTest::TestPath(random); | 617 geometry.fPath = GrTest::TestPath(random); |
| 622 geometry.fAntiAlias = random->nextBool(); | 618 geometry.fAntiAlias = random->nextBool(); |
| 623 | 619 |
| 624 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, | 620 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, |
| 625 gTestStruct.fAtlas, | 621 gTestStruct.fAtlas, |
| 626 &gTestStruct.fPathCache, | 622 &gTestStruct.fPathCache, |
| 627 &gTestStruct.fPathList); | 623 &gTestStruct.fPathList); |
| 628 } | 624 } |
| 629 | 625 |
| 630 #endif | 626 #endif |
| OLD | NEW |