From a8a6a32f428e77ee865780ad93bd5f8e1ce3c687 Mon Sep 17 00:00:00 2001 From: "bsalomon@google.com" Date: Fri, 23 Sep 2011 14:19:58 +0000 Subject: Use GrAAHairlineRenderer for line segments only if FS derivs not avail Rebaseline complexclip_gpu for windows Note: complexclip_gpu gm will go red on mac and linux until I update them Review URL: http://codereview.appspot.com/5109041/ git-svn-id: http://skia.googlecode.com/svn/trunk@2316 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gpu/src/GrAAHairLinePathRenderer.cpp | 41 ++++++++++++++++-------------------- gpu/src/GrAAHairLinePathRenderer.h | 1 - gpu/src/GrPathRendererChain.cpp | 2 +- 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 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 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; } -- cgit v1.2.3