aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gpu/src/GrAAHairLinePathRenderer.cpp41
-rw-r--r--gpu/src/GrAAHairLinePathRenderer.h1
-rw-r--r--gpu/src/GrPathRendererChain.cpp2
3 files changed, 19 insertions, 25 deletions
diff --git a/gpu/src/GrAAHairLinePathRenderer.cpp b/gpu/src/GrAAHairLinePathRenderer.cpp
index 4d05a6bb7d..f836188c12 100644
--- a/gpu/src/GrAAHairLinePathRenderer.cpp
+++ b/gpu/src/GrAAHairLinePathRenderer.cpp
@@ -66,36 +66,26 @@ bool push_quad_index_data(GrIndexBuffer* qIdxBuffer) {
}
GrPathRenderer* GrAAHairLinePathRenderer::Create(GrContext* context) {
- if (CanBeUsed(context)) {
- const GrIndexBuffer* lIdxBuffer = context->getQuadIndexBuffer();
- if (NULL == lIdxBuffer) {
- return NULL;
- }
- GrGpu* gpu = context->getGpu();
- GrIndexBuffer* qIdxBuf = gpu->createIndexBuffer(kQuadIdxSBufize, false);
- SkAutoTUnref<GrIndexBuffer> qIdxBuffer(qIdxBuf); // cons will take a ref
- if (NULL == qIdxBuf ||
- !push_quad_index_data(qIdxBuffer.get())) {
- return NULL;
- }
- return new GrAAHairLinePathRenderer(context,
- lIdxBuffer,
- qIdxBuf);
- } else {
+ const GrIndexBuffer* lIdxBuffer = context->getQuadIndexBuffer();
+ if (NULL == lIdxBuffer) {
return NULL;
}
-}
-
-bool GrAAHairLinePathRenderer::CanBeUsed(const GrContext* context) {
- return context->getGpu()->getCaps().fShaderDerivativeSupport;
-
+ GrGpu* gpu = context->getGpu();
+ GrIndexBuffer* qIdxBuf = gpu->createIndexBuffer(kQuadIdxSBufize, false);
+ SkAutoTUnref<GrIndexBuffer> qIdxBuffer(qIdxBuf);
+ if (NULL == qIdxBuf ||
+ !push_quad_index_data(qIdxBuf)) {
+ return NULL;
+ }
+ return new GrAAHairLinePathRenderer(context,
+ lIdxBuffer,
+ qIdxBuf);
}
GrAAHairLinePathRenderer::GrAAHairLinePathRenderer(
const GrContext* context,
const GrIndexBuffer* linesIndexBuffer,
const GrIndexBuffer* quadsIndexBuffer) {
- GrAssert(CanBeUsed(context));
fLinesIndexBuffer = linesIndexBuffer;
linesIndexBuffer->ref();
fQuadsIndexBuffer = quadsIndexBuffer;
@@ -117,7 +107,12 @@ bool GrAAHairLinePathRenderer::supportsAA(GrDrawTarget* target,
bool GrAAHairLinePathRenderer::canDrawPath(const GrDrawTarget* target,
const SkPath& path,
GrPathFill fill) const {
- return kHairLine_PathFill == fill;
+ static const uint32_t gReqDerivMask = SkPath::kCubic_SegmentMask |
+ SkPath::kQuad_SegmentMask;
+ return (kHairLine_PathFill == fill &&
+ target->isAntialiasState() &&
+ (target->getCaps().fShaderDerivativeSupport ||
+ !(gReqDerivMask & path.getSegmentMasks())));
}
void GrAAHairLinePathRenderer::pathWillClear() {
diff --git a/gpu/src/GrAAHairLinePathRenderer.h b/gpu/src/GrAAHairLinePathRenderer.h
index c1d61dcaf7..013e540cd6 100644
--- a/gpu/src/GrAAHairLinePathRenderer.h
+++ b/gpu/src/GrAAHairLinePathRenderer.h
@@ -33,7 +33,6 @@ protected:
private:
void resetGeom();
- static bool CanBeUsed(const GrContext* context);
GrAAHairLinePathRenderer(const GrContext* context,
const GrIndexBuffer* fLinesIndexBuffer,
const GrIndexBuffer* fQuadsIndexBuffer);
diff --git a/gpu/src/GrPathRendererChain.cpp b/gpu/src/GrPathRendererChain.cpp
index a6da6d3bd4..87ebe105eb 100644
--- a/gpu/src/GrPathRendererChain.cpp
+++ b/gpu/src/GrPathRendererChain.cpp
@@ -59,7 +59,7 @@ void GrPathRendererChain::init() {
GrGpu* gpu = fOwner->getGpu();
bool twoSided = gpu->getCaps().fTwoSidedStencilSupport;
bool wrapOp = gpu->getCaps().fStencilWrapOpsSupport;
- this->addPathRenderer(new GrDefaultPathRenderer(twoSided, wrapOp))->unref();
GrPathRenderer::AddPathRenderers(fOwner, fFlags, this);
+ this->addPathRenderer(new GrDefaultPathRenderer(twoSided, wrapOp))->unref();
fInit = true;
}