diff options
author | cdalton <cdalton@nvidia.com> | 2016-05-12 15:09:48 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-12 15:09:48 -0700 |
commit | 862cff30eaa16206d76d7de7594c9167375ca87e (patch) | |
tree | b8f177f4d401b8c0361141ce834eaa9898d7beb4 /src/gpu/GrDrawContext.cpp | |
parent | 193d9cf8f2280cd4f8e509c6f3af6b47cea04935 (diff) |
Remove clip from GrPipelineBuilder
This eliminates a copy and will allow us to make the GrClip class
virutal.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1966903004
Review-Url: https://codereview.chromium.org/1966903004
Diffstat (limited to 'src/gpu/GrDrawContext.cpp')
-rw-r--r-- | src/gpu/GrDrawContext.cpp | 81 |
1 files changed, 37 insertions, 44 deletions
diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp index 10b9b63b42..3db04491e6 100644 --- a/src/gpu/GrDrawContext.cpp +++ b/src/gpu/GrDrawContext.cpp @@ -235,8 +235,8 @@ void GrDrawContext::drawPaint(const GrClip& clip, SkAutoTUnref<GrDrawBatch> batch( GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix::I(), r, nullptr, &localMatrix)); - GrPipelineBuilder pipelineBuilder(*paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(*paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } } @@ -357,14 +357,14 @@ void GrDrawContext::drawRect(const GrClip& clip, } if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); if (snapToPixelCenters) { pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_Flag, snapToPixelCenters); } - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); return; } @@ -374,7 +374,7 @@ void GrDrawContext::drawRect(const GrClip& clip, this->internalDrawPath(clip, paint, viewMatrix, path, *style); } -bool GrDrawContextPriv::drawAndStencilRect(const SkIRect* scissorRect, +bool GrDrawContextPriv::drawAndStencilRect(const GrClip& clip, const GrUserStencilSettings* ss, SkRegion::Op op, bool invert, @@ -394,19 +394,17 @@ bool GrDrawContextPriv::drawAndStencilRect(const SkIRect* scissorRect, SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMatrix, rect)); if (batch) { - GrPipelineBuilder pipelineBuilder(paint, - fDrawContext->accessRenderTarget(), - GrClip::WideOpen()); + GrPipelineBuilder pipelineBuilder(paint, fDrawContext->accessRenderTarget()); pipelineBuilder.setUserStencil(ss); - fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, batch, scissorRect); + fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); return true; } SkPath path; path.setIsVolatile(true); path.addRect(rect); - return this->drawAndStencilPath(scissorRect, ss, op, invert, doAA, viewMatrix, path); + return this->drawAndStencilPath(clip, ss, op, invert, doAA, viewMatrix, path); } void GrDrawContext::fillRectToRect(const GrClip& clip, @@ -432,8 +430,8 @@ void GrDrawContext::fillRectToRect(const GrClip& clip, } if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->drawBatch(&pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->drawBatch(&pipelineBuilder, clip, batch); } } @@ -459,8 +457,8 @@ void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, nullptr, &localMatrix)); } - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } void GrDrawContext::drawVertices(const GrClip& clip, @@ -504,8 +502,8 @@ void GrDrawContext::drawVertices(const GrClip& clip, indexCount, colors, texCoords, bounds)); - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } /////////////////////////////////////////////////////////////////////////////// @@ -529,8 +527,8 @@ void GrDrawContext::drawAtlas(const GrClip& clip, SkAutoTUnref<GrDrawBatch> batch(GrDrawAtlasBatch::Create(geometry, viewMatrix, spriteCount, xform, texRect, colors)); - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } /////////////////////////////////////////////////////////////////////////////// @@ -562,8 +560,8 @@ void GrDrawContext::drawRRect(const GrClip& clip, stroke, shaderCaps)); if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); return; } } @@ -656,7 +654,6 @@ void GrDrawContext::drawDRRect(const GrClip& clip, path.addRRect(outer); path.setFillType(SkPath::kEvenOdd_FillType); - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); this->internalDrawPath(clip, paint, viewMatrix, path, GrStyle::SimpleFill()); } @@ -688,8 +685,8 @@ void GrDrawContext::drawOval(const GrClip& clip, stroke, shaderCaps)); if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); return; } } @@ -718,8 +715,8 @@ void GrDrawContext::drawImageNine(const GrClip& clip, imageWidth, imageHeight, center, dst)); - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } @@ -778,8 +775,8 @@ void GrDrawContext::drawBatch(const GrClip& clip, AutoCheckFlush acf(fDrawingManager); - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } void GrDrawContext::drawPath(const GrClip& clip, @@ -810,8 +807,8 @@ void GrDrawContext::drawPath(const GrClip& clip, SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFillNestedRects( paint.getColor(), viewMatrix, rects)); if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); } return; } @@ -827,8 +824,8 @@ void GrDrawContext::drawPath(const GrClip& clip, style.strokeRec(), shaderCaps)); if (batch) { - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); - this->getDrawTarget()->drawBatch(pipelineBuilder, batch); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); + this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); return; } } @@ -842,7 +839,7 @@ void GrDrawContext::drawPath(const GrClip& clip, this->internalDrawPath(clip, paint, viewMatrix, path, style); } -bool GrDrawContextPriv::drawAndStencilPath(const SkIRect* scissorRect, +bool GrDrawContextPriv::drawAndStencilPath(const GrClip& clip, const GrUserStencilSettings* ss, SkRegion::Op op, bool invert, @@ -855,7 +852,7 @@ bool GrDrawContextPriv::drawAndStencilPath(const SkIRect* scissorRect, GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::drawPath"); if (path.isEmpty() && path.isInverseFillType()) { - this->drawAndStencilRect(scissorRect, ss, op, invert, false, SkMatrix::I(), + this->drawAndStencilRect(clip, ss, op, invert, false, SkMatrix::I(), SkRect::MakeIWH(fDrawContext->width(), fDrawContext->height())); return true; @@ -893,20 +890,14 @@ bool GrDrawContextPriv::drawAndStencilPath(const SkIRect* scissorRect, GrPaint paint; paint.setCoverageSetOpXPFactory(op, invert); - // TODO: it is unfortunate that we have to convert this to a GrClip to - // call drawPath. - GrClip clip; - if (scissorRect) { - clip.setIRect(*scissorRect); - } - - GrPipelineBuilder pipelineBuilder(paint, fDrawContext->accessRenderTarget(), clip); + GrPipelineBuilder pipelineBuilder(paint, fDrawContext->accessRenderTarget()); pipelineBuilder.setUserStencil(ss); GrPathRenderer::DrawPathArgs args; args.fTarget = fDrawContext->getDrawTarget(); args.fResourceProvider = fDrawContext->fDrawingManager->getContext()->resourceProvider(); args.fPipelineBuilder = &pipelineBuilder; + args.fClip = &clip; args.fColor = GrColor_WHITE; args.fViewMatrix = &viewMatrix; args.fPath = &path; @@ -1005,12 +996,13 @@ void GrDrawContext::internalDrawPath(const GrClip& clip, return; } - GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get(), clip); + GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); GrPathRenderer::DrawPathArgs args; args.fTarget = this->getDrawTarget(); args.fResourceProvider = fDrawingManager->getContext()->resourceProvider(); args.fPipelineBuilder = &pipelineBuilder; + args.fClip = &clip; args.fColor = paint.getColor(); args.fViewMatrix = &viewMatrix; args.fPath = canDrawArgs.fPath; @@ -1020,11 +1012,12 @@ void GrDrawContext::internalDrawPath(const GrClip& clip, pr->drawPath(args); } -void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch) { +void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip& clip, + GrDrawBatch* batch) { ASSERT_SINGLE_OWNER RETURN_IF_ABANDONED SkDEBUGCODE(this->validate();) GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); - this->getDrawTarget()->drawBatch(*pipelineBuilder, batch); + this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); } |