1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2018 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/************************************************************************************************** 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *** This file was autogenerated from GrRRectBlurEffect.fp; do not modify. 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot **************************************************************************************************/ 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrRRectBlurEffect_DEFINED 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrRRectBlurEffect_DEFINED 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypes.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrClip.h" 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrContext.h" 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrContextPriv.h" 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrPaint.h" 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrProxyProvider.h" 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrRenderTargetContext.h" 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrStyle.h" 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h" 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkGpuBlurUtils.h" 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrFragmentProcessor.h" 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrCoordTransform.h" 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrRRectBlurEffect : public GrFragmentProcessor { 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static sk_sp<GrTextureProxy> find_or_create_rrect_blur_mask(GrContext* context, 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRRect& rrectToDraw, 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkISize& size, 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float xformedSigma) { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrUniqueKey key; 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrUniqueKey::Builder builder(&key, kDomain, 9); 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder[0] = SkScalarCeilToInt(xformedSigma - 1 / 6.0f); 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int index = 1; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (auto c : {SkRRect::kUpperLeft_Corner, SkRRect::kUpperRight_Corner, 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRRect::kLowerRight_Corner, SkRRect::kLowerLeft_Corner}) { 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(SkScalarIsInt(rrectToDraw.radii(c).fX) && 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalarIsInt(rrectToDraw.radii(c).fY)); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder[index++] = SkScalarCeilToInt(rrectToDraw.radii(c).fX); 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder[index++] = SkScalarCeilToInt(rrectToDraw.radii(c).fY); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder.finish(); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrProxyProvider* proxyProvider = context->contextPriv().proxyProvider(); 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrTextureProxy> mask( 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proxyProvider->findOrCreateProxyByUniqueKey(key, kBottomLeft_GrSurfaceOrigin)); 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!mask) { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // TODO: this could be approx but the texture coords will need to be updated 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrRenderTargetContext> rtc(context->makeDeferredRenderTargetContextWithFallback( 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBackingFit::kExact, size.fWidth, size.fHeight, kAlpha_8_GrPixelConfig, 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot nullptr)); 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!rtc) { 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrPaint paint; 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rtc->clear(nullptr, 0x0, GrRenderTargetContext::CanClearFullscreen::kYes); 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rtc->drawRRect(GrNoClip(), std::move(paint), GrAA::kYes, SkMatrix::I(), rrectToDraw, 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrStyle::SimpleFill()); 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrTextureProxy> srcProxy(rtc->asTextureProxyRef()); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!srcProxy) { 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrRenderTargetContext> rtc2( 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkGpuBlurUtils::GaussianBlur(context, 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::move(srcProxy), 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot nullptr, 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIRect::MakeWH(size.fWidth, size.fHeight), 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIRect::EmptyIRect(), 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot xformedSigma, 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot xformedSigma, 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrTextureDomain::kIgnore_Mode, 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBackingFit::kExact)); 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!rtc2) { 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot mask = rtc2->asTextureProxyRef(); 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!mask) { 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(mask->origin() == kBottomLeft_GrSurfaceOrigin); 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proxyProvider->assignUniqueKeyToProxy(key, mask.get()); 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return mask; 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float sigma() const { return fSigma; } 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect rect() const { return fRect; } 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float cornerRadius() const { return fCornerRadius; } 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static std::unique_ptr<GrFragmentProcessor> Make(GrContext* context, float sigma, 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float xformedSigma, const SkRRect& srcRRect, 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRRect& devRRect); 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrRRectBlurEffect(const GrRRectBlurEffect& src); 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<GrFragmentProcessor> clone() const override; 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* name() const override { return "RRectBlurEffect"; } 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrRRectBlurEffect(float sigma, SkRect rect, float cornerRadius, 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrTextureProxy> ninePatchSampler) 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(kGrRRectBlurEffect_ClassID, 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fSigma(sigma) 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fRect(rect) 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fCornerRadius(cornerRadius) 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fNinePatchSampler(std::move(ninePatchSampler)) { 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->addTextureSampler(&fNinePatchSampler); 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onIsEqual(const GrFragmentProcessor&) const override; 120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GR_DECLARE_FRAGMENT_PROCESSOR_TEST 121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float fSigma; 122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect fRect; 123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float fCornerRadius; 124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TextureSampler fNinePatchSampler; 125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GrFragmentProcessor INHERITED; 126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 129