diff options
author | 2016-07-18 14:56:06 -0700 | |
---|---|---|
committer | 2016-07-18 14:56:06 -0700 | |
commit | 640789d64bcce565856fde5bbfc845d56bb470c8 (patch) | |
tree | 6f7447bb26ddb6c564389d068499e6dee479ca8d /src/gpu | |
parent | 125845553bfa25ef86b059d01254148cae708b59 (diff) |
Push GrPipelineBuilder down to the drawBatch calls in the TextContext
This is split out of https://codereview.chromium.org/2092893003/ (Retract PipelineBuilder some more)
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2155983003
Review-Url: https://codereview.chromium.org/2155983003
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/text/GrAtlasTextBlob.cpp | 22 | ||||
-rw-r--r-- | src/gpu/text/GrAtlasTextBlob.h | 4 | ||||
-rw-r--r-- | src/gpu/text/GrStencilAndCoverTextContext.cpp | 21 | ||||
-rw-r--r-- | src/gpu/text/GrStencilAndCoverTextContext.h | 2 |
4 files changed, 22 insertions, 27 deletions
diff --git a/src/gpu/text/GrAtlasTextBlob.cpp b/src/gpu/text/GrAtlasTextBlob.cpp index 0ead354204..9ab9c1230d 100644 --- a/src/gpu/text/GrAtlasTextBlob.cpp +++ b/src/gpu/text/GrAtlasTextBlob.cpp @@ -302,9 +302,9 @@ inline GrDrawBatch* GrAtlasTextBlob::createBatch( } inline -void GrAtlasTextBlob::flushRun(GrDrawContext* dc, GrPipelineBuilder* pipelineBuilder, +void GrAtlasTextBlob::flushRun(GrDrawContext* dc, const GrPaint& grPaint, const GrClip& clip, int run, const SkMatrix& viewMatrix, SkScalar x, - SkScalar y, GrColor color, + SkScalar y, const SkPaint& skPaint, const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, GrBatchFontCache* cache) { @@ -315,12 +315,17 @@ void GrAtlasTextBlob::flushRun(GrDrawContext* dc, GrPipelineBuilder* pipelineBui continue; } + GrColor color = grPaint.getColor(); + SkAutoTUnref<GrDrawBatch> batch(this->createBatch(info, glyphCount, run, subRun, viewMatrix, x, y, color, skPaint, props, distanceAdjustTable, dc->isGammaCorrect(), cache)); - dc->drawBatch(*pipelineBuilder, clip, batch); + + GrPipelineBuilder pipelineBuilder(grPaint, dc->mustUseHWAA(grPaint)); + + dc->drawBatch(pipelineBuilder, clip, batch); } } @@ -419,10 +424,6 @@ void GrAtlasTextBlob::flushCached(GrContext* context, SkScalar x, SkScalar y) { // We loop through the runs of the blob, flushing each. If any run is too large, then we flush // it as paths - GrPipelineBuilder pipelineBuilder(grPaint, dc->mustUseHWAA(grPaint)); - - GrColor color = grPaint.getColor(); - SkTextBlobRunIterator it(blob); for (int run = 0; !it.done(); it.next(), run++) { if (fRuns[run].fDrawAsPaths) { @@ -430,7 +431,7 @@ void GrAtlasTextBlob::flushCached(GrContext* context, drawFilter, viewMatrix, clipBounds, x, y); continue; } - this->flushRun(dc, &pipelineBuilder, clip, run, viewMatrix, x, y, color, skPaint, props, + this->flushRun(dc, grPaint, clip, run, viewMatrix, x, y, skPaint, props, distanceAdjustTable, context->getBatchFontCache()); } @@ -448,11 +449,8 @@ void GrAtlasTextBlob::flushThrowaway(GrContext* context, const SkMatrix& viewMatrix, const SkIRect& clipBounds, SkScalar x, SkScalar y) { - GrPipelineBuilder pipelineBuilder(grPaint, dc->mustUseHWAA(grPaint)); - - GrColor color = grPaint.getColor(); for (int run = 0; run < fRunCount; run++) { - this->flushRun(dc, &pipelineBuilder, clip, run, viewMatrix, x, y, color, skPaint, props, + this->flushRun(dc, grPaint, clip, run, viewMatrix, x, y, skPaint, props, distanceAdjustTable, context->getBatchFontCache()); } diff --git a/src/gpu/text/GrAtlasTextBlob.h b/src/gpu/text/GrAtlasTextBlob.h index 63c8033322..f76d02644f 100644 --- a/src/gpu/text/GrAtlasTextBlob.h +++ b/src/gpu/text/GrAtlasTextBlob.h @@ -293,8 +293,8 @@ private: void appendLargeGlyph(GrGlyph* glyph, SkGlyphCache* cache, const SkGlyph& skGlyph, SkScalar x, SkScalar y, SkScalar scale, bool applyVM); - inline void flushRun(GrDrawContext* dc, GrPipelineBuilder* pipelineBuilder, const GrClip&, - int run, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, GrColor color, + inline void flushRun(GrDrawContext* dc, const GrPaint&, const GrClip&, + int run, const SkMatrix& viewMatrix, SkScalar x, SkScalar y, const SkPaint& skPaint, const SkSurfaceProps& props, const GrDistanceFieldAdjustTable* distanceAdjustTable, GrBatchFontCache* cache); diff --git a/src/gpu/text/GrStencilAndCoverTextContext.cpp b/src/gpu/text/GrStencilAndCoverTextContext.cpp index aba854d5d9..dd93025526 100644 --- a/src/gpu/text/GrStencilAndCoverTextContext.cpp +++ b/src/gpu/text/GrStencilAndCoverTextContext.cpp @@ -82,9 +82,8 @@ void GrStencilAndCoverTextContext::drawText(GrContext* context, GrDrawContext* d } else if (this->canDraw(skPaint, viewMatrix)) { if (skPaint.getTextSize() > 0) { TextRun run(skPaint); - GrPipelineBuilder pipelineBuilder(paint); run.setText(text, byteLength, x, y); - run.draw(context, dc, &pipelineBuilder, clip, paint.getColor(), viewMatrix, props, 0, 0, + run.draw(context, dc, paint, clip, paint.getColor(), viewMatrix, props, 0, 0, clipBounds, fFallbackTextContext, skPaint); } return; @@ -117,9 +116,8 @@ void GrStencilAndCoverTextContext::drawPosText(GrContext* context, GrDrawContext } else if (this->canDraw(skPaint, viewMatrix)) { if (skPaint.getTextSize() > 0) { TextRun run(skPaint); - GrPipelineBuilder pipelineBuilder(paint); run.setPosText(text, byteLength, pos, scalarsPerPosition, offset); - run.draw(context, dc, &pipelineBuilder, clip, paint.getColor(), viewMatrix, props, 0, 0, + run.draw(context, dc, paint, clip, paint.getColor(), viewMatrix, props, 0, 0, clipBounds, fFallbackTextContext, skPaint); } return; @@ -225,11 +223,10 @@ void GrStencilAndCoverTextContext::drawTextBlob(GrContext* context, GrDrawContex } const TextBlob& blob = this->findOrCreateTextBlob(skBlob, skPaint); - GrPipelineBuilder pipelineBuilder(paint); TextBlob::Iter iter(blob); for (TextRun* run = iter.get(); run; run = iter.next()) { - run->draw(context, dc, &pipelineBuilder, clip, paint.getColor(), viewMatrix, props, x, y, + run->draw(context, dc, paint, clip, paint.getColor(), viewMatrix, props, x, y, clipBounds, fFallbackTextContext, skPaint); run->releaseGlyphCache(); } @@ -596,7 +593,7 @@ inline void GrStencilAndCoverTextContext::TextRun::appendGlyph(const SkGlyph& gl void GrStencilAndCoverTextContext::TextRun::draw(GrContext* ctx, GrDrawContext* drawContext, - GrPipelineBuilder* pipelineBuilder, + const GrPaint& grPaint, const GrClip& clip, GrColor color, const SkMatrix& viewMatrix, @@ -609,8 +606,6 @@ void GrStencilAndCoverTextContext::TextRun::draw(GrContext* ctx, SkASSERT(drawContext->isStencilBufferMultisampled() || !fFont.isAntiAlias()); if (fInstanceData->count()) { - pipelineBuilder->setState(GrPipelineBuilder::kHWAntialias_Flag, fFont.isAntiAlias()); - static constexpr GrUserStencilSettings kCoverPass( GrUserStencilSettings::StaticInit< 0x0000, @@ -621,8 +616,6 @@ void GrStencilAndCoverTextContext::TextRun::draw(GrContext* ctx, 0xffff>() ); - pipelineBuilder->setUserStencil(&kCoverPass); - SkAutoTUnref<GrPathRange> glyphs(this->createGlyphs(ctx)); if (fLastDrawnGlyphsID != glyphs->getUniqueID()) { // Either this is the first draw or the glyphs object was purged since last draw. @@ -643,7 +636,11 @@ void GrStencilAndCoverTextContext::TextRun::draw(GrContext* ctx, GrPathRendering::kWinding_FillType, glyphs, fInstanceData, bounds)); - drawContext->drawBatch(*pipelineBuilder, clip, batch); + GrPipelineBuilder pipelineBuilder(grPaint); + pipelineBuilder.setState(GrPipelineBuilder::kHWAntialias_Flag, fFont.isAntiAlias()); + pipelineBuilder.setUserStencil(&kCoverPass); + + drawContext->drawBatch(pipelineBuilder, clip, batch); } if (fFallbackTextBlob) { diff --git a/src/gpu/text/GrStencilAndCoverTextContext.h b/src/gpu/text/GrStencilAndCoverTextContext.h index 64bcd4dfbe..d81cb7a00e 100644 --- a/src/gpu/text/GrStencilAndCoverTextContext.h +++ b/src/gpu/text/GrStencilAndCoverTextContext.h @@ -78,7 +78,7 @@ private: void setPosText(const char text[], size_t byteLength, const SkScalar pos[], int scalarsPerPosition, const SkPoint& offset); - void draw(GrContext*, GrDrawContext*, GrPipelineBuilder*, const GrClip&, GrColor, + void draw(GrContext*, GrDrawContext*, const GrPaint&, const GrClip&, GrColor, const SkMatrix&, const SkSurfaceProps&, SkScalar x, SkScalar y, const SkIRect& clipBounds, GrAtlasTextContext* fallbackTextContext, const SkPaint& originalSkPaint) const; |