Index: src/gpu/GrClipMaskManager.cpp |
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp |
index 9eaf415cce6d9b897b1022e3fe46609cb5a7bd2b..3168424cf8715a998b0f0aec94655d9021143b43 100644 |
--- a/src/gpu/GrClipMaskManager.cpp |
+++ b/src/gpu/GrClipMaskManager.cpp |
@@ -20,6 +20,7 @@ |
#include "GrSWMaskHelper.h" |
#include "SkRasterClip.h" |
#include "SkTLazy.h" |
+#include "batches/GrRectBatchFactory.h" |
#include "effects/GrConvexPolyEffect.h" |
#include "effects/GrPorterDuffXferProcessor.h" |
#include "effects/GrRRectEffect.h" |
@@ -47,6 +48,16 @@ static const GrFragmentProcessor* create_fp_for_mask(GrTexture* result, const Sk |
kDevice_GrCoordSet); |
} |
robertphillips
2016/01/13 20:17:07
Didn't we add something just like this in the prio
|
+static void draw_non_aa_rect(GrDrawTarget* drawTarget, |
+ const GrPipelineBuilder& pipelineBuilder, |
+ GrColor color, |
+ const SkMatrix& viewMatrix, |
+ const SkRect& rect) { |
+ SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateNonAAFill(color, viewMatrix, rect, |
+ nullptr, nullptr)); |
+ drawTarget->drawBatch(pipelineBuilder, batch); |
+} |
+ |
// Does the path in 'element' require SW rendering? If so, return true (and, |
// optionally, set 'prOut' to NULL. If not, return false (and, optionally, set |
// 'prOut' to the non-SW path renderer that will do the job). |
@@ -506,20 +517,24 @@ bool GrClipMaskManager::drawElement(GrPipelineBuilder* pipelineBuilder, |
case Element::kEmpty_Type: |
SkDEBUGFAIL("Should never get here with an empty element."); |
break; |
- case Element::kRect_Type: |
+ case Element::kRect_Type: { |
// TODO: Do rects directly to the accumulator using a aa-rect GrProcessor that covers |
// the entire mask bounds and writes 0 outside the rect. |
if (element->isAA()) { |
SkRect devRect = element->getRect(); |
viewMatrix.mapRect(&devRect); |
- fDrawTarget->drawAARect(*pipelineBuilder, color, viewMatrix, |
- element->getRect(), devRect); |
+ SkAutoTUnref<GrDrawBatch> batch( |
+ GrRectBatchFactory::CreateAAFill(color, viewMatrix, element->getRect(), |
+ devRect)); |
+ |
+ fDrawTarget->drawBatch(*pipelineBuilder, batch); |
} else { |
- fDrawTarget->drawNonAARect(*pipelineBuilder, color, viewMatrix, |
- element->getRect()); |
+ draw_non_aa_rect(fDrawTarget, *pipelineBuilder, color, viewMatrix, |
+ element->getRect()); |
} |
return true; |
+ } |
default: { |
SkPath path; |
element->asPath(&path); |
@@ -691,8 +706,8 @@ GrTexture* GrClipMaskManager::createAlphaClipMask(int32_t elementsGenID, |
backgroundPipelineBuilder.setStencil(kDrawOutsideElement); |
// The color passed in here does not matter since the coverageSetOpXP won't read it. |
- fDrawTarget->drawNonAARect(backgroundPipelineBuilder, GrColor_WHITE, translate, |
- clipSpaceIBounds); |
+ draw_non_aa_rect(fDrawTarget, backgroundPipelineBuilder, GrColor_WHITE, translate, |
+ SkRect::Make(clipSpaceIBounds)); |
} |
} else { |
GrPipelineBuilder pipelineBuilder; |
@@ -831,11 +846,8 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt, |
if (Element::kRect_Type == element->getType()) { |
*pipelineBuilder.stencil() = gDrawToStencil; |
- // We need this AGP until everything is in GrBatch |
- fDrawTarget->drawNonAARect(pipelineBuilder, |
- GrColor_WHITE, |
- viewMatrix, |
- element->getRect()); |
+ draw_non_aa_rect(fDrawTarget, pipelineBuilder, GrColor_WHITE, viewMatrix, |
+ element->getRect()); |
} else { |
if (!clipPath.isEmpty()) { |
if (canRenderDirectToStencil) { |
@@ -873,11 +885,8 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt, |
if (canDrawDirectToClip) { |
if (Element::kRect_Type == element->getType()) { |
- // We need this AGP until everything is in GrBatch |
- fDrawTarget->drawNonAARect(pipelineBuilder, |
- GrColor_WHITE, |
- viewMatrix, |
- element->getRect()); |
+ draw_non_aa_rect(fDrawTarget, pipelineBuilder, GrColor_WHITE, viewMatrix, |
+ element->getRect()); |
} else { |
GrPathRenderer::DrawPathArgs args; |
args.fTarget = fDrawTarget; |
@@ -893,10 +902,8 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt, |
} else { |
// The view matrix is setup to do clip space -> stencil space translation, so |
// draw rect in clip space. |
- fDrawTarget->drawNonAARect(pipelineBuilder, |
- GrColor_WHITE, |
- viewMatrix, |
- SkRect::Make(clipSpaceIBounds)); |
+ draw_non_aa_rect(fDrawTarget, pipelineBuilder, GrColor_WHITE, viewMatrix, |
+ SkRect::Make(clipSpaceIBounds)); |
} |
} |
} |