Index: src/gpu/GrDrawContext.cpp |
diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp |
index 8f012cd65840177ecade6979dec9ff584bd31239..a86e01e72b385328b069f84f412f43bfcc58e604 100644 |
--- a/src/gpu/GrDrawContext.cpp |
+++ b/src/gpu/GrDrawContext.cpp |
@@ -270,70 +270,17 @@ |
} |
} |
-// Attempts to crop a rect and optional local rect to the clip boundaries. |
-// Returns false if the draw can be skipped entirely. |
-static bool crop_filled_rect(const GrRenderTarget* rt, const GrClip& clip, |
- const SkMatrix& viewMatrix, SkRect* rect, |
- SkRect* localRect = nullptr) { |
- if (!viewMatrix.rectStaysRect()) { |
- return true; |
- } |
- |
- SkMatrix inverseViewMatrix; |
- if (!viewMatrix.invert(&inverseViewMatrix)) { |
- return false; |
- } |
- |
- SkIRect clipDevBounds; |
- SkRect clipBounds; |
- SkASSERT(inverseViewMatrix.rectStaysRect()); |
- |
- clip.getConservativeBounds(rt->width(), rt->height(), &clipDevBounds); |
- inverseViewMatrix.mapRect(&clipBounds, SkRect::Make(clipDevBounds)); |
- |
- if (localRect) { |
- if (!rect->intersects(clipBounds)) { |
- return false; |
- } |
- const SkScalar dx = localRect->width() / rect->width(); |
- const SkScalar dy = localRect->height() / rect->height(); |
- if (clipBounds.fLeft > rect->fLeft) { |
- localRect->fLeft += (clipBounds.fLeft - rect->fLeft) * dx; |
- rect->fLeft = clipBounds.fLeft; |
- } |
- if (clipBounds.fTop > rect->fTop) { |
- localRect->fTop += (clipBounds.fTop - rect->fTop) * dy; |
- rect->fTop = clipBounds.fTop; |
- } |
- if (clipBounds.fRight < rect->fRight) { |
- localRect->fRight -= (rect->fRight - clipBounds.fRight) * dx; |
- rect->fRight = clipBounds.fRight; |
- } |
- if (clipBounds.fBottom < rect->fBottom) { |
- localRect->fBottom -= (rect->fBottom - clipBounds.fBottom) * dy; |
- rect->fBottom = clipBounds.fBottom; |
- } |
- return true; |
- } |
- |
- return rect->intersect(clipBounds); |
-} |
- |
bool GrDrawContext::drawFilledRect(const GrClip& clip, |
const GrPaint& paint, |
const SkMatrix& viewMatrix, |
const SkRect& rect, |
const GrUserStencilSettings* ss) { |
- SkRect croppedRect = rect; |
- if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect)) { |
- return true; |
- } |
SkAutoTUnref<GrDrawBatch> batch; |
bool useHWAA; |
if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
- batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), |
+ batch.reset(ir->recordRect(rect, viewMatrix, paint.getColor(), |
paint.isAntiAlias(), fInstancedPipelineInfo, |
&useHWAA)); |
if (batch) { |
@@ -350,10 +297,10 @@ |
// The fill path can handle rotation but not skew. |
if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
SkRect devBoundRect; |
- viewMatrix.mapRect(&devBoundRect, croppedRect); |
+ viewMatrix.mapRect(&devBoundRect, rect); |
batch.reset(GrRectBatchFactory::CreateAAFill(paint.getColor(), viewMatrix, |
- croppedRect, devBoundRect)); |
+ rect, devBoundRect)); |
if (batch) { |
GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
if (ss) { |
@@ -364,7 +311,7 @@ |
} |
} |
} else { |
- this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, nullptr, nullptr, ss); |
+ this->drawNonAAFilledRect(clip, paint, viewMatrix, rect, nullptr, nullptr, ss); |
return true; |
} |
@@ -575,18 +522,12 @@ |
SkDEBUGCODE(this->validate();) |
GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect"); |
- SkRect croppedRect = rectToDraw; |
- SkRect croppedLocalRect = localRect; |
- if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect, &croppedLocalRect)) { |
- return; |
- } |
- |
AutoCheckFlush acf(fDrawingManager); |
SkAutoTUnref<GrDrawBatch> batch; |
bool useHWAA; |
if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
- batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), croppedLocalRect, |
+ batch.reset(ir->recordRect(rectToDraw, viewMatrix, paint.getColor(), localRect, |
paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA)); |
if (batch) { |
GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
@@ -597,15 +538,15 @@ |
if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && |
view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
- batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), viewMatrix, |
- croppedRect, croppedLocalRect)); |
+ batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), viewMatrix, rectToDraw, |
+ localRect)); |
if (batch) { |
GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
this->drawBatch(pipelineBuilder, clip, batch); |
return; |
} |
} else { |
- this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, &croppedLocalRect, |
+ this->drawNonAAFilledRect(clip, paint, viewMatrix, rectToDraw, &localRect, |
nullptr, nullptr); |
} |
@@ -621,17 +562,12 @@ |
SkDEBUGCODE(this->validate();) |
GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatrix"); |
- SkRect croppedRect = rectToDraw; |
- if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect)) { |
- return; |
- } |
- |
AutoCheckFlush acf(fDrawingManager); |
SkAutoTUnref<GrDrawBatch> batch; |
bool useHWAA; |
if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
- batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), localMatrix, |
+ batch.reset(ir->recordRect(rectToDraw, viewMatrix, paint.getColor(), localMatrix, |
paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA)); |
if (batch) { |
GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
@@ -643,11 +579,11 @@ |
if (should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA) && |
view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, localMatrix, |
- croppedRect)); |
+ rectToDraw)); |
GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
} else { |
- this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, nullptr, |
+ this->drawNonAAFilledRect(clip, paint, viewMatrix, rectToDraw, nullptr, |
&localMatrix, nullptr); |
} |