| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2015 Google Inc. | 3 * Copyright 2015 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 "GrAALinearizingConvexPathRenderer.h" | 9 #include "GrAALinearizingConvexPathRenderer.h" |
| 10 | 10 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 tess.coverage(i); | 86 tess.coverage(i); |
| 87 } | 87 } |
| 88 } | 88 } |
| 89 | 89 |
| 90 for (int i = 0; i < tess.numIndices(); ++i) { | 90 for (int i = 0; i < tess.numIndices(); ++i) { |
| 91 idxs[i] = tess.index(i) + firstIndex; | 91 idxs[i] = tess.index(i) + firstIndex; |
| 92 } | 92 } |
| 93 } | 93 } |
| 94 | 94 |
| 95 static const GrGeometryProcessor* create_fill_gp(bool tweakAlphaForCoverage, | 95 static const GrGeometryProcessor* create_fill_gp(bool tweakAlphaForCoverage, |
| 96 const SkMatrix& viewMatrix, | 96 const SkMatrix& localMatrix, |
| 97 bool usesLocalCoords, | 97 bool usesLocalCoords, |
| 98 bool coverageIgnored) { | 98 bool coverageIgnored) { |
| 99 using namespace GrDefaultGeoProcFactory; | 99 uint32_t flags = GrDefaultGeoProcFactory::kColor_GPType; |
| 100 if (!tweakAlphaForCoverage) { |
| 101 flags |= GrDefaultGeoProcFactory::kCoverage_GPType; |
| 102 } |
| 100 | 103 |
| 101 Color color(Color::kAttribute_Type); | 104 return GrDefaultGeoProcFactory::Create(flags, GrColor_WHITE, usesLocalCoords
, coverageIgnored, |
| 102 Coverage::Type coverageType; | 105 SkMatrix::I(), localMatrix); |
| 103 if (coverageIgnored) { | |
| 104 coverageType = Coverage::kNone_Type; | |
| 105 } else if (tweakAlphaForCoverage) { | |
| 106 coverageType = Coverage::kSolid_Type; | |
| 107 } else { | |
| 108 coverageType = Coverage::kAttribute_Type; | |
| 109 } | |
| 110 Coverage coverage(coverageType); | |
| 111 LocalCoords localCoords(usesLocalCoords ? LocalCoords::kUsePosition_Type : | |
| 112 LocalCoords::kUnused_Type); | |
| 113 return CreateForDeviceSpace(color, coverage, localCoords, viewMatrix); | |
| 114 } | 106 } |
| 115 | 107 |
| 116 class AAFlatteningConvexPathBatch : public GrBatch { | 108 class AAFlatteningConvexPathBatch : public GrBatch { |
| 117 public: | 109 public: |
| 118 struct Geometry { | 110 struct Geometry { |
| 119 GrColor fColor; | 111 GrColor fColor; |
| 120 SkMatrix fViewMatrix; | 112 SkMatrix fViewMatrix; |
| 121 SkPath fPath; | 113 SkPath fPath; |
| 122 SkScalar fStrokeWidth; | 114 SkScalar fStrokeWidth; |
| 123 SkPaint::Join fJoin; | 115 SkPaint::Join fJoin; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 } | 171 } |
| 180 memcpy(idxs, indices, indexCount * sizeof(uint16_t)); | 172 memcpy(idxs, indices, indexCount * sizeof(uint16_t)); |
| 181 info.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, indexBuffer,
firstVertex, | 173 info.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, indexBuffer,
firstVertex, |
| 182 firstIndex, vertexCount, indexCount); | 174 firstIndex, vertexCount, indexCount); |
| 183 batchTarget->draw(info); | 175 batchTarget->draw(info); |
| 184 } | 176 } |
| 185 | 177 |
| 186 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 178 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 187 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); | 179 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); |
| 188 | 180 |
| 189 // Setup GrGeometryProcessor | 181 SkMatrix invert; |
| 190 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaF
orCoverage, | 182 if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { |
| 191 this->viewMatr
ix(), | 183 SkDebugf("Could not invert viewmatrix\n"); |
| 192 this->usesLoca
lCoords(), | |
| 193 this->coverage
Ignored())); | |
| 194 if (!gp) { | |
| 195 SkDebugf("Couldn't create a GrGeometryProcessor\n"); | |
| 196 return; | 184 return; |
| 197 } | 185 } |
| 198 | 186 |
| 187 // Setup GrGeometryProcessor |
| 188 SkAutoTUnref<const GrGeometryProcessor> gp( |
| 189 create_fill_gp(canTweakAlphaForC
overage, invert, |
| 190 this->usesLocalCo
ords(), |
| 191 this->coverageIgn
ored())); |
| 192 |
| 199 batchTarget->initDraw(gp, pipeline); | 193 batchTarget->initDraw(gp, pipeline); |
| 200 | 194 |
| 201 size_t vertexStride = gp->getVertexStride(); | 195 size_t vertexStride = gp->getVertexStride(); |
| 202 | 196 |
| 203 SkASSERT(canTweakAlphaForCoverage ? | 197 SkASSERT(canTweakAlphaForCoverage ? |
| 204 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt
tr) : | 198 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt
tr) : |
| 205 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo
verageAttr)); | 199 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo
verageAttr)); |
| 206 | 200 |
| 207 int instanceCount = fGeoData.count(); | 201 int instanceCount = fGeoData.count(); |
| 208 | 202 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) { | 325 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) { |
| 332 AAFlatteningConvexPathBatch::Geometry geometry; | 326 AAFlatteningConvexPathBatch::Geometry geometry; |
| 333 geometry.fColor = GrRandomColor(random); | 327 geometry.fColor = GrRandomColor(random); |
| 334 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); | 328 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); |
| 335 geometry.fPath = GrTest::TestPathConvex(random); | 329 geometry.fPath = GrTest::TestPathConvex(random); |
| 336 | 330 |
| 337 return AAFlatteningConvexPathBatch::Create(geometry); | 331 return AAFlatteningConvexPathBatch::Create(geometry); |
| 338 } | 332 } |
| 339 | 333 |
| 340 #endif | 334 #endif |
| OLD | NEW |