diff options
Diffstat (limited to 'src/effects')
-rw-r--r-- | src/effects/GrCircleBlurFragmentProcessor.cpp | 16 | ||||
-rw-r--r-- | src/effects/GrCircleBlurFragmentProcessor.h | 2 | ||||
-rw-r--r-- | src/effects/SkBlurMaskFilter.cpp | 33 | ||||
-rw-r--r-- | src/effects/SkPerlinNoiseShader.cpp | 4 | ||||
-rw-r--r-- | src/effects/SkTableColorFilter.cpp | 14 | ||||
-rw-r--r-- | src/effects/gradients/SkGradientShader.cpp | 4 |
6 files changed, 43 insertions, 30 deletions
diff --git a/src/effects/GrCircleBlurFragmentProcessor.cpp b/src/effects/GrCircleBlurFragmentProcessor.cpp index 301eb27148..4b9ab26644 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.cpp +++ b/src/effects/GrCircleBlurFragmentProcessor.cpp @@ -260,7 +260,7 @@ static uint8_t* create_half_plane_profile(int profileWidth) { return profile; } -static sk_sp<GrTextureProxy> create_profile_texture(GrContext* context, +static sk_sp<GrTextureProxy> create_profile_texture(GrResourceProvider* resourceProvider, const SkRect& circle, float sigma, float* solidRadius, float* textureRadius) { @@ -299,7 +299,7 @@ static sk_sp<GrTextureProxy> create_profile_texture(GrContext* context, builder[0] = sigmaToCircleRRatioFixed; builder.finish(); - sk_sp<GrTextureProxy> blurProfile = context->resourceProvider()->findProxyByUniqueKey(key); + sk_sp<GrTextureProxy> blurProfile = resourceProvider->findProxyByUniqueKey(key); if (!blurProfile) { static constexpr int kProfileTextureWidth = 512; GrSurfaceDesc texDesc; @@ -317,13 +317,13 @@ static sk_sp<GrTextureProxy> create_profile_texture(GrContext* context, kProfileTextureWidth)); } - blurProfile = GrSurfaceProxy::MakeDeferred(*context->caps(), context->resourceProvider(), + blurProfile = GrSurfaceProxy::MakeDeferred(resourceProvider, texDesc, SkBudgeted::kYes, profile.get(), 0); if (!blurProfile) { return nullptr; } - context->resourceProvider()->assignUniqueKeyToProxy(key, blurProfile.get()); + resourceProvider->assignUniqueKeyToProxy(key, blurProfile.get()); } return blurProfile; @@ -331,16 +331,16 @@ static sk_sp<GrTextureProxy> create_profile_texture(GrContext* context, ////////////////////////////////////////////////////////////////////////////// -sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(GrContext* context, +sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::Make(GrResourceProvider* resourceProvider, const SkRect& circle, float sigma) { float solidRadius; float textureRadius; - sk_sp<GrTextureProxy> profile(create_profile_texture(context, circle, sigma, + sk_sp<GrTextureProxy> profile(create_profile_texture(resourceProvider, circle, sigma, &solidRadius, &textureRadius)); if (!profile) { return nullptr; } - return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(context->resourceProvider(), + return sk_sp<GrFragmentProcessor>(new GrCircleBlurFragmentProcessor(resourceProvider, circle, textureRadius, solidRadius, std::move(profile))); @@ -355,7 +355,7 @@ sk_sp<GrFragmentProcessor> GrCircleBlurFragmentProcessor::TestCreate(GrProcessor SkScalar wh = d->fRandom->nextRangeScalar(100.f, 1000.f); SkScalar sigma = d->fRandom->nextRangeF(1.f,10.f); SkRect circle = SkRect::MakeWH(wh, wh); - return GrCircleBlurFragmentProcessor::Make(d->context(), circle, sigma); + return GrCircleBlurFragmentProcessor::Make(d->context()->resourceProvider(), circle, sigma); } #endif diff --git a/src/effects/GrCircleBlurFragmentProcessor.h b/src/effects/GrCircleBlurFragmentProcessor.h index 68d88cf2e0..c6cf3ba923 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.h +++ b/src/effects/GrCircleBlurFragmentProcessor.h @@ -34,7 +34,7 @@ public: return str; } - static sk_sp<GrFragmentProcessor> Make(GrContext*, const SkRect& circle, float sigma); + static sk_sp<GrFragmentProcessor> Make(GrResourceProvider*, const SkRect& circle, float sigma); private: // This nested GLSL processor implementation is defined in the cpp file. diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index 24e56f37ff..2bf6b90b8a 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -772,7 +772,8 @@ public: const char* name() const override { return "RectBlur"; } - static sk_sp<GrFragmentProcessor> Make(GrContext* context, const SkRect& rect, float sigma) { + static sk_sp<GrFragmentProcessor> Make(GrResourceProvider* resourceProvider, + const SkRect& rect, float sigma) { int doubleProfileSize = SkScalarCeilToInt(12*sigma); if (doubleProfileSize >= rect.width() || doubleProfileSize >= rect.height()) { @@ -781,7 +782,7 @@ public: return nullptr; } - sk_sp<GrTextureProxy> blurProfile(CreateBlurProfileTexture(context, sigma)); + sk_sp<GrTextureProxy> blurProfile(CreateBlurProfileTexture(resourceProvider, sigma)); if (!blurProfile) { return nullptr; } @@ -805,7 +806,7 @@ public: precision = kDefault_GrSLPrecision; } - return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect(context->resourceProvider(), + return sk_sp<GrFragmentProcessor>(new GrRectBlurEffect(resourceProvider, rect, sigma, std::move(blurProfile), precision)); } @@ -824,7 +825,7 @@ private: bool onIsEqual(const GrFragmentProcessor&) const override; - static sk_sp<GrTextureProxy> CreateBlurProfileTexture(GrContext*, float sigma); + static sk_sp<GrTextureProxy> CreateBlurProfileTexture(GrResourceProvider*, float sigma); SkRect fRect; float fSigma; @@ -942,7 +943,9 @@ void GrGLRectBlurEffect::onSetData(const GrGLSLProgramDataManager& pdman, pdman.set1f(fProfileSizeUniform, SkScalarCeilToScalar(6*rbe.getSigma())); } -sk_sp<GrTextureProxy> GrRectBlurEffect::CreateBlurProfileTexture(GrContext* context, float sigma) { +sk_sp<GrTextureProxy> GrRectBlurEffect::CreateBlurProfileTexture( + GrResourceProvider* resourceProvider, + float sigma) { GrSurfaceDesc texDesc; unsigned int profileSize = SkScalarCeilToInt(6*sigma); @@ -958,17 +961,17 @@ sk_sp<GrTextureProxy> GrRectBlurEffect::CreateBlurProfileTexture(GrContext* cont builder[0] = profileSize; builder.finish(); - sk_sp<GrTextureProxy> blurProfile(context->resourceProvider()->findProxyByUniqueKey(key)); + sk_sp<GrTextureProxy> blurProfile(resourceProvider->findProxyByUniqueKey(key)); if (!blurProfile) { std::unique_ptr<uint8_t[]> profile(SkBlurMask::ComputeBlurProfile(sigma)); - blurProfile = GrSurfaceProxy::MakeDeferred(*context->caps(), context->resourceProvider(), + blurProfile = GrSurfaceProxy::MakeDeferred(resourceProvider, texDesc, SkBudgeted::kYes, profile.get(), 0); if (!blurProfile) { return nullptr; } - context->resourceProvider()->assignUniqueKeyToProxy(key, blurProfile.get()); + resourceProvider->assignUniqueKeyToProxy(key, blurProfile.get()); } return blurProfile; @@ -1008,7 +1011,8 @@ sk_sp<GrFragmentProcessor> GrRectBlurEffect::TestCreate(GrProcessorTestData* d) float sigma = d->fRandom->nextRangeF(3,8); float width = d->fRandom->nextRangeF(200,300); float height = d->fRandom->nextRangeF(200,300); - return GrRectBlurEffect::Make(d->context(), SkRect::MakeWH(width, height), sigma); + return GrRectBlurEffect::Make(d->context()->resourceProvider(), + SkRect::MakeWH(width, height), sigma); } #endif @@ -1032,6 +1036,7 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); + GrResourceProvider* resourceProvider = renderTargetContext->resourceProvider(); sk_sp<GrFragmentProcessor> fp; SkRect rect; @@ -1039,9 +1044,9 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrContext* context, SkScalar pad = 3.0f * xformedSigma; rect.outset(pad, pad); - fp = GrRectBlurEffect::Make(context, rect, xformedSigma); + fp = GrRectBlurEffect::Make(resourceProvider, rect, xformedSigma); } else if (path.isOval(&rect) && SkScalarNearlyEqual(rect.width(), rect.height())) { - fp = GrCircleBlurFragmentProcessor::Make(context, rect, xformedSigma); + fp = GrCircleBlurFragmentProcessor::Make(resourceProvider, rect, xformedSigma); // expand the rect for the coverage geometry int pad = SkScalarCeilToInt(6*xformedSigma)/2; @@ -1354,6 +1359,7 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, return false; } + GrResourceProvider* resourceProvider = renderTargetContext->resourceProvider(); SkScalar xformedSigma = this->computeXformedSigma(viewMatrix); if (devRRect.isRect() || devRRect.isCircle()) { @@ -1366,9 +1372,10 @@ bool SkBlurMaskFilterImpl::directFilterRRectMaskGPU(GrContext* context, SkScalar pad = 3.0f * xformedSigma; const SkRect dstCoverageRect = devRRect.rect().makeOutset(pad, pad); - fp = GrRectBlurEffect::Make(context, dstCoverageRect, xformedSigma); + fp = GrRectBlurEffect::Make(resourceProvider, dstCoverageRect, xformedSigma); } else { - fp = GrCircleBlurFragmentProcessor::Make(context, devRRect.rect(), xformedSigma); + fp = GrCircleBlurFragmentProcessor::Make(resourceProvider, + devRRect.rect(), xformedSigma); } if (!fp) { diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index 73e10184e3..aa85d1bf6b 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -915,9 +915,9 @@ sk_sp<GrFragmentProcessor> SkPerlinNoiseShader::asFragmentProcessor(const AsFPAr SkPerlinNoiseShader::PaintingData* paintingData = new PaintingData(fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY, matrix); sk_sp<GrTextureProxy> permutationsProxy(GrMakeCachedBitmapProxy( - args.fContext, + args.fContext->resourceProvider(), paintingData->getPermutationsBitmap())); - sk_sp<GrTextureProxy> noiseProxy(GrMakeCachedBitmapProxy(args.fContext, + sk_sp<GrTextureProxy> noiseProxy(GrMakeCachedBitmapProxy(args.fContext->resourceProvider(), paintingData->getNoiseBitmap())); SkMatrix m = *args.fViewMatrix; diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index 099846d2b3..393543b4bb 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -388,7 +388,7 @@ private: bool onIsEqual(const GrFragmentProcessor&) const override; - ColorTableEffect(GrContext* context, sk_sp<GrTextureProxy> proxy, + ColorTableEffect(GrResourceProvider* , sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row, unsigned flags); GR_DECLARE_FRAGMENT_PROCESSOR_TEST; @@ -490,6 +490,8 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBi desc.fWidth = bitmap.width(); desc.fHeight = 128; desc.fRowHeight = bitmap.height(); + + // TODO: this seems a bit heavy handed (passing a GrContext as part of the desc) desc.fContext = context; desc.fConfig = SkImageInfo2GrPixelConfig(bitmap.info(), *context->caps()); GrTextureStripAtlas* atlas = GrTextureStripAtlas::GetAtlas(desc); @@ -498,7 +500,7 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBi if (-1 == row) { atlas = nullptr; - proxy = GrMakeCachedBitmapProxy(context, bitmap); + proxy = GrMakeCachedBitmapProxy(context->resourceProvider(), bitmap); } else { proxy = atlas->asTextureProxyRef(); } @@ -507,14 +509,16 @@ sk_sp<GrFragmentProcessor> ColorTableEffect::Make(GrContext* context, const SkBi return nullptr; } - return sk_sp<GrFragmentProcessor>(new ColorTableEffect(context, std::move(proxy), + return sk_sp<GrFragmentProcessor>(new ColorTableEffect(context->resourceProvider(), + std::move(proxy), atlas, row, flags)); } -ColorTableEffect::ColorTableEffect(GrContext* context, sk_sp<GrTextureProxy> proxy, +ColorTableEffect::ColorTableEffect(GrResourceProvider* resourceProvider, + sk_sp<GrTextureProxy> proxy, GrTextureStripAtlas* atlas, int row, unsigned flags) : INHERITED(kNone_OptimizationFlags) // Not bothering with table-specific optimizations. - , fTextureSampler(context->resourceProvider(), std::move(proxy)) + , fTextureSampler(resourceProvider, std::move(proxy)) , fAtlas(atlas) , fRow(row) { this->initClassID<ColorTableEffect>(); diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index afb4f8b95a..9d7108f6d0 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -1710,7 +1710,9 @@ GrGradientEffect::GrGradientEffect(const CreateArgs& args, bool isOpaque) // Only the x-tileMode is unknown. However, given all the other knowns we know // that GrMakeCachedBitmapProxy is sufficient (i.e., it won't need to be // extracted to a subset or mipmapped). - sk_sp<GrTextureProxy> proxy = GrMakeCachedBitmapProxy(args.fContext, bitmap); + sk_sp<GrTextureProxy> proxy = GrMakeCachedBitmapProxy( + args.fContext->resourceProvider(), + bitmap); if (!proxy) { return; } |