Chromium Code Reviews| Index: src/gpu/GrDrawContext.cpp |
| diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp |
| index 48242e278f079dbedda890a360f69a1a8f33c0f3..c56c72c2e3f97b507866f1b461c4160b451dde31 100644 |
| --- a/src/gpu/GrDrawContext.cpp |
| +++ b/src/gpu/GrDrawContext.cpp |
| @@ -616,12 +616,12 @@ void GrDrawContext::fillRectToRect(const GrClip& clip, |
| } |
| AutoCheckFlush acf(fDrawingManager); |
| - SkAutoTUnref<GrDrawBatch> batch; |
| bool useHWAA; |
| if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
| - batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), croppedLocalRect, |
| - paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA)); |
| + SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), |
| + croppedLocalRect, paint.isAntiAlias(), |
| + fInstancedPipelineInfo, &useHWAA)); |
| if (batch) { |
| GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| @@ -629,20 +629,33 @@ void GrDrawContext::fillRectToRect(const GrClip& clip, |
| } |
| } |
| - 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)); |
| - if (batch) { |
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| - this->drawBatch(pipelineBuilder, clip, batch); |
| - return; |
| - } |
| - } else { |
| + if (!should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { |
| this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, &croppedLocalRect, |
| nullptr, nullptr); |
| + return; |
| + } |
| + |
| + if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
| + SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), |
| + viewMatrix, |
| + croppedRect, |
| + croppedLocalRect)); |
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| + this->drawBatch(pipelineBuilder, clip, batch); |
| + return; |
| + } |
| + |
| + SkMatrix viewAndUnLocalMatrix; |
| + if (!viewAndUnLocalMatrix.setRectToRect(localRect, rectToDraw, SkMatrix::kFill_ScaleToFit)) { |
| + SkFAIL("Bogus local rect."); // I'm hoping this is illegal and we can just bail? |
|
csmartdalton
2016/07/26 20:28:28
Is an empty local rect legal?
bsalomon
2016/07/26 20:33:03
I don't think so. Seems ok to bail to me.
|
| + return; |
| } |
| + viewAndUnLocalMatrix.postConcat(viewMatrix); |
| + SkPath path; |
| + path.setIsVolatile(true); |
| + path.addRect(localRect); |
| + this->internalDrawPath(clip, paint, viewAndUnLocalMatrix, path, GrStyle()); |
| } |
| void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |
| @@ -661,12 +674,12 @@ void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |
| } |
| AutoCheckFlush acf(fDrawingManager); |
| - SkAutoTUnref<GrDrawBatch> batch; |
| bool useHWAA; |
| if (InstancedRendering* ir = this->getDrawTarget()->instancedRendering()) { |
| - batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), localMatrix, |
| - paint.isAntiAlias(), fInstancedPipelineInfo, &useHWAA)); |
| + SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), |
| + localMatrix, paint.isAntiAlias(), |
| + fInstancedPipelineInfo, &useHWAA)); |
| if (batch) { |
| GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| @@ -674,17 +687,32 @@ void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |
| } |
| } |
| - 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)); |
| - GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| - this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| - } else { |
| + if (!should_apply_coverage_aa(paint, fRenderTarget.get(), &useHWAA)) { |
| this->drawNonAAFilledRect(clip, paint, viewMatrix, croppedRect, nullptr, |
| &localMatrix, nullptr); |
| + return; |
| } |
| + if (view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |
| + SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, |
| + localMatrix, croppedRect)); |
| + GrPipelineBuilder pipelineBuilder(paint, useHWAA); |
| + this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); |
| + return; |
| + } |
| + |
| + SkMatrix viewAndUnLocalMatrix; |
| + if (!localMatrix.invert(&viewAndUnLocalMatrix)) { |
| + SkFAIL("Bogus local matrix."); // I'm hoping this is illegal and we can just bail? |
|
csmartdalton
2016/07/26 20:28:28
Is a degenerate local matrix legal?
bsalomon
2016/07/26 20:33:03
I think it's ok to bail.
|
| + return; |
| + } |
| + viewAndUnLocalMatrix.postConcat(viewMatrix); |
| + |
| + SkPath path; |
| + path.setIsVolatile(true); |
| + path.addRect(rectToDraw); |
| + path.transform(localMatrix); |
| + this->internalDrawPath(clip, paint, viewAndUnLocalMatrix, path, GrStyle()); |
| } |
| void GrDrawContext::drawVertices(const GrClip& clip, |