102 float2x2 affine = float2x2(affineMatrix.xy, affineMatrix.zw);
103 float4 devAndLocalCoords = tessellate_stroked_curve(
104 edgeID, 16383, affine, translate, maxScale, p01, p23, prevPoint,
106 float4 devPosition = float4(devAndLocalCoords.xy, depth, 1.0);
107 stepLocalCoords = devAndLocalCoords.zw;
109 fInfinitySupport ? "curve_type_using_inf_support(p23)" :
"curveType");
123 Writer writer{fInfinitySupport ? kAttribs : kAttribsWithCurveType,
128 writer.updatePaintDepthAttrib(
params.order().depthAsFloat());
129 writer.updateSsboIndexAttrib(ssboIndices);
136 params.transform().maxScaleFactor());
139 writer.updateStrokeParamsAttrib({
params.strokeStyle().halfWidth(),
140 params.strokeStyle().joinLimit()});
149 stroke.setStrokeParams(
params.strokeStyle().cap(),
150 params.strokeStyle().join(),
151 params.strokeStyle().miterLimit());
153 while (strokeIter.next()) {
155 const SkPoint*
p = strokeIter.pts();
161 switch (strokeIter.verb()) {
162 case Verb::kContourFinished:
163 writer.writeDeferredStrokePatch();
167 writer.writeCircle(p[0]);
169 case Verb::kMoveWithinContour:
172 writer.updateJoinControlPointAttrib(p[0]);
175 writer.writeLine(p[0], p[1]);
181 writer.writeCircle(cusp);
183 writer.writeLine(p[0], cusp);
184 writer.writeLine(cusp, p[2]);
186 writer.writeQuadratic(p);
194 writer.writeCircle(cusp);
196 writer.writeLine(p[0], cusp);
197 writer.writeLine(cusp, p[2]);
199 writer.writeConic(p, strokeIter.w());
208 writer.writeCubic(p);
209 }
else if (numChops == 1) {
212 writer.writeCircle(chops[3]);
215 chops[2] = chops[4] = chops[3];
217 writer.writeCubic(chops);
218 writer.writeCubic(chops + 3);
223 writer.writeCircle(chops[3]);
224 writer.writeCircle(chops[6]);
227 writer.writeLine(chops[0], chops[3]);
228 writer.writeLine(chops[3], chops[6]);
250 SkV4 upper = {
params.transform().matrix().rc(0, 0),
params.transform().matrix().rc(1, 0),
251 params.transform().matrix().rc(0, 1),
params.transform().matrix().rc(1, 1)};