| 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 "GrBatchFlushState.h" | 10 #include "GrBatchFlushState.h" |
| (...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 | 644 |
| 645 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 645 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 646 // When this is called on a batch, there is only one geometry bundle | 646 // When this is called on a batch, there is only one geometry bundle |
| 647 out->setKnownFourComponents(fGeoData[0].fColor); | 647 out->setKnownFourComponents(fGeoData[0].fColor); |
| 648 } | 648 } |
| 649 | 649 |
| 650 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 650 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 651 out->setUnknownSingleComponent(); | 651 out->setUnknownSingleComponent(); |
| 652 } | 652 } |
| 653 | 653 |
| 654 private: |
| 654 void initBatchTracker(const GrPipelineOptimizations& opt) override { | 655 void initBatchTracker(const GrPipelineOptimizations& opt) override { |
| 655 // Handle any color overrides | 656 // Handle any color overrides |
| 656 if (!opt.readsColor()) { | 657 if (!opt.readsColor()) { |
| 657 fGeoData[0].fColor = GrColor_ILLEGAL; | 658 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 658 } | 659 } |
| 659 opt.getOverrideColorIfSet(&fGeoData[0].fColor); | 660 opt.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 660 | 661 |
| 661 // setup batch properties | 662 // setup batch properties |
| 662 fBatch.fColorIgnored = !opt.readsColor(); | 663 fBatch.fColorIgnored = !opt.readsColor(); |
| 663 fBatch.fColor = fGeoData[0].fColor; | 664 fBatch.fColor = fGeoData[0].fColor; |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 verts[3].fOuterRadius = outerRadius; | 721 verts[3].fOuterRadius = outerRadius; |
| 721 verts[3].fInnerRadius = innerRadius; | 722 verts[3].fInnerRadius = innerRadius; |
| 722 | 723 |
| 723 verts += kVerticesPerQuad; | 724 verts += kVerticesPerQuad; |
| 724 } | 725 } |
| 725 helper.recordDraw(target); | 726 helper.recordDraw(target); |
| 726 } | 727 } |
| 727 | 728 |
| 728 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 729 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 729 | 730 |
| 730 private: | |
| 731 CircleBatch(const Geometry& geometry) { | 731 CircleBatch(const Geometry& geometry) { |
| 732 this->initClassID<CircleBatch>(); | 732 this->initClassID<CircleBatch>(); |
| 733 fGeoData.push_back(geometry); | 733 fGeoData.push_back(geometry); |
| 734 | 734 |
| 735 this->setBounds(geometry.fDevBounds); | 735 this->setBounds(geometry.fDevBounds); |
| 736 } | 736 } |
| 737 | 737 |
| 738 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 738 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| 739 CircleBatch* that = t->cast<CircleBatch>(); | 739 CircleBatch* that = t->cast<CircleBatch>(); |
| 740 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), | 740 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 const char* name() const override { return "EllipseBatch"; } | 862 const char* name() const override { return "EllipseBatch"; } |
| 863 | 863 |
| 864 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 864 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 865 // When this is called on a batch, there is only one geometry bundle | 865 // When this is called on a batch, there is only one geometry bundle |
| 866 out->setKnownFourComponents(fGeoData[0].fColor); | 866 out->setKnownFourComponents(fGeoData[0].fColor); |
| 867 } | 867 } |
| 868 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 868 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 869 out->setUnknownSingleComponent(); | 869 out->setUnknownSingleComponent(); |
| 870 } | 870 } |
| 871 | 871 |
| 872 private: |
| 872 void initBatchTracker(const GrPipelineOptimizations& opt) override { | 873 void initBatchTracker(const GrPipelineOptimizations& opt) override { |
| 873 // Handle any color overrides | 874 // Handle any color overrides |
| 874 if (!opt.readsCoverage()) { | 875 if (!opt.readsCoverage()) { |
| 875 fGeoData[0].fColor = GrColor_ILLEGAL; | 876 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 876 } | 877 } |
| 877 opt.getOverrideColorIfSet(&fGeoData[0].fColor); | 878 opt.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 878 | 879 |
| 879 // setup batch properties | 880 // setup batch properties |
| 880 fBatch.fColorIgnored = !opt.readsColor(); | 881 fBatch.fColorIgnored = !opt.readsColor(); |
| 881 fBatch.fColor = fGeoData[0].fColor; | 882 fBatch.fColor = fGeoData[0].fColor; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 verts[3].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); | 944 verts[3].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); |
| 944 verts[3].fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadRecip)
; | 945 verts[3].fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadRecip)
; |
| 945 | 946 |
| 946 verts += kVerticesPerQuad; | 947 verts += kVerticesPerQuad; |
| 947 } | 948 } |
| 948 helper.recordDraw(target); | 949 helper.recordDraw(target); |
| 949 } | 950 } |
| 950 | 951 |
| 951 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 952 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 952 | 953 |
| 953 private: | |
| 954 EllipseBatch(const Geometry& geometry) { | 954 EllipseBatch(const Geometry& geometry) { |
| 955 this->initClassID<EllipseBatch>(); | 955 this->initClassID<EllipseBatch>(); |
| 956 fGeoData.push_back(geometry); | 956 fGeoData.push_back(geometry); |
| 957 | 957 |
| 958 this->setBounds(geometry.fDevBounds); | 958 this->setBounds(geometry.fDevBounds); |
| 959 } | 959 } |
| 960 | 960 |
| 961 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 961 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| 962 EllipseBatch* that = t->cast<EllipseBatch>(); | 962 EllipseBatch* that = t->cast<EllipseBatch>(); |
| 963 | 963 |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 const char* name() const override { return "DIEllipseBatch"; } | 1130 const char* name() const override { return "DIEllipseBatch"; } |
| 1131 | 1131 |
| 1132 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1132 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1133 // When this is called on a batch, there is only one geometry bundle | 1133 // When this is called on a batch, there is only one geometry bundle |
| 1134 out->setKnownFourComponents(fGeoData[0].fColor); | 1134 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1135 } | 1135 } |
| 1136 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1136 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1137 out->setUnknownSingleComponent(); | 1137 out->setUnknownSingleComponent(); |
| 1138 } | 1138 } |
| 1139 | 1139 |
| 1140 private: |
| 1141 |
| 1140 void initBatchTracker(const GrPipelineOptimizations& opt) override { | 1142 void initBatchTracker(const GrPipelineOptimizations& opt) override { |
| 1141 // Handle any color overrides | 1143 // Handle any color overrides |
| 1142 if (!opt.readsColor()) { | 1144 if (!opt.readsColor()) { |
| 1143 fGeoData[0].fColor = GrColor_ILLEGAL; | 1145 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1144 } | 1146 } |
| 1145 opt.getOverrideColorIfSet(&fGeoData[0].fColor); | 1147 opt.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1146 | 1148 |
| 1147 // setup batch properties | 1149 // setup batch properties |
| 1148 fBatch.fColorIgnored = !opt.readsColor(); | 1150 fBatch.fColorIgnored = !opt.readsColor(); |
| 1149 fBatch.fColor = fGeoData[0].fColor; | 1151 fBatch.fColor = fGeoData[0].fColor; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 verts[3].fOuterOffset = SkPoint::Make(1.0f + offsetDx, -1.0f - offse
tDy); | 1204 verts[3].fOuterOffset = SkPoint::Make(1.0f + offsetDx, -1.0f - offse
tDy); |
| 1203 verts[3].fInnerOffset = SkPoint::Make(innerRatioX + offsetDx, -inner
RatioY - offsetDy); | 1205 verts[3].fInnerOffset = SkPoint::Make(innerRatioX + offsetDx, -inner
RatioY - offsetDy); |
| 1204 | 1206 |
| 1205 verts += kVerticesPerQuad; | 1207 verts += kVerticesPerQuad; |
| 1206 } | 1208 } |
| 1207 helper.recordDraw(target); | 1209 helper.recordDraw(target); |
| 1208 } | 1210 } |
| 1209 | 1211 |
| 1210 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 1212 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 1211 | 1213 |
| 1212 private: | |
| 1213 DIEllipseBatch(const Geometry& geometry, const SkRect& bounds) { | 1214 DIEllipseBatch(const Geometry& geometry, const SkRect& bounds) { |
| 1214 this->initClassID<DIEllipseBatch>(); | 1215 this->initClassID<DIEllipseBatch>(); |
| 1215 fGeoData.push_back(geometry); | 1216 fGeoData.push_back(geometry); |
| 1216 | 1217 |
| 1217 this->setBounds(bounds); | 1218 this->setBounds(bounds); |
| 1218 } | 1219 } |
| 1219 | 1220 |
| 1220 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 1221 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| 1221 DIEllipseBatch* that = t->cast<DIEllipseBatch>(); | 1222 DIEllipseBatch* that = t->cast<DIEllipseBatch>(); |
| 1222 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), | 1223 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 const char* name() const override { return "RRectCircleBatch"; } | 1482 const char* name() const override { return "RRectCircleBatch"; } |
| 1482 | 1483 |
| 1483 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1484 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1484 // When this is called on a batch, there is only one geometry bundle | 1485 // When this is called on a batch, there is only one geometry bundle |
| 1485 out->setKnownFourComponents(fGeoData[0].fColor); | 1486 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1486 } | 1487 } |
| 1487 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1488 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1488 out->setUnknownSingleComponent(); | 1489 out->setUnknownSingleComponent(); |
| 1489 } | 1490 } |
| 1490 | 1491 |
| 1492 private: |
| 1491 void initBatchTracker(const GrPipelineOptimizations& opt) override { | 1493 void initBatchTracker(const GrPipelineOptimizations& opt) override { |
| 1492 // Handle any color overrides | 1494 // Handle any color overrides |
| 1493 if (!opt.readsColor()) { | 1495 if (!opt.readsColor()) { |
| 1494 fGeoData[0].fColor = GrColor_ILLEGAL; | 1496 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1495 } | 1497 } |
| 1496 opt.getOverrideColorIfSet(&fGeoData[0].fColor); | 1498 opt.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1497 | 1499 |
| 1498 // setup batch properties | 1500 // setup batch properties |
| 1499 fBatch.fColorIgnored = !opt.readsColor(); | 1501 fBatch.fColorIgnored = !opt.readsColor(); |
| 1500 fBatch.fColor = fGeoData[0].fColor; | 1502 fBatch.fColor = fGeoData[0].fColor; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1579 verts->fInnerRadius = innerRadius; | 1581 verts->fInnerRadius = innerRadius; |
| 1580 verts++; | 1582 verts++; |
| 1581 } | 1583 } |
| 1582 } | 1584 } |
| 1583 | 1585 |
| 1584 helper.recordDraw(target); | 1586 helper.recordDraw(target); |
| 1585 } | 1587 } |
| 1586 | 1588 |
| 1587 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 1589 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 1588 | 1590 |
| 1589 private: | |
| 1590 RRectCircleRendererBatch(const Geometry& geometry) { | 1591 RRectCircleRendererBatch(const Geometry& geometry) { |
| 1591 this->initClassID<RRectCircleRendererBatch>(); | 1592 this->initClassID<RRectCircleRendererBatch>(); |
| 1592 fGeoData.push_back(geometry); | 1593 fGeoData.push_back(geometry); |
| 1593 | 1594 |
| 1594 this->setBounds(geometry.fDevBounds); | 1595 this->setBounds(geometry.fDevBounds); |
| 1595 } | 1596 } |
| 1596 | 1597 |
| 1597 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 1598 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| 1598 RRectCircleRendererBatch* that = t->cast<RRectCircleRendererBatch>(); | 1599 RRectCircleRendererBatch* that = t->cast<RRectCircleRendererBatch>(); |
| 1599 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), | 1600 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi
peline(), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1657 const char* name() const override { return "RRectEllipseRendererBatch"; } | 1658 const char* name() const override { return "RRectEllipseRendererBatch"; } |
| 1658 | 1659 |
| 1659 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1660 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1660 // When this is called on a batch, there is only one geometry bundle | 1661 // When this is called on a batch, there is only one geometry bundle |
| 1661 out->setKnownFourComponents(fGeoData[0].fColor); | 1662 out->setKnownFourComponents(fGeoData[0].fColor); |
| 1662 } | 1663 } |
| 1663 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 1664 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { |
| 1664 out->setUnknownSingleComponent(); | 1665 out->setUnknownSingleComponent(); |
| 1665 } | 1666 } |
| 1666 | 1667 |
| 1668 private: |
| 1667 void initBatchTracker(const GrPipelineOptimizations& opt) override { | 1669 void initBatchTracker(const GrPipelineOptimizations& opt) override { |
| 1668 // Handle any color overrides | 1670 // Handle any color overrides |
| 1669 if (!opt.readsColor()) { | 1671 if (!opt.readsColor()) { |
| 1670 fGeoData[0].fColor = GrColor_ILLEGAL; | 1672 fGeoData[0].fColor = GrColor_ILLEGAL; |
| 1671 } | 1673 } |
| 1672 opt.getOverrideColorIfSet(&fGeoData[0].fColor); | 1674 opt.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 1673 | 1675 |
| 1674 // setup batch properties | 1676 // setup batch properties |
| 1675 fBatch.fColorIgnored = !opt.readsColor(); | 1677 fBatch.fColorIgnored = !opt.readsColor(); |
| 1676 fBatch.fColor = fGeoData[0].fColor; | 1678 fBatch.fColor = fGeoData[0].fColor; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1765 verts->fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); | 1767 verts->fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); |
| 1766 verts->fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadReci
p); | 1768 verts->fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadReci
p); |
| 1767 verts++; | 1769 verts++; |
| 1768 } | 1770 } |
| 1769 } | 1771 } |
| 1770 helper.recordDraw(target); | 1772 helper.recordDraw(target); |
| 1771 } | 1773 } |
| 1772 | 1774 |
| 1773 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } | 1775 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } |
| 1774 | 1776 |
| 1775 private: | |
| 1776 RRectEllipseRendererBatch(const Geometry& geometry) { | 1777 RRectEllipseRendererBatch(const Geometry& geometry) { |
| 1777 this->initClassID<RRectEllipseRendererBatch>(); | 1778 this->initClassID<RRectEllipseRendererBatch>(); |
| 1778 fGeoData.push_back(geometry); | 1779 fGeoData.push_back(geometry); |
| 1779 | 1780 |
| 1780 this->setBounds(geometry.fDevBounds); | 1781 this->setBounds(geometry.fDevBounds); |
| 1781 } | 1782 } |
| 1782 | 1783 |
| 1783 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { | 1784 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { |
| 1784 RRectEllipseRendererBatch* that = t->cast<RRectEllipseRendererBatch>(); | 1785 RRectEllipseRendererBatch* that = t->cast<RRectEllipseRendererBatch>(); |
| 1785 | 1786 |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2036 } | 2037 } |
| 2037 | 2038 |
| 2038 DRAW_BATCH_TEST_DEFINE(RRectBatch) { | 2039 DRAW_BATCH_TEST_DEFINE(RRectBatch) { |
| 2039 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); | 2040 SkMatrix viewMatrix = GrTest::TestMatrixRectStaysRect(random); |
| 2040 GrColor color = GrRandomColor(random); | 2041 GrColor color = GrRandomColor(random); |
| 2041 const SkRRect& rrect = GrTest::TestRRectSimple(random); | 2042 const SkRRect& rrect = GrTest::TestRRectSimple(random); |
| 2042 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); | 2043 return create_rrect_batch(color, viewMatrix, rrect, GrTest::TestStrokeRec(ra
ndom)); |
| 2043 } | 2044 } |
| 2044 | 2045 |
| 2045 #endif | 2046 #endif |
| OLD | NEW |