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 GrRectBlurEffect.fp; do not modify. 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot **************************************************************************************************/ 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef GrRectBlurEffect_DEFINED 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define GrRectBlurEffect_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 "GrProxyProvider.h" 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "../effects/SkBlurMask.h" 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrFragmentProcessor.h" 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrCoordTransform.h" 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrRectBlurEffect : public GrFragmentProcessor { 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static sk_sp<GrTextureProxy> CreateBlurProfileTexture(GrProxyProvider* proxyProvider, 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float sigma) { 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot unsigned int profileSize = SkScalarCeilToInt(6 * sigma); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrUniqueKey key; 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrUniqueKey::Builder builder(&key, kDomain, 1); 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder[0] = profileSize; 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot builder.finish(); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrTextureProxy> blurProfile( 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proxyProvider->findOrCreateProxyByUniqueKey(key, kTopLeft_GrSurfaceOrigin)); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!blurProfile) { 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrSurfaceDesc texDesc; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot texDesc.fOrigin = kTopLeft_GrSurfaceOrigin; 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot texDesc.fWidth = profileSize; 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot texDesc.fHeight = 1; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot texDesc.fConfig = kAlpha_8_GrPixelConfig; 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<uint8_t[]> profile(SkBlurMask::ComputeBlurProfile(sigma)); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot blurProfile = 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proxyProvider->createTextureProxy(texDesc, SkBudgeted::kYes, profile.get(), 0); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!blurProfile) { 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkASSERT(blurProfile->origin() == kTopLeft_GrSurfaceOrigin); 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot proxyProvider->assignUniqueKeyToProxy(key, blurProfile.get()); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return blurProfile; 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect rect() const { return fRect; } 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float sigma() const { return fSigma; } 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static std::unique_ptr<GrFragmentProcessor> Make(GrProxyProvider* proxyProvider, 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect& rect, float sigma) { 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int doubleProfileSize = SkScalarCeilToInt(12 * sigma); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (doubleProfileSize >= rect.width() || doubleProfileSize >= rect.height()) { 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // if the blur sigma is too large so the gaussian overlaps the whole 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // rect in either direction, fall back to CPU path for now. 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<GrTextureProxy> blurProfile(CreateBlurProfileTexture(proxyProvider, sigma)); 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!blurProfile) { 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return nullptr; 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return std::unique_ptr<GrFragmentProcessor>(new GrRectBlurEffect( 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rect, sigma, std::move(blurProfile), 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrSamplerState(GrSamplerState::WrapMode::kClamp, GrSamplerState::Filter::kBilerp))); 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrRectBlurEffect(const GrRectBlurEffect& src); 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot std::unique_ptr<GrFragmentProcessor> clone() const override; 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* name() const override { return "RectBlurEffect"; } 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrRectBlurEffect(SkRect rect, float sigma, sk_sp<GrTextureProxy> blurProfile, 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrSamplerState samplerParams) 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : INHERITED(kGrRectBlurEffect_ClassID, 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fRect(rect) 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fSigma(sigma) 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , fBlurProfile(std::move(blurProfile), samplerParams) { 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->addTextureSampler(&fBlurProfile); 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onIsEqual(const GrFragmentProcessor&) const override; 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot GR_DECLARE_FRAGMENT_PROCESSOR_TEST 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect fRect; 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float fSigma; 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TextureSampler fBlurProfile; 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GrFragmentProcessor INHERITED; 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 102