| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrOvalRenderer.h" | 8 #include "GrOvalRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
| (...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 654 // When this is called on a batch, there is only one geometry bundle | 654 // When this is called on a batch, there is only one geometry bundle |
| 655 out->setKnownFourComponents(fGeoData[0].fColor); | 655 out->setKnownFourComponents(fGeoData[0].fColor); |
| 656 } | 656 } |
| 657 | 657 |
| 658 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 658 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 659 out->setUnknownSingleComponent(); | 659 out->setUnknownSingleComponent(); |
| 660 } | 660 } |
| 661 | 661 |
| 662 void initBatchTracker(const GrPipelineInfo& init) override { | 662 void initBatchTracker(const GrPipelineInfo& init) override { |
| 663 // Handle any color overrides | 663 // Handle any color overrides |
| 664 if (init.fColorIgnored) { | 664 if (!init.readsColor()) { |
| 665 fGeoData[0].fColor = GrColor_ILLEGAL; | 665 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 666 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | |
| 667 fGeoData[0].fColor = init.fOverrideColor; | |
| 668 } | 666 } |
| 667 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 669 | 668 |
| 670 // setup batch properties | 669 // setup batch properties |
| 671 fBatch.fColorIgnored = init.fColorIgnored; | 670 fBatch.fColorIgnored = !init.readsColor(); |
| 672 fBatch.fColor = fGeoData[0].fColor; | 671 fBatch.fColor = fGeoData[0].fColor; |
| 673 fBatch.fStroke = fGeoData[0].fStroke; | 672 fBatch.fStroke = fGeoData[0].fStroke; |
| 674 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 673 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
| 675 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 674 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 676 } | 675 } |
| 677 | 676 |
| 678 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 677 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 679 SkMatrix invert; | 678 SkMatrix invert; |
| 680 if (!this->viewMatrix().invert(&invert)) { | 679 if (!this->viewMatrix().invert(&invert)) { |
| 681 return; | 680 return; |
| 682 } | 681 } |
| 683 | 682 |
| 684 // Setup geometry processor | 683 // Setup geometry processor |
| 685 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo
r(), | 684 SkAutoTUnref<GrGeometryProcessor> gp(CircleEdgeEffect::Create(this->colo
r(), |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 869 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 868 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 870 // When this is called on a batch, there is only one geometry bundle | 869 // When this is called on a batch, there is only one geometry bundle |
| 871 out->setKnownFourComponents(fGeoData[0].fColor); | 870 out->setKnownFourComponents(fGeoData[0].fColor); |
| 872 } | 871 } |
| 873 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 872 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 874 out->setUnknownSingleComponent(); | 873 out->setUnknownSingleComponent(); |
| 875 } | 874 } |
| 876 | 875 |
| 877 void initBatchTracker(const GrPipelineInfo& init) override { | 876 void initBatchTracker(const GrPipelineInfo& init) override { |
| 878 // Handle any color overrides | 877 // Handle any color overrides |
| 879 if (init.fColorIgnored) { | 878 if (!init.readsCoverage()) { |
| 880 fGeoData[0].fColor = GrColor_ILLEGAL; | 879 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 881 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | |
| 882 fGeoData[0].fColor = init.fOverrideColor; | |
| 883 } | 880 } |
| 881 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 884 | 882 |
| 885 // setup batch properties | 883 // setup batch properties |
| 886 fBatch.fColorIgnored = init.fColorIgnored; | 884 fBatch.fColorIgnored = !init.readsColor(); |
| 887 fBatch.fColor = fGeoData[0].fColor; | 885 fBatch.fColor = fGeoData[0].fColor; |
| 888 fBatch.fStroke = fGeoData[0].fStroke; | 886 fBatch.fStroke = fGeoData[0].fStroke; |
| 889 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 887 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
| 890 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 888 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 891 } | 889 } |
| 892 | 890 |
| 893 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 891 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 894 SkMatrix invert; | 892 SkMatrix invert; |
| 895 if (!this->viewMatrix().invert(&invert)) { | 893 if (!this->viewMatrix().invert(&invert)) { |
| 896 return; | 894 return; |
| 897 } | 895 } |
| 898 | 896 |
| 899 // Setup geometry processor | 897 // Setup geometry processor |
| 900 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col
or(), | 898 SkAutoTUnref<GrGeometryProcessor> gp(EllipseEdgeEffect::Create(this->col
or(), |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1133 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1131 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1134 // When this is called on a batch, there is only one geometry bundle | 1132 // When this is called on a batch, there is only one geometry bundle |
| 1135 out->setKnownFourComponents(fGeoData[0].fColor); | 1133 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1136 } | 1134 } |
| 1137 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1135 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1138 out->setUnknownSingleComponent(); | 1136 out->setUnknownSingleComponent(); |
| 1139 } | 1137 } |
| 1140 | 1138 |
| 1141 void initBatchTracker(const GrPipelineInfo& init) override { | 1139 void initBatchTracker(const GrPipelineInfo& init) override { |
| 1142 // Handle any color overrides | 1140 // Handle any color overrides |
| 1143 if (init.fColorIgnored) { | 1141 if (!init.readsColor()) { |
| 1144 fGeoData[0].fColor = GrColor_ILLEGAL; | 1142 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1145 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | |
| 1146 fGeoData[0].fColor = init.fOverrideColor; | |
| 1147 } | 1143 } |
| 1144 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1148 | 1145 |
| 1149 // setup batch properties | 1146 // setup batch properties |
| 1150 fBatch.fColorIgnored = init.fColorIgnored; | 1147 fBatch.fColorIgnored = !init.readsColor(); |
| 1151 fBatch.fColor = fGeoData[0].fColor; | 1148 fBatch.fColor = fGeoData[0].fColor; |
| 1152 fBatch.fMode = fGeoData[0].fMode; | 1149 fBatch.fMode = fGeoData[0].fMode; |
| 1153 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 1150 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
| 1154 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 1151 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 1155 } | 1152 } |
| 1156 | 1153 |
| 1157 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 1154 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 1158 // Setup geometry processor | 1155 // Setup geometry processor |
| 1159 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c
olor(), | 1156 SkAutoTUnref<GrGeometryProcessor> gp(DIEllipseEdgeEffect::Create(this->c
olor(), |
| 1160 this->v
iewMatrix(), | 1157 this->v
iewMatrix(), |
| 1161 this->m
ode(), | 1158 this->m
ode(), |
| 1162 this->u
sesLocalCoords())); | 1159 this->u
sesLocalCoords())); |
| 1163 | 1160 |
| 1164 batchTarget->initDraw(gp, pipeline); | 1161 batchTarget->initDraw(gp, pipeline); |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1482 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1479 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1483 // When this is called on a batch, there is only one geometry bundle | 1480 // When this is called on a batch, there is only one geometry bundle |
| 1484 out->setKnownFourComponents(fGeoData[0].fColor); | 1481 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1485 } | 1482 } |
| 1486 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1483 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1487 out->setUnknownSingleComponent(); | 1484 out->setUnknownSingleComponent(); |
| 1488 } | 1485 } |
| 1489 | 1486 |
| 1490 void initBatchTracker(const GrPipelineInfo& init) override { | 1487 void initBatchTracker(const GrPipelineInfo& init) override { |
| 1491 // Handle any color overrides | 1488 // Handle any color overrides |
| 1492 if (init.fColorIgnored) { | 1489 if (!init.readsColor()) { |
| 1493 fGeoData[0].fColor = GrColor_ILLEGAL; | 1490 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1494 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | |
| 1495 fGeoData[0].fColor = init.fOverrideColor; | |
| 1496 } | 1491 } |
| 1492 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1497 | 1493 |
| 1498 // setup batch properties | 1494 // setup batch properties |
| 1499 fBatch.fColorIgnored = init.fColorIgnored; | 1495 fBatch.fColorIgnored = !init.readsColor(); |
| 1500 fBatch.fColor = fGeoData[0].fColor; | 1496 fBatch.fColor = fGeoData[0].fColor; |
| 1501 fBatch.fStroke = fGeoData[0].fStroke; | 1497 fBatch.fStroke = fGeoData[0].fStroke; |
| 1502 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 1498 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
| 1503 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 1499 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 1504 } | 1500 } |
| 1505 | 1501 |
| 1506 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 1502 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 1507 // reset to device coordinates | 1503 // reset to device coordinates |
| 1508 SkMatrix invert; | 1504 SkMatrix invert; |
| 1509 if (!this->viewMatrix().invert(&invert)) { | 1505 if (!this->viewMatrix().invert(&invert)) { |
| 1510 SkDebugf("Failed to invert\n"); | 1506 SkDebugf("Failed to invert\n"); |
| 1511 return; | 1507 return; |
| 1512 } | 1508 } |
| 1513 | 1509 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1651 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1656 // When this is called on a batch, there is only one geometry bundle | 1652 // When this is called on a batch, there is only one geometry bundle |
| 1657 out->setKnownFourComponents(fGeoData[0].fColor); | 1653 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1658 } | 1654 } |
| 1659 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1655 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1660 out->setUnknownSingleComponent(); | 1656 out->setUnknownSingleComponent(); |
| 1661 } | 1657 } |
| 1662 | 1658 |
| 1663 void initBatchTracker(const GrPipelineInfo& init) override { | 1659 void initBatchTracker(const GrPipelineInfo& init) override { |
| 1664 // Handle any color overrides | 1660 // Handle any color overrides |
| 1665 if (init.fColorIgnored) { | 1661 if (!init.readsColor()) { |
| 1666 fGeoData[0].fColor = GrColor_ILLEGAL; | 1662 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1667 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | |
| 1668 fGeoData[0].fColor = init.fOverrideColor; | |
| 1669 } | 1663 } |
| 1664 init.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1670 | 1665 |
| 1671 // setup batch properties | 1666 // setup batch properties |
| 1672 fBatch.fColorIgnored = init.fColorIgnored; | 1667 fBatch.fColorIgnored = !init.readsColor(); |
| 1673 fBatch.fColor = fGeoData[0].fColor; | 1668 fBatch.fColor = fGeoData[0].fColor; |
| 1674 fBatch.fStroke = fGeoData[0].fStroke; | 1669 fBatch.fStroke = fGeoData[0].fStroke; |
| 1675 fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 1670 fBatch.fUsesLocalCoords = init.readsLocalCoords(); |
| 1676 fBatch.fCoverageIgnored = init.fCoverageIgnored; | 1671 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 1677 } | 1672 } |
| 1678 | 1673 |
| 1679 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 1674 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { |
| 1680 // reset to device coordinates | 1675 // reset to device coordinates |
| 1681 SkMatrix invert; | 1676 SkMatrix invert; |
| 1682 if (!this->viewMatrix().invert(&invert)) { | 1677 if (!this->viewMatrix().invert(&invert)) { |
| 1683 SkDebugf("Failed to invert\n"); | 1678 SkDebugf("Failed to invert\n"); |
| 1684 return; | 1679 return; |
| 1685 } | 1680 } |
| 1686 | 1681 |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2028 } | 2023 } |
| 2029 | 2024 |
| 2030 BATCH_TEST_DEFINE(RRectBatch) { | 2025 BATCH_TEST_DEFINE(RRectBatch) { |
| 2031 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); | 2026 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); |
| 2032 GrColor color = GrRandomColor(random); | 2027 GrColor color = GrRandomColor(random); |
| 2033 const SkRRect& rrect = GrTest::TestRRectSimple(random); | 2028 const SkRRect& rrect = GrTest::TestRRectSimple(random); |
| 2034 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); | 2029 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); |
| 2035 } | 2030 } |
| 2036 | 2031 |
| 2037 #endif | 2032 #endif |
| OLD | NEW |