Index: src/gpu/GrDrawContext.cpp |
diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp |
index 10b9b63b420fbe883e35ab874f4d417ea8b84206..3db04491e65fe9436f4837f53b30be10bdb937d6 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); |
} |