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
This commit is contained in:
parent
24a9bd711a
commit
0152d731e0
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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,7 +99,7 @@ private:
|
||||
// result (i.e., right size & format)
|
||||
GrTexture* createTexture();
|
||||
|
||||
GrContext* fContext;
|
||||
GrTextureProvider* fTexProvider;
|
||||
SkMatrix fMatrix;
|
||||
SkAutoPixmapStorage fPixels;
|
||||
SkDraw fDraw;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user