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 "GrPLSPathRenderer.h" | 8 #include "GrPLSPathRenderer.h" |
9 | 9 |
10 #include "SkChunkAlloc.h" | 10 #include "SkChunkAlloc.h" |
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 bool fUsesLocalCoords; | 770 bool fUsesLocalCoords; |
771 | 771 |
772 typedef GrGeometryProcessor INHERITED; | 772 typedef GrGeometryProcessor INHERITED; |
773 }; | 773 }; |
774 | 774 |
775 /////////////////////////////////////////////////////////////////////////////// | 775 /////////////////////////////////////////////////////////////////////////////// |
776 | 776 |
777 bool GrPLSPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { | 777 bool GrPLSPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { |
778 // We have support for even-odd rendering, but are having some troublesome | 778 // We have support for even-odd rendering, but are having some troublesome |
779 // seams. Disable in the presence of even-odd for now. | 779 // seams. Disable in the presence of even-odd for now. |
| 780 SkPath path; |
| 781 args.fShape->asPath(&path); |
780 return args.fShaderCaps->shaderDerivativeSupport() && args.fAntiAlias && | 782 return args.fShaderCaps->shaderDerivativeSupport() && args.fAntiAlias && |
781 args.fStyle->isSimpleFill() && !args.fPath->isInverseFillType() && | 783 args.fShape->style().isSimpleFill() && !path.isInverseFillType() && |
782 args.fPath->getFillType() == SkPath::FillType::kWinding_FillType; | 784 path.getFillType() == SkPath::FillType::kWinding_FillType; |
783 } | 785 } |
784 | 786 |
785 class PLSPathBatch : public GrVertexBatch { | 787 class PLSPathBatch : public GrVertexBatch { |
786 public: | 788 public: |
787 DEFINE_BATCH_CLASS_ID | 789 DEFINE_BATCH_CLASS_ID |
788 struct Geometry { | 790 struct Geometry { |
789 GrColor fColor; | 791 GrColor fColor; |
790 SkMatrix fViewMatrix; | 792 SkMatrix fViewMatrix; |
791 SkPath fPath; | 793 SkPath fPath; |
792 }; | 794 }; |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
967 }; | 969 }; |
968 | 970 |
969 BatchTracker fBatch; | 971 BatchTracker fBatch; |
970 SkSTArray<1, Geometry, true> fGeoData; | 972 SkSTArray<1, Geometry, true> fGeoData; |
971 | 973 |
972 typedef GrVertexBatch INHERITED; | 974 typedef GrVertexBatch INHERITED; |
973 }; | 975 }; |
974 | 976 |
975 SkDEBUGCODE(bool inPLSDraw = false;) | 977 SkDEBUGCODE(bool inPLSDraw = false;) |
976 bool GrPLSPathRenderer::onDrawPath(const DrawPathArgs& args) { | 978 bool GrPLSPathRenderer::onDrawPath(const DrawPathArgs& args) { |
977 if (args.fPath->isEmpty()) { | 979 SkASSERT(!args.fShape->isEmpty()) |
978 return true; | |
979 } | |
980 SkASSERT(!inPLSDraw); | 980 SkASSERT(!inPLSDraw); |
981 SkDEBUGCODE(inPLSDraw = true;) | 981 SkDEBUGCODE(inPLSDraw = true;) |
982 PLSPathBatch::Geometry geometry; | 982 PLSPathBatch::Geometry geometry; |
983 geometry.fColor = args.fColor; | 983 geometry.fColor = args.fColor; |
984 geometry.fViewMatrix = *args.fViewMatrix; | 984 geometry.fViewMatrix = *args.fViewMatrix; |
985 geometry.fPath = *args.fPath; | 985 args.fShape->asPath(&geometry.fPath); |
986 | 986 |
987 SkAutoTUnref<GrDrawBatch> batch(PLSPathBatch::Create(geometry)); | 987 SkAutoTUnref<GrDrawBatch> batch(PLSPathBatch::Create(geometry)); |
988 | 988 |
989 GrPipelineBuilder pipelineBuilder(*args.fPaint, args.fDrawContext->mustUseHW
AA(*args.fPaint)); | 989 GrPipelineBuilder pipelineBuilder(*args.fPaint, args.fDrawContext->mustUseHW
AA(*args.fPaint)); |
990 pipelineBuilder.setUserStencil(args.fUserStencilSettings); | 990 pipelineBuilder.setUserStencil(args.fUserStencilSettings); |
991 | 991 |
992 args.fDrawContext->drawBatch(pipelineBuilder, *args.fClip, batch); | 992 args.fDrawContext->drawBatch(pipelineBuilder, *args.fClip, batch); |
993 | 993 |
994 SkDEBUGCODE(inPLSDraw = false;) | 994 SkDEBUGCODE(inPLSDraw = false;) |
995 return true; | 995 return true; |
996 | 996 |
997 } | 997 } |
998 | 998 |
999 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 999 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
1000 | 1000 |
1001 #ifdef GR_TEST_UTILS | 1001 #ifdef GR_TEST_UTILS |
1002 | 1002 |
1003 DRAW_BATCH_TEST_DEFINE(PLSPathBatch) { | 1003 DRAW_BATCH_TEST_DEFINE(PLSPathBatch) { |
1004 PLSPathBatch::Geometry geometry; | 1004 PLSPathBatch::Geometry geometry; |
1005 geometry.fColor = GrRandomColor(random); | 1005 geometry.fColor = GrRandomColor(random); |
1006 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); | 1006 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); |
1007 geometry.fPath = GrTest::TestPathConvex(random); | 1007 geometry.fPath = GrTest::TestPathConvex(random); |
1008 | 1008 |
1009 return PLSPathBatch::Create(geometry); | 1009 return PLSPathBatch::Create(geometry); |
1010 } | 1010 } |
1011 | 1011 |
1012 #endif | 1012 #endif |
OLD | NEW |