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 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 | 704 |
705 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 705 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { |
706 // When this is called on a batch, there is only one geometry bundle | 706 // When this is called on a batch, there is only one geometry bundle |
707 out->setKnownFourComponents(fGeoData[0].fColor); | 707 out->setKnownFourComponents(fGeoData[0].fColor); |
708 } | 708 } |
709 | 709 |
710 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 710 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { |
711 out->setUnknownSingleComponent(); | 711 out->setUnknownSingleComponent(); |
712 } | 712 } |
713 | 713 |
714 void initBatchOpt(const GrBatchOpt& batchOpt) { | |
715 fBatchOpt = batchOpt; | |
716 } | |
717 | |
718 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 714 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { |
719 // Handle any color overrides | 715 // Handle any color overrides |
720 if (init.fColorIgnored) { | 716 if (init.fColorIgnored) { |
721 fGeoData[0].fColor = GrColor_ILLEGAL; | 717 fGeoData[0].fColor = GrColor_ILLEGAL; |
722 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 718 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
723 fGeoData[0].fColor = init.fOverrideColor; | 719 fGeoData[0].fColor = init.fOverrideColor; |
724 } | 720 } |
725 | 721 |
726 // setup batch properties | 722 // setup batch properties |
727 fBatch.fColorIgnored = init.fColorIgnored; | 723 fBatch.fColorIgnored = init.fColorIgnored; |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
866 GrColor fColor; | 862 GrColor fColor; |
867 bool fStroke; | 863 bool fStroke; |
868 bool fUsesLocalCoords; | 864 bool fUsesLocalCoords; |
869 bool fColorIgnored; | 865 bool fColorIgnored; |
870 bool fCoverageIgnored; | 866 bool fCoverageIgnored; |
871 }; | 867 }; |
872 | 868 |
873 static const int kVertsPerCircle = 4; | 869 static const int kVertsPerCircle = 4; |
874 static const int kIndicesPerCircle = 6; | 870 static const int kIndicesPerCircle = 6; |
875 | 871 |
876 GrBatchOpt fBatchOpt; | |
877 BatchTracker fBatch; | 872 BatchTracker fBatch; |
878 SkSTArray<1, Geometry, true> fGeoData; | 873 SkSTArray<1, Geometry, true> fGeoData; |
879 }; | 874 }; |
880 | 875 |
881 void GrOvalRenderer::drawCircle(GrDrawTarget* target, | 876 void GrOvalRenderer::drawCircle(GrDrawTarget* target, |
882 GrPipelineBuilder* pipelineBuilder, | 877 GrPipelineBuilder* pipelineBuilder, |
883 GrColor color, | 878 GrColor color, |
884 const SkMatrix& viewMatrix, | 879 const SkMatrix& viewMatrix, |
885 bool useCoverageAA, | 880 bool useCoverageAA, |
886 const SkRect& circle, | 881 const SkRect& circle, |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 const char* name() const SK_OVERRIDE { return "EllipseBatch"; } | 954 const char* name() const SK_OVERRIDE { return "EllipseBatch"; } |
960 | 955 |
961 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 956 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { |
962 // When this is called on a batch, there is only one geometry bundle | 957 // When this is called on a batch, there is only one geometry bundle |
963 out->setKnownFourComponents(fGeoData[0].fColor); | 958 out->setKnownFourComponents(fGeoData[0].fColor); |
964 } | 959 } |
965 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 960 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { |
966 out->setUnknownSingleComponent(); | 961 out->setUnknownSingleComponent(); |
967 } | 962 } |
968 | 963 |
969 void initBatchOpt(const GrBatchOpt& batchOpt) { | |
970 fBatchOpt = batchOpt; | |
971 } | |
972 | |
973 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 964 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { |
974 // Handle any color overrides | 965 // Handle any color overrides |
975 if (init.fColorIgnored) { | 966 if (init.fColorIgnored) { |
976 fGeoData[0].fColor = GrColor_ILLEGAL; | 967 fGeoData[0].fColor = GrColor_ILLEGAL; |
977 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 968 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
978 fGeoData[0].fColor = init.fOverrideColor; | 969 fGeoData[0].fColor = init.fOverrideColor; |
979 } | 970 } |
980 | 971 |
981 // setup batch properties | 972 // setup batch properties |
982 fBatch.fColorIgnored = init.fColorIgnored; | 973 fBatch.fColorIgnored = init.fColorIgnored; |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 GrColor fColor; | 1117 GrColor fColor; |
1127 bool fStroke; | 1118 bool fStroke; |
1128 bool fUsesLocalCoords; | 1119 bool fUsesLocalCoords; |
1129 bool fColorIgnored; | 1120 bool fColorIgnored; |
1130 bool fCoverageIgnored; | 1121 bool fCoverageIgnored; |
1131 }; | 1122 }; |
1132 | 1123 |
1133 static const int kVertsPerEllipse = 4; | 1124 static const int kVertsPerEllipse = 4; |
1134 static const int kIndicesPerEllipse = 6; | 1125 static const int kIndicesPerEllipse = 6; |
1135 | 1126 |
1136 GrBatchOpt fBatchOpt; | |
1137 BatchTracker fBatch; | 1127 BatchTracker fBatch; |
1138 SkSTArray<1, Geometry, true> fGeoData; | 1128 SkSTArray<1, Geometry, true> fGeoData; |
1139 }; | 1129 }; |
1140 | 1130 |
1141 bool GrOvalRenderer::drawEllipse(GrDrawTarget* target, | 1131 bool GrOvalRenderer::drawEllipse(GrDrawTarget* target, |
1142 GrPipelineBuilder* pipelineBuilder, | 1132 GrPipelineBuilder* pipelineBuilder, |
1143 GrColor color, | 1133 GrColor color, |
1144 const SkMatrix& viewMatrix, | 1134 const SkMatrix& viewMatrix, |
1145 bool useCoverageAA, | 1135 bool useCoverageAA, |
1146 const SkRect& ellipse, | 1136 const SkRect& ellipse, |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1260 const char* name() const SK_OVERRIDE { return "DIEllipseBatch"; } | 1250 const char* name() const SK_OVERRIDE { return "DIEllipseBatch"; } |
1261 | 1251 |
1262 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 1252 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { |
1263 // When this is called on a batch, there is only one geometry bundle | 1253 // When this is called on a batch, there is only one geometry bundle |
1264 out->setKnownFourComponents(fGeoData[0].fColor); | 1254 out->setKnownFourComponents(fGeoData[0].fColor); |
1265 } | 1255 } |
1266 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 1256 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { |
1267 out->setUnknownSingleComponent(); | 1257 out->setUnknownSingleComponent(); |
1268 } | 1258 } |
1269 | 1259 |
1270 void initBatchOpt(const GrBatchOpt& batchOpt) { | |
1271 fBatchOpt = batchOpt; | |
1272 } | |
1273 | |
1274 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 1260 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { |
1275 // Handle any color overrides | 1261 // Handle any color overrides |
1276 if (init.fColorIgnored) { | 1262 if (init.fColorIgnored) { |
1277 fGeoData[0].fColor = GrColor_ILLEGAL; | 1263 fGeoData[0].fColor = GrColor_ILLEGAL; |
1278 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 1264 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
1279 fGeoData[0].fColor = init.fOverrideColor; | 1265 fGeoData[0].fColor = init.fOverrideColor; |
1280 } | 1266 } |
1281 | 1267 |
1282 // setup batch properties | 1268 // setup batch properties |
1283 fBatch.fColorIgnored = init.fColorIgnored; | 1269 fBatch.fColorIgnored = init.fColorIgnored; |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1418 GrColor fColor; | 1404 GrColor fColor; |
1419 DIEllipseEdgeEffect::Mode fMode; | 1405 DIEllipseEdgeEffect::Mode fMode; |
1420 bool fUsesLocalCoords; | 1406 bool fUsesLocalCoords; |
1421 bool fColorIgnored; | 1407 bool fColorIgnored; |
1422 bool fCoverageIgnored; | 1408 bool fCoverageIgnored; |
1423 }; | 1409 }; |
1424 | 1410 |
1425 static const int kVertsPerEllipse = 4; | 1411 static const int kVertsPerEllipse = 4; |
1426 static const int kIndicesPerEllipse = 6; | 1412 static const int kIndicesPerEllipse = 6; |
1427 | 1413 |
1428 GrBatchOpt fBatchOpt; | |
1429 BatchTracker fBatch; | 1414 BatchTracker fBatch; |
1430 SkSTArray<1, Geometry, true> fGeoData; | 1415 SkSTArray<1, Geometry, true> fGeoData; |
1431 }; | 1416 }; |
1432 | 1417 |
1433 bool GrOvalRenderer::drawDIEllipse(GrDrawTarget* target, | 1418 bool GrOvalRenderer::drawDIEllipse(GrDrawTarget* target, |
1434 GrPipelineBuilder* pipelineBuilder, | 1419 GrPipelineBuilder* pipelineBuilder, |
1435 GrColor color, | 1420 GrColor color, |
1436 const SkMatrix& viewMatrix, | 1421 const SkMatrix& viewMatrix, |
1437 bool useCoverageAA, | 1422 bool useCoverageAA, |
1438 const SkRect& ellipse, | 1423 const SkRect& ellipse, |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1648 const char* name() const SK_OVERRIDE { return "RRectCircleBatch"; } | 1633 const char* name() const SK_OVERRIDE { return "RRectCircleBatch"; } |
1649 | 1634 |
1650 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 1635 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { |
1651 // When this is called on a batch, there is only one geometry bundle | 1636 // When this is called on a batch, there is only one geometry bundle |
1652 out->setKnownFourComponents(fGeoData[0].fColor); | 1637 out->setKnownFourComponents(fGeoData[0].fColor); |
1653 } | 1638 } |
1654 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 1639 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { |
1655 out->setUnknownSingleComponent(); | 1640 out->setUnknownSingleComponent(); |
1656 } | 1641 } |
1657 | 1642 |
1658 void initBatchOpt(const GrBatchOpt& batchOpt) { | |
1659 fBatchOpt = batchOpt; | |
1660 } | |
1661 | |
1662 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 1643 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { |
1663 // Handle any color overrides | 1644 // Handle any color overrides |
1664 if (init.fColorIgnored) { | 1645 if (init.fColorIgnored) { |
1665 fGeoData[0].fColor = GrColor_ILLEGAL; | 1646 fGeoData[0].fColor = GrColor_ILLEGAL; |
1666 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 1647 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
1667 fGeoData[0].fColor = init.fOverrideColor; | 1648 fGeoData[0].fColor = init.fOverrideColor; |
1668 } | 1649 } |
1669 | 1650 |
1670 // setup batch properties | 1651 // setup batch properties |
1671 fBatch.fColorIgnored = init.fColorIgnored; | 1652 fBatch.fColorIgnored = init.fColorIgnored; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1824 bool stroke() const { return fBatch.fStroke; } | 1805 bool stroke() const { return fBatch.fStroke; } |
1825 | 1806 |
1826 struct BatchTracker { | 1807 struct BatchTracker { |
1827 GrColor fColor; | 1808 GrColor fColor; |
1828 bool fStroke; | 1809 bool fStroke; |
1829 bool fUsesLocalCoords; | 1810 bool fUsesLocalCoords; |
1830 bool fColorIgnored; | 1811 bool fColorIgnored; |
1831 bool fCoverageIgnored; | 1812 bool fCoverageIgnored; |
1832 }; | 1813 }; |
1833 | 1814 |
1834 GrBatchOpt fBatchOpt; | |
1835 BatchTracker fBatch; | 1815 BatchTracker fBatch; |
1836 SkSTArray<1, Geometry, true> fGeoData; | 1816 SkSTArray<1, Geometry, true> fGeoData; |
1837 const GrIndexBuffer* fIndexBuffer; | 1817 const GrIndexBuffer* fIndexBuffer; |
1838 }; | 1818 }; |
1839 | 1819 |
1840 class RRectEllipseRendererBatch : public GrBatch { | 1820 class RRectEllipseRendererBatch : public GrBatch { |
1841 public: | 1821 public: |
1842 struct Geometry { | 1822 struct Geometry { |
1843 GrColor fColor; | 1823 GrColor fColor; |
1844 SkMatrix fViewMatrix; | 1824 SkMatrix fViewMatrix; |
(...skipping 12 matching lines...) Expand all Loading... |
1857 const char* name() const SK_OVERRIDE { return "RRectEllipseRendererBatch"; } | 1837 const char* name() const SK_OVERRIDE { return "RRectEllipseRendererBatch"; } |
1858 | 1838 |
1859 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 1839 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { |
1860 // When this is called on a batch, there is only one geometry bundle | 1840 // When this is called on a batch, there is only one geometry bundle |
1861 out->setKnownFourComponents(fGeoData[0].fColor); | 1841 out->setKnownFourComponents(fGeoData[0].fColor); |
1862 } | 1842 } |
1863 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { | 1843 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E { |
1864 out->setUnknownSingleComponent(); | 1844 out->setUnknownSingleComponent(); |
1865 } | 1845 } |
1866 | 1846 |
1867 void initBatchOpt(const GrBatchOpt& batchOpt) { | |
1868 fBatchOpt = batchOpt; | |
1869 } | |
1870 | |
1871 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 1847 void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { |
1872 // Handle any color overrides | 1848 // Handle any color overrides |
1873 if (init.fColorIgnored) { | 1849 if (init.fColorIgnored) { |
1874 fGeoData[0].fColor = GrColor_ILLEGAL; | 1850 fGeoData[0].fColor = GrColor_ILLEGAL; |
1875 } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 1851 } else if (GrColor_ILLEGAL != init.fOverrideColor) { |
1876 fGeoData[0].fColor = init.fOverrideColor; | 1852 fGeoData[0].fColor = init.fOverrideColor; |
1877 } | 1853 } |
1878 | 1854 |
1879 // setup batch properties | 1855 // setup batch properties |
1880 fBatch.fColorIgnored = init.fColorIgnored; | 1856 fBatch.fColorIgnored = init.fColorIgnored; |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2043 bool stroke() const { return fBatch.fStroke; } | 2019 bool stroke() const { return fBatch.fStroke; } |
2044 | 2020 |
2045 struct BatchTracker { | 2021 struct BatchTracker { |
2046 GrColor fColor; | 2022 GrColor fColor; |
2047 bool fStroke; | 2023 bool fStroke; |
2048 bool fUsesLocalCoords; | 2024 bool fUsesLocalCoords; |
2049 bool fColorIgnored; | 2025 bool fColorIgnored; |
2050 bool fCoverageIgnored; | 2026 bool fCoverageIgnored; |
2051 }; | 2027 }; |
2052 | 2028 |
2053 GrBatchOpt fBatchOpt; | |
2054 BatchTracker fBatch; | 2029 BatchTracker fBatch; |
2055 SkSTArray<1, Geometry, true> fGeoData; | 2030 SkSTArray<1, Geometry, true> fGeoData; |
2056 const GrIndexBuffer* fIndexBuffer; | 2031 const GrIndexBuffer* fIndexBuffer; |
2057 }; | 2032 }; |
2058 | 2033 |
2059 bool GrOvalRenderer::drawRRect(GrDrawTarget* target, | 2034 bool GrOvalRenderer::drawRRect(GrDrawTarget* target, |
2060 GrPipelineBuilder* pipelineBuilder, | 2035 GrPipelineBuilder* pipelineBuilder, |
2061 GrColor color, | 2036 GrColor color, |
2062 const SkMatrix& viewMatrix, | 2037 const SkMatrix& viewMatrix, |
2063 bool useAA, | 2038 bool useAA, |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2223 geometry.fInnerXRadius = innerXRadius; | 2198 geometry.fInnerXRadius = innerXRadius; |
2224 geometry.fInnerYRadius = innerYRadius; | 2199 geometry.fInnerYRadius = innerYRadius; |
2225 geometry.fStroke = isStrokeOnly; | 2200 geometry.fStroke = isStrokeOnly; |
2226 geometry.fDevBounds = bounds; | 2201 geometry.fDevBounds = bounds; |
2227 | 2202 |
2228 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); | 2203 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); |
2229 target->drawBatch(pipelineBuilder, batch, &bounds); | 2204 target->drawBatch(pipelineBuilder, batch, &bounds); |
2230 } | 2205 } |
2231 return true; | 2206 return true; |
2232 } | 2207 } |
OLD | NEW |