| 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 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 /////////////////////////////////////////////////////////////////////////////// | 685 /////////////////////////////////////////////////////////////////////////////// |
| 686 | 686 |
| 687 class CircleBatch : public GrBatch { | 687 class CircleBatch : public GrBatch { |
| 688 public: | 688 public: |
| 689 struct Geometry { | 689 struct Geometry { |
| 690 GrColor fColor; | 690 GrColor fColor; |
| 691 SkMatrix fViewMatrix; | 691 SkMatrix fViewMatrix; |
| 692 SkScalar fInnerRadius; | 692 SkScalar fInnerRadius; |
| 693 SkScalar fOuterRadius; | 693 SkScalar fOuterRadius; |
| 694 bool fStroke; | 694 bool fStroke; |
| 695 SkRect fBounds; | 695 SkRect fDevBounds; |
| 696 }; | 696 }; |
| 697 | 697 |
| 698 static GrBatch* Create(const Geometry& geometry) { | 698 static GrBatch* Create(const Geometry& geometry) { |
| 699 return SkNEW_ARGS(CircleBatch, (geometry)); | 699 return SkNEW_ARGS(CircleBatch, (geometry)); |
| 700 } | 700 } |
| 701 | 701 |
| 702 const char* name() const override { return "CircleBatch"; } | 702 const char* name() const override { return "CircleBatch"; } |
| 703 | 703 |
| 704 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 704 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 705 // When this is called on a batch, there is only one geometry bundle | 705 // When this is called on a batch, there is only one geometry bundle |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 } | 768 } |
| 769 | 769 |
| 770 CircleVertex* verts = reinterpret_cast<CircleVertex*>(vertices); | 770 CircleVertex* verts = reinterpret_cast<CircleVertex*>(vertices); |
| 771 | 771 |
| 772 for (int i = 0; i < instanceCount; i++) { | 772 for (int i = 0; i < instanceCount; i++) { |
| 773 Geometry& args = fGeoData[i]; | 773 Geometry& args = fGeoData[i]; |
| 774 | 774 |
| 775 SkScalar innerRadius = args.fInnerRadius; | 775 SkScalar innerRadius = args.fInnerRadius; |
| 776 SkScalar outerRadius = args.fOuterRadius; | 776 SkScalar outerRadius = args.fOuterRadius; |
| 777 | 777 |
| 778 const SkRect& bounds = args.fBounds; | 778 const SkRect& bounds = args.fDevBounds; |
| 779 | 779 |
| 780 // The inner radius in the vertex data must be specified in normaliz
ed space. | 780 // The inner radius in the vertex data must be specified in normaliz
ed space. |
| 781 innerRadius = innerRadius / outerRadius; | 781 innerRadius = innerRadius / outerRadius; |
| 782 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); | 782 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); |
| 783 verts[0].fOffset = SkPoint::Make(-1, -1); | 783 verts[0].fOffset = SkPoint::Make(-1, -1); |
| 784 verts[0].fOuterRadius = outerRadius; | 784 verts[0].fOuterRadius = outerRadius; |
| 785 verts[0].fInnerRadius = innerRadius; | 785 verts[0].fInnerRadius = innerRadius; |
| 786 | 786 |
| 787 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); | 787 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); |
| 788 verts[1].fOffset = SkPoint::Make(-1, 1); | 788 verts[1].fOffset = SkPoint::Make(-1, 1); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 923 center.fX + outerRadius, | 923 center.fX + outerRadius, |
| 924 center.fY + outerRadius | 924 center.fY + outerRadius |
| 925 ); | 925 ); |
| 926 | 926 |
| 927 CircleBatch::Geometry geometry; | 927 CircleBatch::Geometry geometry; |
| 928 geometry.fViewMatrix = viewMatrix; | 928 geometry.fViewMatrix = viewMatrix; |
| 929 geometry.fColor = color; | 929 geometry.fColor = color; |
| 930 geometry.fInnerRadius = innerRadius; | 930 geometry.fInnerRadius = innerRadius; |
| 931 geometry.fOuterRadius = outerRadius; | 931 geometry.fOuterRadius = outerRadius; |
| 932 geometry.fStroke = isStrokeOnly && innerRadius > 0; | 932 geometry.fStroke = isStrokeOnly && innerRadius > 0; |
| 933 geometry.fBounds = bounds; | 933 geometry.fDevBounds = bounds; |
| 934 | |
| 935 viewMatrix.mapRect(&bounds); | |
| 936 | 934 |
| 937 SkAutoTUnref<GrBatch> batch(CircleBatch::Create(geometry)); | 935 SkAutoTUnref<GrBatch> batch(CircleBatch::Create(geometry)); |
| 938 target->drawBatch(pipelineBuilder, batch, &bounds); | 936 target->drawBatch(pipelineBuilder, batch, &bounds); |
| 939 } | 937 } |
| 940 | 938 |
| 941 /////////////////////////////////////////////////////////////////////////////// | 939 /////////////////////////////////////////////////////////////////////////////// |
| 942 | 940 |
| 943 class EllipseBatch : public GrBatch { | 941 class EllipseBatch : public GrBatch { |
| 944 public: | 942 public: |
| 945 struct Geometry { | 943 struct Geometry { |
| 946 GrColor fColor; | 944 GrColor fColor; |
| 947 SkMatrix fViewMatrix; | 945 SkMatrix fViewMatrix; |
| 948 SkScalar fXRadius; | 946 SkScalar fXRadius; |
| 949 SkScalar fYRadius; | 947 SkScalar fYRadius; |
| 950 SkScalar fInnerXRadius; | 948 SkScalar fInnerXRadius; |
| 951 SkScalar fInnerYRadius; | 949 SkScalar fInnerYRadius; |
| 952 bool fStroke; | 950 bool fStroke; |
| 953 SkRect fBounds; | 951 SkRect fDevBounds; |
| 954 }; | 952 }; |
| 955 | 953 |
| 956 static GrBatch* Create(const Geometry& geometry) { | 954 static GrBatch* Create(const Geometry& geometry) { |
| 957 return SkNEW_ARGS(EllipseBatch, (geometry)); | 955 return SkNEW_ARGS(EllipseBatch, (geometry)); |
| 958 } | 956 } |
| 959 | 957 |
| 960 const char* name() const override { return "EllipseBatch"; } | 958 const char* name() const override { return "EllipseBatch"; } |
| 961 | 959 |
| 962 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 960 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 963 // When this is called on a batch, there is only one geometry bundle | 961 // When this is called on a batch, there is only one geometry bundle |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1031 | 1029 |
| 1032 SkScalar xRadius = args.fXRadius; | 1030 SkScalar xRadius = args.fXRadius; |
| 1033 SkScalar yRadius = args.fYRadius; | 1031 SkScalar yRadius = args.fYRadius; |
| 1034 | 1032 |
| 1035 // Compute the reciprocals of the radii here to save time in the sha
der | 1033 // Compute the reciprocals of the radii here to save time in the sha
der |
| 1036 SkScalar xRadRecip = SkScalarInvert(xRadius); | 1034 SkScalar xRadRecip = SkScalarInvert(xRadius); |
| 1037 SkScalar yRadRecip = SkScalarInvert(yRadius); | 1035 SkScalar yRadRecip = SkScalarInvert(yRadius); |
| 1038 SkScalar xInnerRadRecip = SkScalarInvert(args.fInnerXRadius); | 1036 SkScalar xInnerRadRecip = SkScalarInvert(args.fInnerXRadius); |
| 1039 SkScalar yInnerRadRecip = SkScalarInvert(args.fInnerYRadius); | 1037 SkScalar yInnerRadRecip = SkScalarInvert(args.fInnerYRadius); |
| 1040 | 1038 |
| 1041 const SkRect& bounds = args.fBounds; | 1039 const SkRect& bounds = args.fDevBounds; |
| 1042 | 1040 |
| 1043 // The inner radius in the vertex data must be specified in normaliz
ed space. | 1041 // The inner radius in the vertex data must be specified in normaliz
ed space. |
| 1044 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); | 1042 verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop); |
| 1045 verts[0].fOffset = SkPoint::Make(-xRadius, -yRadius); | 1043 verts[0].fOffset = SkPoint::Make(-xRadius, -yRadius); |
| 1046 verts[0].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); | 1044 verts[0].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); |
| 1047 verts[0].fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadRecip)
; | 1045 verts[0].fInnerRadii = SkPoint::Make(xInnerRadRecip, yInnerRadRecip)
; |
| 1048 | 1046 |
| 1049 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); | 1047 verts[1].fPos = SkPoint::Make(bounds.fLeft, bounds.fBottom); |
| 1050 verts[1].fOffset = SkPoint::Make(-xRadius, yRadius); | 1048 verts[1].fOffset = SkPoint::Make(-xRadius, yRadius); |
| 1051 verts[1].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); | 1049 verts[1].fOuterRadii = SkPoint::Make(xRadRecip, yRadRecip); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1222 ); | 1220 ); |
| 1223 | 1221 |
| 1224 EllipseBatch::Geometry geometry; | 1222 EllipseBatch::Geometry geometry; |
| 1225 geometry.fViewMatrix = viewMatrix; | 1223 geometry.fViewMatrix = viewMatrix; |
| 1226 geometry.fColor = color; | 1224 geometry.fColor = color; |
| 1227 geometry.fXRadius = xRadius; | 1225 geometry.fXRadius = xRadius; |
| 1228 geometry.fYRadius = yRadius; | 1226 geometry.fYRadius = yRadius; |
| 1229 geometry.fInnerXRadius = innerXRadius; | 1227 geometry.fInnerXRadius = innerXRadius; |
| 1230 geometry.fInnerYRadius = innerYRadius; | 1228 geometry.fInnerYRadius = innerYRadius; |
| 1231 geometry.fStroke = isStrokeOnly && innerXRadius > 0 && innerYRadius > 0; | 1229 geometry.fStroke = isStrokeOnly && innerXRadius > 0 && innerYRadius > 0; |
| 1232 geometry.fBounds = bounds; | 1230 geometry.fDevBounds = bounds; |
| 1233 | |
| 1234 viewMatrix.mapRect(&bounds); | |
| 1235 | 1231 |
| 1236 SkAutoTUnref<GrBatch> batch(EllipseBatch::Create(geometry)); | 1232 SkAutoTUnref<GrBatch> batch(EllipseBatch::Create(geometry)); |
| 1237 target->drawBatch(pipelineBuilder, batch, &bounds); | 1233 target->drawBatch(pipelineBuilder, batch, &bounds); |
| 1238 | 1234 |
| 1239 return true; | 1235 return true; |
| 1240 } | 1236 } |
| 1241 | 1237 |
| 1242 ////////////////////////////////////////////////////////////////////////////////
///////////////// | 1238 ////////////////////////////////////////////////////////////////////////////////
///////////////// |
| 1243 | 1239 |
| 1244 class DIEllipseBatch : public GrBatch { | 1240 class DIEllipseBatch : public GrBatch { |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1635 ////////////////////////////////////////////////////////////////////////////////
/////////////////// | 1631 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 1636 | 1632 |
| 1637 class RRectCircleRendererBatch : public GrBatch { | 1633 class RRectCircleRendererBatch : public GrBatch { |
| 1638 public: | 1634 public: |
| 1639 struct Geometry { | 1635 struct Geometry { |
| 1640 GrColor fColor; | 1636 GrColor fColor; |
| 1641 SkMatrix fViewMatrix; | 1637 SkMatrix fViewMatrix; |
| 1642 SkScalar fInnerRadius; | 1638 SkScalar fInnerRadius; |
| 1643 SkScalar fOuterRadius; | 1639 SkScalar fOuterRadius; |
| 1644 bool fStroke; | 1640 bool fStroke; |
| 1645 SkRect fBounds; | 1641 SkRect fDevBounds; |
| 1646 }; | 1642 }; |
| 1647 | 1643 |
| 1648 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB
uffer) { | 1644 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB
uffer) { |
| 1649 return SkNEW_ARGS(RRectCircleRendererBatch, (geometry, indexBuffer)); | 1645 return SkNEW_ARGS(RRectCircleRendererBatch, (geometry, indexBuffer)); |
| 1650 } | 1646 } |
| 1651 | 1647 |
| 1652 const char* name() const override { return "RRectCircleBatch"; } | 1648 const char* name() const override { return "RRectCircleBatch"; } |
| 1653 | 1649 |
| 1654 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1650 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1655 // When this is called on a batch, there is only one geometry bundle | 1651 // When this is called on a batch, there is only one geometry bundle |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1718 return; | 1714 return; |
| 1719 } | 1715 } |
| 1720 | 1716 |
| 1721 CircleVertex* verts = reinterpret_cast<CircleVertex*>(vertices); | 1717 CircleVertex* verts = reinterpret_cast<CircleVertex*>(vertices); |
| 1722 | 1718 |
| 1723 for (int i = 0; i < instanceCount; i++) { | 1719 for (int i = 0; i < instanceCount; i++) { |
| 1724 Geometry& args = fGeoData[i]; | 1720 Geometry& args = fGeoData[i]; |
| 1725 | 1721 |
| 1726 SkScalar outerRadius = args.fOuterRadius; | 1722 SkScalar outerRadius = args.fOuterRadius; |
| 1727 | 1723 |
| 1728 const SkRect& bounds = args.fBounds; | 1724 const SkRect& bounds = args.fDevBounds; |
| 1729 | 1725 |
| 1730 SkScalar yCoords[4] = { | 1726 SkScalar yCoords[4] = { |
| 1731 bounds.fTop, | 1727 bounds.fTop, |
| 1732 bounds.fTop + outerRadius, | 1728 bounds.fTop + outerRadius, |
| 1733 bounds.fBottom - outerRadius, | 1729 bounds.fBottom - outerRadius, |
| 1734 bounds.fBottom | 1730 bounds.fBottom |
| 1735 }; | 1731 }; |
| 1736 | 1732 |
| 1737 SkScalar yOuterRadii[4] = {-1, 0, 0, 1 }; | 1733 SkScalar yOuterRadii[4] = {-1, 0, 0, 1 }; |
| 1738 // The inner radius in the vertex data must be specified in normaliz
ed space. | 1734 // The inner radius in the vertex data must be specified in normaliz
ed space. |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1844 class RRectEllipseRendererBatch : public GrBatch { | 1840 class RRectEllipseRendererBatch : public GrBatch { |
| 1845 public: | 1841 public: |
| 1846 struct Geometry { | 1842 struct Geometry { |
| 1847 GrColor fColor; | 1843 GrColor fColor; |
| 1848 SkMatrix fViewMatrix; | 1844 SkMatrix fViewMatrix; |
| 1849 SkScalar fXRadius; | 1845 SkScalar fXRadius; |
| 1850 SkScalar fYRadius; | 1846 SkScalar fYRadius; |
| 1851 SkScalar fInnerXRadius; | 1847 SkScalar fInnerXRadius; |
| 1852 SkScalar fInnerYRadius; | 1848 SkScalar fInnerYRadius; |
| 1853 bool fStroke; | 1849 bool fStroke; |
| 1854 SkRect fBounds; | 1850 SkRect fDevBounds; |
| 1855 }; | 1851 }; |
| 1856 | 1852 |
| 1857 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB
uffer) { | 1853 static GrBatch* Create(const Geometry& geometry, const GrIndexBuffer* indexB
uffer) { |
| 1858 return SkNEW_ARGS(RRectEllipseRendererBatch, (geometry, indexBuffer)); | 1854 return SkNEW_ARGS(RRectEllipseRendererBatch, (geometry, indexBuffer)); |
| 1859 } | 1855 } |
| 1860 | 1856 |
| 1861 const char* name() const override { return "RRectEllipseRendererBatch"; } | 1857 const char* name() const override { return "RRectEllipseRendererBatch"; } |
| 1862 | 1858 |
| 1863 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 1859 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { |
| 1864 // When this is called on a batch, there is only one geometry bundle | 1860 // When this is called on a batch, there is only one geometry bundle |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1935 // Compute the reciprocals of the radii here to save time in the sha
der | 1931 // Compute the reciprocals of the radii here to save time in the sha
der |
| 1936 SkScalar xRadRecip = SkScalarInvert(args.fXRadius); | 1932 SkScalar xRadRecip = SkScalarInvert(args.fXRadius); |
| 1937 SkScalar yRadRecip = SkScalarInvert(args.fYRadius); | 1933 SkScalar yRadRecip = SkScalarInvert(args.fYRadius); |
| 1938 SkScalar xInnerRadRecip = SkScalarInvert(args.fInnerXRadius); | 1934 SkScalar xInnerRadRecip = SkScalarInvert(args.fInnerXRadius); |
| 1939 SkScalar yInnerRadRecip = SkScalarInvert(args.fInnerYRadius); | 1935 SkScalar yInnerRadRecip = SkScalarInvert(args.fInnerYRadius); |
| 1940 | 1936 |
| 1941 // Extend the radii out half a pixel to antialias. | 1937 // Extend the radii out half a pixel to antialias. |
| 1942 SkScalar xOuterRadius = args.fXRadius + SK_ScalarHalf; | 1938 SkScalar xOuterRadius = args.fXRadius + SK_ScalarHalf; |
| 1943 SkScalar yOuterRadius = args.fYRadius + SK_ScalarHalf; | 1939 SkScalar yOuterRadius = args.fYRadius + SK_ScalarHalf; |
| 1944 | 1940 |
| 1945 const SkRect& bounds = args.fBounds; | 1941 const SkRect& bounds = args.fDevBounds; |
| 1946 | 1942 |
| 1947 SkScalar yCoords[4] = { | 1943 SkScalar yCoords[4] = { |
| 1948 bounds.fTop, | 1944 bounds.fTop, |
| 1949 bounds.fTop + yOuterRadius, | 1945 bounds.fTop + yOuterRadius, |
| 1950 bounds.fBottom - yOuterRadius, | 1946 bounds.fBottom - yOuterRadius, |
| 1951 bounds.fBottom | 1947 bounds.fBottom |
| 1952 }; | 1948 }; |
| 1953 SkScalar yOuterOffsets[4] = { | 1949 SkScalar yOuterOffsets[4] = { |
| 1954 yOuterRadius, | 1950 yOuterRadius, |
| 1955 SK_ScalarNearlyZero, // we're using inversesqrt() in shader, so
can't be exactly 0 | 1951 SK_ScalarNearlyZero, // we're using inversesqrt() in shader, so
can't be exactly 0 |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2167 | 2163 |
| 2168 // Expand the rect so all the pixels will be captured. | 2164 // Expand the rect so all the pixels will be captured. |
| 2169 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); | 2165 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
| 2170 | 2166 |
| 2171 RRectCircleRendererBatch::Geometry geometry; | 2167 RRectCircleRendererBatch::Geometry geometry; |
| 2172 geometry.fViewMatrix = viewMatrix; | 2168 geometry.fViewMatrix = viewMatrix; |
| 2173 geometry.fColor = color; | 2169 geometry.fColor = color; |
| 2174 geometry.fInnerRadius = innerRadius; | 2170 geometry.fInnerRadius = innerRadius; |
| 2175 geometry.fOuterRadius = outerRadius; | 2171 geometry.fOuterRadius = outerRadius; |
| 2176 geometry.fStroke = isStrokeOnly; | 2172 geometry.fStroke = isStrokeOnly; |
| 2177 geometry.fBounds = bounds; | 2173 geometry.fDevBounds = bounds; |
| 2178 | |
| 2179 viewMatrix.mapRect(&bounds); | |
| 2180 | 2174 |
| 2181 SkAutoTUnref<GrBatch> batch(RRectCircleRendererBatch::Create(geometry, i
ndexBuffer)); | 2175 SkAutoTUnref<GrBatch> batch(RRectCircleRendererBatch::Create(geometry, i
ndexBuffer)); |
| 2182 target->drawBatch(pipelineBuilder, batch, &bounds); | 2176 target->drawBatch(pipelineBuilder, batch, &bounds); |
| 2183 | 2177 |
| 2184 // otherwise we use the ellipse renderer | 2178 // otherwise we use the ellipse renderer |
| 2185 } else { | 2179 } else { |
| 2186 SkScalar innerXRadius = 0.0f; | 2180 SkScalar innerXRadius = 0.0f; |
| 2187 SkScalar innerYRadius = 0.0f; | 2181 SkScalar innerYRadius = 0.0f; |
| 2188 if (hasStroke) { | 2182 if (hasStroke) { |
| 2189 if (SkScalarNearlyZero(scaledStroke.length())) { | 2183 if (SkScalarNearlyZero(scaledStroke.length())) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2221 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); | 2215 bounds.outset(SK_ScalarHalf, SK_ScalarHalf); |
| 2222 | 2216 |
| 2223 RRectEllipseRendererBatch::Geometry geometry; | 2217 RRectEllipseRendererBatch::Geometry geometry; |
| 2224 geometry.fViewMatrix = viewMatrix; | 2218 geometry.fViewMatrix = viewMatrix; |
| 2225 geometry.fColor = color; | 2219 geometry.fColor = color; |
| 2226 geometry.fXRadius = xRadius; | 2220 geometry.fXRadius = xRadius; |
| 2227 geometry.fYRadius = yRadius; | 2221 geometry.fYRadius = yRadius; |
| 2228 geometry.fInnerXRadius = innerXRadius; | 2222 geometry.fInnerXRadius = innerXRadius; |
| 2229 geometry.fInnerYRadius = innerYRadius; | 2223 geometry.fInnerYRadius = innerYRadius; |
| 2230 geometry.fStroke = isStrokeOnly; | 2224 geometry.fStroke = isStrokeOnly; |
| 2231 geometry.fBounds = bounds; | 2225 geometry.fDevBounds = bounds; |
| 2232 | |
| 2233 viewMatrix.mapRect(&bounds); | |
| 2234 | 2226 |
| 2235 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); | 2227 SkAutoTUnref<GrBatch> batch(RRectEllipseRendererBatch::Create(geometry,
indexBuffer)); |
| 2236 target->drawBatch(pipelineBuilder, batch, &bounds); | 2228 target->drawBatch(pipelineBuilder, batch, &bounds); |
| 2237 } | 2229 } |
| 2238 return true; | 2230 return true; |
| 2239 } | 2231 } |
| OLD | NEW |