Index: src/gpu/GrDefaultPathRenderer.cpp |
diff --git a/src/gpu/GrDefaultPathRenderer.cpp b/src/gpu/GrDefaultPathRenderer.cpp |
index d8f723eaefdc0fc33b0c1e5cef664fb5acacb14f..aaa40ecb1a6cfa46d432b85b04bfc7d03181fccc 100644 |
--- a/src/gpu/GrDefaultPathRenderer.cpp |
+++ b/src/gpu/GrDefaultPathRenderer.cpp |
@@ -11,6 +11,7 @@ |
#include "GrDefaultGeoProcFactory.h" |
#include "GrDrawState.h" |
#include "GrPathUtils.h" |
+#include "SkGeometry.h" |
#include "SkString.h" |
#include "SkStrokeRec.h" |
#include "SkTLazy.h" |
@@ -256,9 +257,27 @@ bool GrDefaultPathRenderer::createGeom(GrDrawTarget* target, |
for (;;) { |
SkPath::Verb verb = iter.next(pts); |
switch (verb) { |
- case SkPath::kConic_Verb: |
- SkASSERT(0); |
+ case SkPath::kConic_Verb: { |
+ SkScalar weight = iter.conicWeight(); |
+ SkAutoConicToQuads converter; |
+ const SkPoint* quadPts = converter.computeQuads(pts, weight, 0.25f); |
reed1
2014/12/22 20:04:09
// Converting in src-space, hence the finer tolera
egdaniel
2014/12/22 21:37:13
Done.
|
+ for (int i = 0; i < converter.countQuads(); ++i) { |
+ int baseIdx = i*2; |
+ uint16_t firstQPtIdx = (uint16_t)(vert - base) - 1; |
reed1
2014/12/22 20:04:09
Separate from this CL:
WHAT THE HECK IS UP WITH IN
egdaniel
2014/12/22 21:37:13
Brian do you have any insight on this?
bsalomon
2014/12/22 22:10:31
I dunno... the indices have to fit in shorts, but
|
+ uint16_t numPts = (uint16_t) |
+ GrPathUtils::generateQuadraticPoints( |
+ quadPts[baseIdx], quadPts[baseIdx + 1], quadPts[baseIdx + 2], |
+ srcSpaceTolSqd, &vert, |
+ GrPathUtils::quadraticPointCount(quadPts + baseIdx, srcSpaceTol)); |
+ if (indexed) { |
+ for (uint16_t i = 0; i < numPts; ++i) { |
+ append_countour_edge_indices(isHairline, subpathIdxStart, |
+ firstQPtIdx + i, &idx); |
+ } |
+ } |
+ } |
break; |
+ } |
case SkPath::kMove_Verb: |
if (!first) { |
uint16_t currIdx = (uint16_t) (vert - base); |
@@ -526,10 +545,8 @@ bool GrDefaultPathRenderer::canDrawPath(const GrDrawTarget* target, |
const SkStrokeRec& stroke, |
bool antiAlias) const { |
// this class can draw any path with any fill but doesn't do any anti-aliasing. |
- |
- return !antiAlias && !(SkPath::kConic_SegmentMask & path.getSegmentMasks()) && |
- (stroke.isFillStyle() || |
- IsStrokeHairlineOrEquivalent(stroke, drawState->getViewMatrix(), NULL)); |
+ return !antiAlias && (stroke.isFillStyle() || |
+ IsStrokeHairlineOrEquivalent(stroke, drawState->getViewMatrix(), NULL)); |
} |
bool GrDefaultPathRenderer::onDrawPath(GrDrawTarget* target, |