diff options
author | robertphillips <robertphillips@google.com> | 2016-05-20 06:38:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-20 06:38:43 -0700 |
commit | 0152d731e0be311fda29467086d2c83629601aa1 (patch) | |
tree | c447158a2d955c73791d647de1d97d1e04e7732c | |
parent | 24a9bd711a74450d7c76c504acbadef384293dfc (diff) |
GrSWMaskHelper and GrSoftwarePathRenderer only need the textureProvider (not GrContext)
This is split out of: https://codereview.chromium.org/1988923002/ (Declassify GrClipMaskManager and Remove GrRenderTarget and GrDrawTarget from GrPipelineBuilder)
BUG=skia:
Review-Url: https://codereview.chromium.org/1993403002
-rw-r--r-- | src/gpu/GrClipMaskManager.cpp | 11 | ||||
-rw-r--r-- | src/gpu/GrClipMaskManager.h | 9 | ||||
-rw-r--r-- | src/gpu/GrDrawingManager.cpp | 2 | ||||
-rw-r--r-- | src/gpu/GrSWMaskHelper.cpp | 6 | ||||
-rw-r--r-- | src/gpu/GrSWMaskHelper.h | 14 | ||||
-rw-r--r-- | src/gpu/GrSoftwarePathRenderer.cpp | 24 | ||||
-rw-r--r-- | src/gpu/GrSoftwarePathRenderer.h | 9 |
7 files changed, 33 insertions, 42 deletions
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp index 81b6fe8614..df58a9251f 100644 --- a/src/gpu/GrClipMaskManager.cpp +++ b/src/gpu/GrClipMaskManager.cpp @@ -384,7 +384,7 @@ bool GrClipMaskManager::setupClipping(const GrPipelineBuilder& pipelineBuilder, if (UseSWOnlyPath(this->getContext(), pipelineBuilder, rt, clipToMaskOffset, elements)) { // The clip geometry is complex enough that it will be more efficient to create it // entirely in software - result = CreateSoftwareClipMask(this->getContext(), + result = CreateSoftwareClipMask(this->getContext()->textureProvider(), genID, initialState, elements, @@ -791,7 +791,7 @@ bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt, //////////////////////////////////////////////////////////////////////////////// sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask( - GrContext* context, + GrTextureProvider* texProvider, int32_t elementsGenID, GrReducedClip::InitialState initialState, const GrReducedClip::ElementList& elements, @@ -799,8 +799,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask( const SkIRect& clipSpaceIBounds) { GrUniqueKey key; GetClipMaskKey(elementsGenID, clipSpaceIBounds, &key); - GrResourceProvider* resourceProvider = context->resourceProvider(); - if (GrTexture* texture = resourceProvider->findAndRefTextureByUniqueKey(key)) { + if (GrTexture* texture = texProvider->findAndRefTextureByUniqueKey(key)) { return sk_sp<GrTexture>(texture); } @@ -808,7 +807,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask( // the top left corner of the resulting rect to the top left of the texture. SkIRect maskSpaceIBounds = SkIRect::MakeWH(clipSpaceIBounds.width(), clipSpaceIBounds.height()); - GrSWMaskHelper helper(context); + GrSWMaskHelper helper(texProvider); // Set the matrix so that rendered clip elements are transformed to mask space from clip // space. @@ -857,7 +856,7 @@ sk_sp<GrTexture> GrClipMaskManager::CreateSoftwareClipMask( desc.fHeight = clipSpaceIBounds.height(); desc.fConfig = kAlpha_8_GrPixelConfig; - sk_sp<GrTexture> result(context->resourceProvider()->createApproxTexture(desc, 0)); + sk_sp<GrTexture> result(texProvider->createApproxTexture(desc)); if (!result) { return nullptr; } diff --git a/src/gpu/GrClipMaskManager.h b/src/gpu/GrClipMaskManager.h index d546a76136..f7f7e5c0e1 100644 --- a/src/gpu/GrClipMaskManager.h +++ b/src/gpu/GrClipMaskManager.h @@ -9,12 +9,7 @@ #include "GrPipelineBuilder.h" #include "GrReducedClip.h" -#include "GrTexture.h" #include "SkClipStack.h" -#include "SkDeque.h" -#include "SkPath.h" -#include "SkRefCnt.h" -#include "SkTLList.h" #include "SkTypes.h" class GrAppliedClip; @@ -24,7 +19,7 @@ class GrPathRenderer; class GrPathRendererChain; class GrResourceProvider; class GrTexture; -class SkPath; +class GrTextureProvider; /** * The clip mask creator handles the generation of the clip mask. If anti @@ -93,7 +88,7 @@ private: const SkIRect& clipSpaceIBounds); // Similar to createAlphaClipMask but it rasterizes in SW and uploads to the result texture. - static sk_sp<GrTexture> CreateSoftwareClipMask(GrContext*, + static sk_sp<GrTexture> CreateSoftwareClipMask(GrTextureProvider*, int32_t elementsGenID, GrReducedClip::InitialState initialState, const GrReducedClip::ElementList& elements, diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp index 1b01b7afda..ea5c18bf79 100644 --- a/src/gpu/GrDrawingManager.cpp +++ b/src/gpu/GrDrawingManager.cpp @@ -151,7 +151,7 @@ GrPathRenderer* GrDrawingManager::getPathRenderer(const GrPathRenderer::CanDrawP GrPathRenderer* pr = fPathRendererChain->getPathRenderer(args, drawType, stencilSupport); if (!pr && allowSW) { if (!fSoftwarePathRenderer) { - fSoftwarePathRenderer = new GrSoftwarePathRenderer(fContext); + fSoftwarePathRenderer = new GrSoftwarePathRenderer(fContext->textureProvider()); } pr = fSoftwarePathRenderer; } diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp index 4486bb079c..849a9338ed 100644 --- a/src/gpu/GrSWMaskHelper.cpp +++ b/src/gpu/GrSWMaskHelper.cpp @@ -104,7 +104,7 @@ GrTexture* GrSWMaskHelper::createTexture() { desc.fHeight = fPixels.height(); desc.fConfig = kAlpha_8_GrPixelConfig; - return fContext->textureProvider()->createApproxTexture(desc); + return fTexProvider->createApproxTexture(desc); } /** @@ -134,13 +134,13 @@ void GrSWMaskHelper::toSDF(unsigned char* sdf) { * and uploads the result to a scratch texture. Returns the resulting * texture on success; nullptr on failure. */ -GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context, +GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrTextureProvider* texProvider, const SkPath& path, const GrStyle& style, const SkIRect& resultBounds, bool antiAlias, const SkMatrix* matrix) { - GrSWMaskHelper helper(context); + GrSWMaskHelper helper(texProvider); if (!helper.init(resultBounds, matrix)) { return nullptr; diff --git a/src/gpu/GrSWMaskHelper.h b/src/gpu/GrSWMaskHelper.h index b329dd627e..355379e697 100644 --- a/src/gpu/GrSWMaskHelper.h +++ b/src/gpu/GrSWMaskHelper.h @@ -19,7 +19,7 @@ #include "SkTypes.h" class GrClip; -class GrContext; +class GrTextureProvider; class GrTexture; class SkPath; class SkStrokeRec; @@ -41,7 +41,7 @@ class GrDrawTarget; */ class GrSWMaskHelper : SkNoncopyable { public: - GrSWMaskHelper(GrContext* context) : fContext(context) { } + GrSWMaskHelper(GrTextureProvider* texProvider) : fTexProvider(texProvider) { } // set up the internal state in preparation for draws. Since many masks // may be accumulated in the helper during creation, "resultBounds" @@ -69,7 +69,7 @@ public: // Canonical usage utility that draws a single path and uploads it // to the GPU. The result is returned. - static GrTexture* DrawPathMaskToTexture(GrContext* context, + static GrTexture* DrawPathMaskToTexture(GrTextureProvider*, const SkPath& path, const GrStyle& style, const SkIRect& resultBounds, @@ -99,11 +99,11 @@ private: // result (i.e., right size & format) GrTexture* createTexture(); - GrContext* fContext; - SkMatrix fMatrix; + GrTextureProvider* fTexProvider; + SkMatrix fMatrix; SkAutoPixmapStorage fPixels; - SkDraw fDraw; - SkRasterClip fRasterClip; + SkDraw fDraw; + SkRasterClip fRasterClip; typedef SkNoncopyable INHERITED; }; diff --git a/src/gpu/GrSoftwarePathRenderer.cpp b/src/gpu/GrSoftwarePathRenderer.cpp index d964e1f42f..aefaf27308 100644 --- a/src/gpu/GrSoftwarePathRenderer.cpp +++ b/src/gpu/GrSoftwarePathRenderer.cpp @@ -6,13 +6,13 @@ */ #include "GrSoftwarePathRenderer.h" -#include "GrContext.h" #include "GrSWMaskHelper.h" +#include "GrTextureProvider.h" #include "batches/GrRectBatchFactory.h" //////////////////////////////////////////////////////////////////////////////// bool GrSoftwarePathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { - return SkToBool(fContext); + return SkToBool(fTexProvider); } namespace { @@ -21,22 +21,17 @@ namespace { // gets device coord bounds of path (not considering the fill) and clip. The // path bounds will be a subset of the clip bounds. returns false if // path bounds would be empty. -bool get_path_and_clip_bounds(const GrPipelineBuilder* pipelineBuilder, +bool get_path_and_clip_bounds(int width, int height, const GrClip& clip, const SkPath& path, const SkMatrix& matrix, SkIRect* devPathBounds, SkIRect* devClipBounds) { // compute bounds as intersection of rt size, clip, and path - const GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); - if (nullptr == rt) { - return false; - } - - clip.getConservativeBounds(rt->width(), rt->height(), devClipBounds); + clip.getConservativeBounds(width, height, devClipBounds); if (devClipBounds->isEmpty()) { - *devPathBounds = SkIRect::MakeWH(rt->width(), rt->height()); + *devPathBounds = SkIRect::MakeWH(width, height); return false; } @@ -112,12 +107,15 @@ void draw_around_inv_path(GrDrawTarget* target, // return true on success; false on failure bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) { GR_AUDIT_TRAIL_AUTO_FRAME(args.fTarget->getAuditTrail(), "GrSoftwarePathRenderer::onDrawPath"); - if (nullptr == fContext) { + if (!fTexProvider || !args.fPipelineBuilder->getRenderTarget()) { return false; } + const int width = args.fPipelineBuilder->getRenderTarget()->width(); + const int height = args.fPipelineBuilder->getRenderTarget()->height(); + SkIRect devPathBounds, devClipBounds; - if (!get_path_and_clip_bounds(args.fPipelineBuilder, *args.fClip, *args.fPath, + if (!get_path_and_clip_bounds(width, height, *args.fClip, *args.fPath, *args.fViewMatrix, &devPathBounds, &devClipBounds)) { if (args.fPath->isInverseFillType()) { draw_around_inv_path(args.fTarget, args.fPipelineBuilder, *args.fClip, args.fColor, @@ -127,7 +125,7 @@ bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) { } SkAutoTUnref<GrTexture> texture( - GrSWMaskHelper::DrawPathMaskToTexture(fContext, *args.fPath, *args.fStyle, + GrSWMaskHelper::DrawPathMaskToTexture(fTexProvider, *args.fPath, *args.fStyle, devPathBounds, args.fAntiAlias, args.fViewMatrix)); if (nullptr == texture) { diff --git a/src/gpu/GrSoftwarePathRenderer.h b/src/gpu/GrSoftwarePathRenderer.h index 578911954c..edc47ce2c9 100644 --- a/src/gpu/GrSoftwarePathRenderer.h +++ b/src/gpu/GrSoftwarePathRenderer.h @@ -10,7 +10,7 @@ #include "GrPathRenderer.h" -class GrContext; +class GrTextureProvider; /** * This class uses the software side to render a path to an SkBitmap and @@ -18,9 +18,8 @@ class GrContext; */ class GrSoftwarePathRenderer : public GrPathRenderer { public: - GrSoftwarePathRenderer(GrContext* context) - : fContext(context) { - } + GrSoftwarePathRenderer(GrTextureProvider* texProvider) : fTexProvider(texProvider) { } + private: StencilSupport onGetStencilSupport(const SkPath&) const override { return GrPathRenderer::kNoSupport_StencilSupport; @@ -31,7 +30,7 @@ private: bool onDrawPath(const DrawPathArgs&) override; private: - GrContext* fContext; + GrTextureProvider* fTexProvider; typedef GrPathRenderer INHERITED; }; |