| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright 2015 Google Inc. |    2  * Copyright 2015 Google Inc. | 
|    3  * |    3  * | 
|    4  * Use of this source code is governed by a BSD-style license that can be |    4  * Use of this source code is governed by a BSD-style license that can be | 
|    5  * found in the LICENSE file. |    5  * found in the LICENSE file. | 
|    6  */ |    6  */ | 
|    7  |    7  | 
|    8 #include "GrAAFillRectBatch.h" |    8 #include "GrAAFillRectBatch.h" | 
|    9  |    9  | 
|   10 #include "GrBatch.h" |   10 #include "GrBatch.h" | 
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   55  * |   55  * | 
|   56  *     GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() |   56  *     GrDefaultGeoProcFactory::LocalCoords::Type LocalCoordsType() | 
|   57  * |   57  * | 
|   58  *     bool StrideCheck(size_t vertexStride, bool canTweakAlphaForCoverage, |   58  *     bool StrideCheck(size_t vertexStride, bool canTweakAlphaForCoverage, | 
|   59  *                      bool usesLocalCoords) |   59  *                      bool usesLocalCoords) | 
|   60  * |   60  * | 
|   61  *     void FillInAttributes(intptr_t startVertex, size_t vertexStride, |   61  *     void FillInAttributes(intptr_t startVertex, size_t vertexStride, | 
|   62  *                           SkPoint* fan0Position, const Geometry&) |   62  *                           SkPoint* fan0Position, const Geometry&) | 
|   63  */ |   63  */ | 
|   64 template <typename Base> |   64 template <typename Base> | 
|   65 class AAFillRectBatch : public GrBatch { |   65 class AAFillRectBatch : public GrVertexBatch { | 
|   66 public: |   66 public: | 
|   67     typedef typename Base::Geometry Geometry; |   67     typedef typename Base::Geometry Geometry; | 
|   68  |   68  | 
|   69     static AAFillRectBatch* Create() { |   69     static AAFillRectBatch* Create() { | 
|   70         return SkNEW(AAFillRectBatch); |   70         return SkNEW(AAFillRectBatch); | 
|   71     } |   71     } | 
|   72  |   72  | 
|   73     const char* name() const override { return "AAFillRectBatch"; } |   73     const char* name() const override { return "AAFillRectBatch"; } | 
|   74  |   74  | 
|   75     void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |   75     void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  158     } |  158     } | 
|  159  |  159  | 
|  160     GrColor color() const { return fBatch.fColor; } |  160     GrColor color() const { return fBatch.fColor; } | 
|  161     bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } |  161     bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } | 
|  162     bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCover
     age; } |  162     bool canTweakAlphaForCoverage() const { return fBatch.fCanTweakAlphaForCover
     age; } | 
|  163     bool colorIgnored() const { return fBatch.fColorIgnored; } |  163     bool colorIgnored() const { return fBatch.fColorIgnored; } | 
|  164     const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } |  164     const SkMatrix& viewMatrix() const { return fGeoData[0].fViewMatrix; } | 
|  165     bool coverageIgnored() const { return fBatch.fCoverageIgnored; } |  165     bool coverageIgnored() const { return fBatch.fCoverageIgnored; } | 
|  166  |  166  | 
|  167     bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |  167     bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 
|  168         if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *t->pipel
     ine(), t->bounds(), |  168         AAFillRectBatch* that = t->cast<AAFillRectBatch>(); | 
|  169                                 caps)) { |  169         if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
     peline(), | 
 |  170                                     that->bounds(), caps)) { | 
|  170             return false; |  171             return false; | 
|  171         } |  172         } | 
|  172  |  173  | 
|  173         AAFillRectBatch* that = t->cast<AAFillRectBatch>(); |  | 
|  174         if (!Base::CanCombineLocalCoords(this->viewMatrix(), that->viewMatrix(), |  174         if (!Base::CanCombineLocalCoords(this->viewMatrix(), that->viewMatrix(), | 
|  175                                          this->usesLocalCoords())) { |  175                                          this->usesLocalCoords())) { | 
|  176             return false; |  176             return false; | 
|  177         } |  177         } | 
|  178  |  178  | 
|  179         if (this->color() != that->color()) { |  179         if (this->color() != that->color()) { | 
|  180             fBatch.fColor = GrColor_ILLEGAL; |  180             fBatch.fColor = GrColor_ILLEGAL; | 
|  181         } |  181         } | 
|  182  |  182  | 
|  183         // In the event of two batches, one who can tweak, one who cannot, we ju
     st fall back to |  183         // In the event of two batches, one who can tweak, one who cannot, we ju
     st fall back to | 
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  392         SkPoint* fan0Loc = reinterpret_cast<SkPoint*>(vertices + vertexStride - 
     sizeof(SkPoint)); |  392         SkPoint* fan0Loc = reinterpret_cast<SkPoint*>(vertices + vertexStride - 
     sizeof(SkPoint)); | 
|  393         localCoordMatrix.mapPointsWithStride(fan0Loc, fan0Pos, vertexStride, 8); |  393         localCoordMatrix.mapPointsWithStride(fan0Loc, fan0Pos, vertexStride, 8); | 
|  394     } |  394     } | 
|  395 }; |  395 }; | 
|  396  |  396  | 
|  397 typedef AAFillRectBatch<AAFillRectBatchNoLocalMatrixImp> AAFillRectBatchNoLocalM
     atrix; |  397 typedef AAFillRectBatch<AAFillRectBatchNoLocalMatrixImp> AAFillRectBatchNoLocalM
     atrix; | 
|  398 typedef AAFillRectBatch<AAFillRectBatchLocalMatrixImp> AAFillRectBatchLocalMatri
     x; |  398 typedef AAFillRectBatch<AAFillRectBatchLocalMatrixImp> AAFillRectBatchLocalMatri
     x; | 
|  399  |  399  | 
|  400 namespace GrAAFillRectBatch { |  400 namespace GrAAFillRectBatch { | 
|  401  |  401  | 
|  402 GrBatch* Create(GrColor color, |  402 GrDrawBatch* Create(GrColor color, | 
|  403                 const SkMatrix& viewMatrix, |  403                     const SkMatrix& viewMatrix, | 
|  404                 const SkRect& rect, |  404                     const SkRect& rect, | 
|  405                 const SkRect& devRect) { |  405                     const SkRect& devRect) { | 
|  406     AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
     ; |  406     AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
     ; | 
|  407     AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); |  407     AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); | 
|  408     geo.fColor = color; |  408     geo.fColor = color; | 
|  409     geo.fViewMatrix = viewMatrix; |  409     geo.fViewMatrix = viewMatrix; | 
|  410     geo.fDevRect = devRect; |  410     geo.fDevRect = devRect; | 
|  411     batch->init(); |  411     batch->init(); | 
|  412     return batch; |  412     return batch; | 
|  413 } |  413 } | 
|  414  |  414  | 
|  415 GrBatch* Create(GrColor color, |  415 GrDrawBatch* Create(GrColor color, | 
|  416                 const SkMatrix& viewMatrix, |  416                     const SkMatrix& viewMatrix, | 
|  417                 const SkMatrix& localMatrix, |  417                     const SkMatrix& localMatrix, | 
|  418                 const SkRect& rect, |  418                     const SkRect& rect, | 
|  419                 const SkRect& devRect) { |  419                     const SkRect& devRect) { | 
|  420     AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); |  420     AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); | 
|  421     AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |  421     AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 
|  422     geo.fColor = color; |  422     geo.fColor = color; | 
|  423     geo.fViewMatrix = viewMatrix; |  423     geo.fViewMatrix = viewMatrix; | 
|  424     geo.fLocalMatrix = localMatrix; |  424     geo.fLocalMatrix = localMatrix; | 
|  425     geo.fDevRect = devRect; |  425     geo.fDevRect = devRect; | 
|  426     batch->init(); |  426     batch->init(); | 
|  427     return batch; |  427     return batch; | 
|  428 } |  428 } | 
|  429  |  429  | 
|  430 }; |  430 }; | 
|  431  |  431  | 
|  432 ////////////////////////////////////////////////////////////////////////////////
     /////////////////// |  432 ////////////////////////////////////////////////////////////////////////////////
     /////////////////// | 
|  433  |  433  | 
|  434 #ifdef GR_TEST_UTILS |  434 #ifdef GR_TEST_UTILS | 
|  435  |  435  | 
|  436 #include "GrBatchTest.h" |  436 #include "GrBatchTest.h" | 
|  437  |  437  | 
|  438 BATCH_TEST_DEFINE(AAFillRectBatch) { |  438 DRAW_BATCH_TEST_DEFINE(AAFillRectBatch) { | 
|  439     AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
     ; |  439     AAFillRectBatchNoLocalMatrix* batch = AAFillRectBatchNoLocalMatrix::Create()
     ; | 
|  440     AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); |  440     AAFillRectBatchNoLocalMatrix::Geometry& geo = *batch->geometry(); | 
|  441     geo.fColor = GrRandomColor(random); |  441     geo.fColor = GrRandomColor(random); | 
|  442     geo.fViewMatrix = GrTest::TestMatrix(random); |  442     geo.fViewMatrix = GrTest::TestMatrix(random); | 
|  443     geo.fDevRect = GrTest::TestRect(random); |  443     geo.fDevRect = GrTest::TestRect(random); | 
|  444     batch->init(); |  444     batch->init(); | 
|  445     return batch; |  445     return batch; | 
|  446 } |  446 } | 
|  447  |  447  | 
|  448 BATCH_TEST_DEFINE(AAFillRectBatchLocalMatrix) { |  448 DRAW_BATCH_TEST_DEFINE(AAFillRectBatchLocalMatrix) { | 
|  449     AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); |  449     AAFillRectBatchLocalMatrix* batch = AAFillRectBatchLocalMatrix::Create(); | 
|  450     AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); |  450     AAFillRectBatchLocalMatrix::Geometry& geo = *batch->geometry(); | 
|  451     geo.fColor = GrRandomColor(random); |  451     geo.fColor = GrRandomColor(random); | 
|  452     geo.fViewMatrix = GrTest::TestMatrix(random); |  452     geo.fViewMatrix = GrTest::TestMatrix(random); | 
|  453     geo.fLocalMatrix = GrTest::TestMatrix(random); |  453     geo.fLocalMatrix = GrTest::TestMatrix(random); | 
|  454     geo.fDevRect = GrTest::TestRect(random); |  454     geo.fDevRect = GrTest::TestRect(random); | 
|  455     batch->init(); |  455     batch->init(); | 
|  456     return batch; |  456     return batch; | 
|  457 } |  457 } | 
|  458  |  458  | 
|  459 #endif |  459 #endif | 
| OLD | NEW |