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
diff --git a/gpu/src/GrAAHairLinePathRenderer.cpp b/gpu/src/GrAAHairLinePathRenderer.cpp
index 4d05a6b..f836188 100644
--- a/gpu/src/GrAAHairLinePathRenderer.cpp
+++ b/gpu/src/GrAAHairLinePathRenderer.cpp
@@ -66,36 +66,26 @@
}
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::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() {