Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: src/gpu/GrContext.cpp

Issue 936943002: Pass clip to context (Closed) Base URL: https://skia.googlesource.com/skia.git@pass_down_rendertarget
Patch Set: feedback inc Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrContext.cpp
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 0395e1bae80259789c8caa1b1758b1eef04d1084..b574614eb0236a82bfaf5978a07211329e096e26 100755
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -86,7 +86,6 @@ GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext,
GrContext::GrContext(const Options& opts) : fOptions(opts) {
fGpu = NULL;
- fClip = NULL;
fPathRendererChain = NULL;
fSoftwarePathRenderer = NULL;
fResourceCache = NULL;
@@ -363,7 +362,7 @@ void GrContext::clear(const SkIRect* rect,
AutoCheckFlush acf(this);
GR_CREATE_TRACE_MARKER_CONTEXT("GrContext::clear", this);
- GrDrawTarget* target = this->prepareToDraw(NULL, renderTarget, NULL, &acf);
+ GrDrawTarget* target = this->prepareToDraw();
if (NULL == target) {
return;
}
@@ -371,6 +370,7 @@ void GrContext::clear(const SkIRect* rect,
}
void GrContext::drawPaint(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& origPaint,
const SkMatrix& viewMatrix) {
// set rect to be big enough to fill the space, but not super-huge, so we
@@ -398,7 +398,7 @@ void GrContext::drawPaint(GrRenderTarget* rt,
return;
}
inverse.mapRect(&r);
- this->drawRect(rt, *paint, viewMatrix, r);
+ this->drawRect(rt, clip, *paint, viewMatrix, r);
} else {
SkMatrix localMatrix;
if (!viewMatrix.invert(&localMatrix)) {
@@ -408,7 +408,7 @@ void GrContext::drawPaint(GrRenderTarget* rt,
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, paint, &acf);
if (NULL == target) {
return;
}
@@ -502,6 +502,7 @@ static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
}
void GrContext::drawRect(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkRect& rect,
@@ -509,13 +510,13 @@ void GrContext::drawRect(GrRenderTarget* rt,
if (strokeInfo && strokeInfo->isDashed()) {
SkPath path;
path.addRect(rect);
- this->drawPath(rt, paint, viewMatrix, path, *strokeInfo);
+ this->drawPath(rt, clip, paint, viewMatrix, path, *strokeInfo);
return;
}
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -529,13 +530,13 @@ void GrContext::drawRect(GrRenderTarget* rt,
SkRect rtRect;
pipelineBuilder.getRenderTarget()->getBoundsRect(&rtRect);
SkRect clipSpaceRTRect = rtRect;
- bool checkClip = fClip && GrClip::kWideOpen_ClipType != fClip->clipType();
+ bool checkClip = GrClip::kWideOpen_ClipType != clip.clipType();
if (checkClip) {
- clipSpaceRTRect.offset(SkIntToScalar(this->getClip()->origin().fX),
- SkIntToScalar(this->getClip()->origin().fY));
+ clipSpaceRTRect.offset(SkIntToScalar(clip.origin().fX),
+ SkIntToScalar(clip.origin().fY));
}
// Does the clip contain the entire RT?
- if (!checkClip || fClip->clipStack()->quickContains(clipSpaceRTRect)) {
+ if (!checkClip || clip.quickContains(clipSpaceRTRect)) {
SkMatrix invM;
if (!viewMatrix.invert(&invM)) {
return;
@@ -634,6 +635,7 @@ void GrContext::drawRect(GrRenderTarget* rt,
}
void GrContext::drawNonAARectToRect(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkRect& rectToDraw,
@@ -641,7 +643,7 @@ void GrContext::drawNonAARectToRect(GrRenderTarget* rt,
const SkMatrix* localMatrix) {
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -681,6 +683,7 @@ static const GrGeometryProcessor* set_vertex_attributes(const SkPoint* texCoords
}
void GrContext::drawVertices(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
GrPrimitiveType primitiveType,
@@ -694,7 +697,7 @@ void GrContext::drawVertices(GrRenderTarget* rt,
GrPipelineBuilder pipelineBuilder;
GrDrawTarget::AutoReleaseGeometry geo; // must be inside AutoCheckFlush scope
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -743,6 +746,7 @@ void GrContext::drawVertices(GrRenderTarget* rt,
///////////////////////////////////////////////////////////////////////////////
void GrContext::drawRRect(GrRenderTarget*rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkRRect& rrect,
@@ -754,13 +758,13 @@ void GrContext::drawRRect(GrRenderTarget*rt,
if (strokeInfo.isDashed()) {
SkPath path;
path.addRRect(rrect);
- this->drawPath(rt, paint, viewMatrix, path, strokeInfo);
+ this->drawPath(rt, clip, paint, viewMatrix, path, strokeInfo);
return;
}
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -787,6 +791,7 @@ void GrContext::drawRRect(GrRenderTarget*rt,
///////////////////////////////////////////////////////////////////////////////
void GrContext::drawDRRect(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkRRect& outer,
@@ -797,7 +802,7 @@ void GrContext::drawDRRect(GrRenderTarget* rt,
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
GR_CREATE_TRACE_MARKER("GrContext::drawDRRect", target);
@@ -822,7 +827,8 @@ void GrContext::drawDRRect(GrRenderTarget* rt,
///////////////////////////////////////////////////////////////////////////////
-void GrContext::drawOval(GrRenderTarget*rt,
+void GrContext::drawOval(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkRect& oval,
@@ -834,13 +840,13 @@ void GrContext::drawOval(GrRenderTarget*rt,
if (strokeInfo.isDashed()) {
SkPath path;
path.addOval(oval);
- this->drawPath(rt, paint, viewMatrix, path, strokeInfo);
+ this->drawPath(rt, clip, paint, viewMatrix, path, strokeInfo);
return;
}
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -918,6 +924,7 @@ static bool is_nested_rects(GrDrawTarget* target,
}
void GrContext::drawPath(GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint& paint,
const SkMatrix& viewMatrix,
const SkPath& path,
@@ -925,7 +932,7 @@ void GrContext::drawPath(GrRenderTarget* rt,
if (path.isEmpty()) {
if (path.isInverseFillType()) {
- this->drawPaint(rt, paint, viewMatrix);
+ this->drawPaint(rt, clip, paint, viewMatrix);
}
return;
}
@@ -936,7 +943,7 @@ void GrContext::drawPath(GrRenderTarget* rt,
if (path.isLine(pts)) {
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -953,11 +960,11 @@ void GrContext::drawPath(GrRenderTarget* rt,
GrStrokeInfo newStrokeInfo(strokeInfo, false);
SkStrokeRec* stroke = newStrokeInfo.getStrokeRecPtr();
if (SkDashPath::FilterDashPath(effectPath.init(), path, stroke, NULL, info)) {
- this->drawPath(rt, paint, viewMatrix, *effectPath.get(), newStrokeInfo);
+ this->drawPath(rt, clip, paint, viewMatrix, *effectPath.get(), newStrokeInfo);
return;
}
- this->drawPath(rt, paint, viewMatrix, path, newStrokeInfo);
+ this->drawPath(rt, clip, paint, viewMatrix, path, newStrokeInfo);
return;
}
@@ -968,7 +975,7 @@ void GrContext::drawPath(GrRenderTarget* rt,
// OK.
AutoCheckFlush acf(this);
GrPipelineBuilder pipelineBuilder;
- GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, &paint, &acf);
+ GrDrawTarget* target = this->prepareToDraw(&pipelineBuilder, rt, clip, &paint, &acf);
if (NULL == target) {
return;
}
@@ -1197,7 +1204,10 @@ bool GrContext::writeSurfacePixels(GrSurface* surface,
// drawing a rect to the render target.
// The bracket ensures we pop the stack if we wind up flushing below.
{
- GrDrawTarget* drawTarget = this->prepareToDraw(NULL, NULL, NULL, NULL);
+ GrDrawTarget* drawTarget = this->prepareToDraw();
+ if (!drawTarget) {
+ return false;
+ }
GrDrawTarget::AutoGeometryPush agp(drawTarget);
GrPipelineBuilder pipelineBuilder;
@@ -1383,7 +1393,7 @@ void GrContext::discardRenderTarget(GrRenderTarget* renderTarget) {
SkASSERT(renderTarget);
ASSERT_OWNED_RESOURCE(renderTarget);
AutoCheckFlush acf(this);
- GrDrawTarget* target = this->prepareToDraw(NULL, NULL, NULL, NULL);
+ GrDrawTarget* target = this->prepareToDraw();
if (NULL == target) {
return;
}
@@ -1401,7 +1411,7 @@ void GrContext::copySurface(GrSurface* dst, GrSurface* src, const SkIRect& srcRe
// Since we're going to the draw target and not GPU, no need to check kNoFlush
// here.
- GrDrawTarget* target = this->prepareToDraw(NULL, NULL, NULL, NULL);
+ GrDrawTarget* target = this->prepareToDraw();
if (NULL == target) {
return;
}
@@ -1420,16 +1430,22 @@ void GrContext::flushSurfaceWrites(GrSurface* surface) {
GrDrawTarget* GrContext::prepareToDraw(GrPipelineBuilder* pipelineBuilder,
GrRenderTarget* rt,
+ const GrClip& clip,
const GrPaint* paint,
const AutoCheckFlush* acf) {
if (NULL == fGpu) {
return NULL;
}
- if (pipelineBuilder) {
- ASSERT_OWNED_RESOURCE(rt);
- SkASSERT(rt && paint && acf);
- pipelineBuilder->setFromPaint(*paint, rt, fClip);
+ ASSERT_OWNED_RESOURCE(rt);
+ SkASSERT(rt && paint && acf);
+ pipelineBuilder->setFromPaint(*paint, rt, clip);
+ return fDrawBuffer;
+}
+
+GrDrawTarget* GrContext::prepareToDraw() {
+ if (NULL == fGpu) {
+ return NULL;
}
return fDrawBuffer;
}
@@ -1513,7 +1529,7 @@ void GrContext::setupDrawBuffer() {
}
GrDrawTarget* GrContext::getTextTarget() {
- return this->prepareToDraw(NULL, NULL, NULL, NULL);
+ return this->prepareToDraw();
}
const GrIndexBuffer* GrContext::getQuadIndexBuffer() const {

Powered by Google App Engine
This is Rietveld 408576698