aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrDrawContext.cpp
diff options
context:
space:
mode:
authorGravatar cdalton <cdalton@nvidia.com>2016-05-12 15:09:48 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-05-12 15:09:48 -0700
commit862cff30eaa16206d76d7de7594c9167375ca87e (patch)
treeb8f177f4d401b8c0361141ce834eaa9898d7beb4 /src/gpu/GrDrawContext.cpp
parent193d9cf8f2280cd4f8e509c6f3af6b47cea04935 (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.cpp81
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);
}