1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2013 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrDistanceFieldGeoProc_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrDistanceFieldGeoProc_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #if !defined(SK_DISABLE_SDF_TEXT) 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkArenaAlloc.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrGeometryProcessor.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorUnitTest.h" 19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSamplerState.h" 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 22*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker class GrSurfaceProxyView; 25*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { class KeyBuilder; } 26*c8dee2aaSAndroid Build Coastguard Worker struct GrShaderCaps; 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker enum GrDistanceFieldEffectFlags { 29*c8dee2aaSAndroid Build Coastguard Worker kSimilarity_DistanceFieldEffectFlag = 0x001, // ctm is similarity matrix 30*c8dee2aaSAndroid Build Coastguard Worker kScaleOnly_DistanceFieldEffectFlag = 0x002, // ctm has only scale and translate 31*c8dee2aaSAndroid Build Coastguard Worker kPerspective_DistanceFieldEffectFlag = 0x004, // ctm has perspective (and positions are x,y,w) 32*c8dee2aaSAndroid Build Coastguard Worker kUseLCD_DistanceFieldEffectFlag = 0x008, // use lcd text 33*c8dee2aaSAndroid Build Coastguard Worker kBGR_DistanceFieldEffectFlag = 0x010, // lcd display has bgr order 34*c8dee2aaSAndroid Build Coastguard Worker kPortrait_DistanceFieldEffectFlag = 0x020, // lcd display is in portrait mode 35*c8dee2aaSAndroid Build Coastguard Worker kGammaCorrect_DistanceFieldEffectFlag = 0x040, // assume gamma-correct output (linear blending) 36*c8dee2aaSAndroid Build Coastguard Worker kAliased_DistanceFieldEffectFlag = 0x080, // monochrome output 37*c8dee2aaSAndroid Build Coastguard Worker kWideColor_DistanceFieldEffectFlag = 0x100, // use wide color (only for path) 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker kInvalid_DistanceFieldEffectFlag = 0x200, // invalid state (for initialization) 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 42*c8dee2aaSAndroid Build Coastguard Worker kScaleOnly_DistanceFieldEffectFlag, 43*c8dee2aaSAndroid Build Coastguard Worker // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc 44*c8dee2aaSAndroid Build Coastguard Worker kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 45*c8dee2aaSAndroid Build Coastguard Worker kScaleOnly_DistanceFieldEffectFlag | 46*c8dee2aaSAndroid Build Coastguard Worker kPerspective_DistanceFieldEffectFlag | 47*c8dee2aaSAndroid Build Coastguard Worker kGammaCorrect_DistanceFieldEffectFlag | 48*c8dee2aaSAndroid Build Coastguard Worker kAliased_DistanceFieldEffectFlag, 49*c8dee2aaSAndroid Build Coastguard Worker // The subset of the flags relevant to GrDistanceFieldPathGeoProc 50*c8dee2aaSAndroid Build Coastguard Worker kPath_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 51*c8dee2aaSAndroid Build Coastguard Worker kScaleOnly_DistanceFieldEffectFlag | 52*c8dee2aaSAndroid Build Coastguard Worker kPerspective_DistanceFieldEffectFlag | 53*c8dee2aaSAndroid Build Coastguard Worker kGammaCorrect_DistanceFieldEffectFlag | 54*c8dee2aaSAndroid Build Coastguard Worker kAliased_DistanceFieldEffectFlag | 55*c8dee2aaSAndroid Build Coastguard Worker kWideColor_DistanceFieldEffectFlag, 56*c8dee2aaSAndroid Build Coastguard Worker // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc 57*c8dee2aaSAndroid Build Coastguard Worker kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | 58*c8dee2aaSAndroid Build Coastguard Worker kScaleOnly_DistanceFieldEffectFlag | 59*c8dee2aaSAndroid Build Coastguard Worker kPerspective_DistanceFieldEffectFlag | 60*c8dee2aaSAndroid Build Coastguard Worker kUseLCD_DistanceFieldEffectFlag | 61*c8dee2aaSAndroid Build Coastguard Worker kBGR_DistanceFieldEffectFlag | 62*c8dee2aaSAndroid Build Coastguard Worker kPortrait_DistanceFieldEffectFlag | 63*c8dee2aaSAndroid Build Coastguard Worker kGammaCorrect_DistanceFieldEffectFlag, 64*c8dee2aaSAndroid Build Coastguard Worker }; 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker /** 67*c8dee2aaSAndroid Build Coastguard Worker * The output color of this effect is a modulation of the input color and a sample from a 68*c8dee2aaSAndroid Build Coastguard Worker * distance field texture (using a smoothed step function near 0.5). 69*c8dee2aaSAndroid Build Coastguard Worker * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input 70*c8dee2aaSAndroid Build Coastguard Worker * coords are a custom attribute. Gamma correction is handled via a texture LUT. 71*c8dee2aaSAndroid Build Coastguard Worker */ 72*c8dee2aaSAndroid Build Coastguard Worker class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { 73*c8dee2aaSAndroid Build Coastguard Worker public: 74*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr int kMaxTextures = 4; 75*c8dee2aaSAndroid Build Coastguard Worker 76*c8dee2aaSAndroid Build Coastguard Worker /** The local matrix should be identity if local coords are not required by the GrPipeline. */ 77*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_GAMMA_APPLY_TO_A8 Make(SkArenaAlloc * arena,const GrShaderCaps & caps,const GrSurfaceProxyView * views,int numActiveViews,GrSamplerState params,float lum,uint32_t flags,const SkMatrix & localMatrixIfUsesLocalCoords)78*c8dee2aaSAndroid Build Coastguard Worker static GrGeometryProcessor* Make(SkArenaAlloc* arena, 79*c8dee2aaSAndroid Build Coastguard Worker const GrShaderCaps& caps, 80*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 81*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 82*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState params, 83*c8dee2aaSAndroid Build Coastguard Worker float lum, 84*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags, 85*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrixIfUsesLocalCoords) { 86*c8dee2aaSAndroid Build Coastguard Worker return arena->make([&](void* ptr) { 87*c8dee2aaSAndroid Build Coastguard Worker return new (ptr) GrDistanceFieldA8TextGeoProc( 88*c8dee2aaSAndroid Build Coastguard Worker caps, views, numActiveViews, params, lum, flags, localMatrixIfUsesLocalCoords); 89*c8dee2aaSAndroid Build Coastguard Worker }); 90*c8dee2aaSAndroid Build Coastguard Worker } 91*c8dee2aaSAndroid Build Coastguard Worker #else Make(SkArenaAlloc * arena,const GrShaderCaps & caps,const GrSurfaceProxyView * views,int numActiveViews,GrSamplerState params,uint32_t flags,const SkMatrix & localMatrixIfUsesLocalCoords)92*c8dee2aaSAndroid Build Coastguard Worker static GrGeometryProcessor* Make(SkArenaAlloc* arena, 93*c8dee2aaSAndroid Build Coastguard Worker const GrShaderCaps& caps, 94*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 95*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 96*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState params, 97*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags, 98*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrixIfUsesLocalCoords) { 99*c8dee2aaSAndroid Build Coastguard Worker return arena->make([&](void* ptr) { 100*c8dee2aaSAndroid Build Coastguard Worker return new (ptr) GrDistanceFieldA8TextGeoProc( 101*c8dee2aaSAndroid Build Coastguard Worker caps, views, numActiveViews, params, flags, localMatrixIfUsesLocalCoords); 102*c8dee2aaSAndroid Build Coastguard Worker }); 103*c8dee2aaSAndroid Build Coastguard Worker } 104*c8dee2aaSAndroid Build Coastguard Worker #endif 105*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldA8TextGeoProc()106*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldA8TextGeoProc() override {} 107*c8dee2aaSAndroid Build Coastguard Worker name()108*c8dee2aaSAndroid Build Coastguard Worker const char* name() const override { return "DistanceFieldA8Text"; } 109*c8dee2aaSAndroid Build Coastguard Worker 110*c8dee2aaSAndroid Build Coastguard Worker void addNewViews(const GrSurfaceProxyView* views, int numViews, GrSamplerState); 111*c8dee2aaSAndroid Build Coastguard Worker 112*c8dee2aaSAndroid Build Coastguard Worker void addToKey(const GrShaderCaps&, skgpu::KeyBuilder*) const override; 113*c8dee2aaSAndroid Build Coastguard Worker 114*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<ProgramImpl> makeProgramImpl(const GrShaderCaps&) const override; 115*c8dee2aaSAndroid Build Coastguard Worker 116*c8dee2aaSAndroid Build Coastguard Worker private: 117*c8dee2aaSAndroid Build Coastguard Worker class Impl; 118*c8dee2aaSAndroid Build Coastguard Worker 119*c8dee2aaSAndroid Build Coastguard Worker GrDistanceFieldA8TextGeoProc(const GrShaderCaps& caps, 120*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 121*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 122*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState params, 123*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_GAMMA_APPLY_TO_A8 124*c8dee2aaSAndroid Build Coastguard Worker float distanceAdjust, 125*c8dee2aaSAndroid Build Coastguard Worker #endif 126*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags, 127*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrix); 128*c8dee2aaSAndroid Build Coastguard Worker onTextureSampler(int i)129*c8dee2aaSAndroid Build Coastguard Worker const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } 130*c8dee2aaSAndroid Build Coastguard Worker 131*c8dee2aaSAndroid Build Coastguard Worker TextureSampler fTextureSamplers[kMaxTextures]; 132*c8dee2aaSAndroid Build Coastguard Worker SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. 133*c8dee2aaSAndroid Build Coastguard Worker SkMatrix fLocalMatrix; 134*c8dee2aaSAndroid Build Coastguard Worker Attribute fInPosition; 135*c8dee2aaSAndroid Build Coastguard Worker Attribute fInColor; 136*c8dee2aaSAndroid Build Coastguard Worker Attribute fInTextureCoords; 137*c8dee2aaSAndroid Build Coastguard Worker uint32_t fFlags; 138*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_GAMMA_APPLY_TO_A8 139*c8dee2aaSAndroid Build Coastguard Worker float fDistanceAdjust; 140*c8dee2aaSAndroid Build Coastguard Worker #endif 141*c8dee2aaSAndroid Build Coastguard Worker 142*c8dee2aaSAndroid Build Coastguard Worker GR_DECLARE_GEOMETRY_PROCESSOR_TEST 143*c8dee2aaSAndroid Build Coastguard Worker 144*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrGeometryProcessor; 145*c8dee2aaSAndroid Build Coastguard Worker }; 146*c8dee2aaSAndroid Build Coastguard Worker 147*c8dee2aaSAndroid Build Coastguard Worker /** 148*c8dee2aaSAndroid Build Coastguard Worker * The output color of this effect is a modulation of the input color and a sample from a 149*c8dee2aaSAndroid Build Coastguard Worker * distance field texture (using a smoothed step function near 0.5). 150*c8dee2aaSAndroid Build Coastguard Worker * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input 151*c8dee2aaSAndroid Build Coastguard Worker * coords are a custom attribute. No gamma correct blending is applied. Used for paths only. 152*c8dee2aaSAndroid Build Coastguard Worker */ 153*c8dee2aaSAndroid Build Coastguard Worker class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { 154*c8dee2aaSAndroid Build Coastguard Worker public: 155*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr int kMaxTextures = 4; 156*c8dee2aaSAndroid Build Coastguard Worker 157*c8dee2aaSAndroid Build Coastguard Worker /** The local matrix should be identity if local coords are not required by the GrPipeline. */ Make(SkArenaAlloc * arena,const GrShaderCaps & caps,const GrSurfaceProxyView * views,int numActiveViews,GrSamplerState params,const SkMatrix & localMatrix,uint32_t flags)158*c8dee2aaSAndroid Build Coastguard Worker static GrGeometryProcessor* Make(SkArenaAlloc* arena, const GrShaderCaps& caps, 159*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, int numActiveViews, 160*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState params, const SkMatrix& localMatrix, 161*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags) { 162*c8dee2aaSAndroid Build Coastguard Worker return arena->make([&](void* ptr) { 163*c8dee2aaSAndroid Build Coastguard Worker return new (ptr) GrDistanceFieldPathGeoProc(caps, views, numActiveViews, 164*c8dee2aaSAndroid Build Coastguard Worker params, localMatrix, flags); 165*c8dee2aaSAndroid Build Coastguard Worker }); 166*c8dee2aaSAndroid Build Coastguard Worker } 167*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldPathGeoProc()168*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldPathGeoProc() override {} 169*c8dee2aaSAndroid Build Coastguard Worker name()170*c8dee2aaSAndroid Build Coastguard Worker const char* name() const override { return "DistanceFieldPath"; } 171*c8dee2aaSAndroid Build Coastguard Worker 172*c8dee2aaSAndroid Build Coastguard Worker void addNewViews(const GrSurfaceProxyView*, int numActiveViews, GrSamplerState); 173*c8dee2aaSAndroid Build Coastguard Worker 174*c8dee2aaSAndroid Build Coastguard Worker void addToKey(const GrShaderCaps&, skgpu::KeyBuilder*) const override; 175*c8dee2aaSAndroid Build Coastguard Worker 176*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<ProgramImpl> makeProgramImpl(const GrShaderCaps&) const override; 177*c8dee2aaSAndroid Build Coastguard Worker 178*c8dee2aaSAndroid Build Coastguard Worker private: 179*c8dee2aaSAndroid Build Coastguard Worker class Impl; 180*c8dee2aaSAndroid Build Coastguard Worker 181*c8dee2aaSAndroid Build Coastguard Worker GrDistanceFieldPathGeoProc(const GrShaderCaps& caps, 182*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 183*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 184*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState, 185*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrix, 186*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags); 187*c8dee2aaSAndroid Build Coastguard Worker onTextureSampler(int i)188*c8dee2aaSAndroid Build Coastguard Worker const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } 189*c8dee2aaSAndroid Build Coastguard Worker 190*c8dee2aaSAndroid Build Coastguard Worker SkMatrix fLocalMatrix; 191*c8dee2aaSAndroid Build Coastguard Worker TextureSampler fTextureSamplers[kMaxTextures]; 192*c8dee2aaSAndroid Build Coastguard Worker SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. 193*c8dee2aaSAndroid Build Coastguard Worker Attribute fInPosition; 194*c8dee2aaSAndroid Build Coastguard Worker Attribute fInColor; 195*c8dee2aaSAndroid Build Coastguard Worker Attribute fInTextureCoords; 196*c8dee2aaSAndroid Build Coastguard Worker uint32_t fFlags; 197*c8dee2aaSAndroid Build Coastguard Worker 198*c8dee2aaSAndroid Build Coastguard Worker GR_DECLARE_GEOMETRY_PROCESSOR_TEST 199*c8dee2aaSAndroid Build Coastguard Worker 200*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrGeometryProcessor; 201*c8dee2aaSAndroid Build Coastguard Worker }; 202*c8dee2aaSAndroid Build Coastguard Worker 203*c8dee2aaSAndroid Build Coastguard Worker /** 204*c8dee2aaSAndroid Build Coastguard Worker * The output color of this effect is a modulation of the input color and samples from a 205*c8dee2aaSAndroid Build Coastguard Worker * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays. 206*c8dee2aaSAndroid Build Coastguard Worker * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input 207*c8dee2aaSAndroid Build Coastguard Worker * coords are a custom attribute. Gamma correction is handled via a texture LUT. 208*c8dee2aaSAndroid Build Coastguard Worker */ 209*c8dee2aaSAndroid Build Coastguard Worker class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor { 210*c8dee2aaSAndroid Build Coastguard Worker public: 211*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr int kMaxTextures = 4; 212*c8dee2aaSAndroid Build Coastguard Worker 213*c8dee2aaSAndroid Build Coastguard Worker struct DistanceAdjust { 214*c8dee2aaSAndroid Build Coastguard Worker SkScalar fR, fG, fB; MakeDistanceAdjust215*c8dee2aaSAndroid Build Coastguard Worker static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) { 216*c8dee2aaSAndroid Build Coastguard Worker DistanceAdjust result; 217*c8dee2aaSAndroid Build Coastguard Worker result.fR = r; result.fG = g; result.fB = b; 218*c8dee2aaSAndroid Build Coastguard Worker return result; 219*c8dee2aaSAndroid Build Coastguard Worker } 220*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const DistanceAdjust& wa) const { 221*c8dee2aaSAndroid Build Coastguard Worker return (fR == wa.fR && fG == wa.fG && fB == wa.fB); 222*c8dee2aaSAndroid Build Coastguard Worker } 223*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const DistanceAdjust& wa) const { 224*c8dee2aaSAndroid Build Coastguard Worker return !(*this == wa); 225*c8dee2aaSAndroid Build Coastguard Worker } 226*c8dee2aaSAndroid Build Coastguard Worker }; 227*c8dee2aaSAndroid Build Coastguard Worker Make(SkArenaAlloc * arena,const GrShaderCaps & caps,const GrSurfaceProxyView * views,int numActiveViews,GrSamplerState params,DistanceAdjust distanceAdjust,uint32_t flags,const SkMatrix & localMatrixIfUsesLocalCoords)228*c8dee2aaSAndroid Build Coastguard Worker static GrGeometryProcessor* Make(SkArenaAlloc* arena, 229*c8dee2aaSAndroid Build Coastguard Worker const GrShaderCaps& caps, 230*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView* views, 231*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, 232*c8dee2aaSAndroid Build Coastguard Worker GrSamplerState params, 233*c8dee2aaSAndroid Build Coastguard Worker DistanceAdjust distanceAdjust, 234*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags, 235*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix& localMatrixIfUsesLocalCoords) { 236*c8dee2aaSAndroid Build Coastguard Worker return arena->make([&](void* ptr) { 237*c8dee2aaSAndroid Build Coastguard Worker return new (ptr) GrDistanceFieldLCDTextGeoProc(caps, views, numActiveViews, params, 238*c8dee2aaSAndroid Build Coastguard Worker distanceAdjust, flags, 239*c8dee2aaSAndroid Build Coastguard Worker localMatrixIfUsesLocalCoords); 240*c8dee2aaSAndroid Build Coastguard Worker }); 241*c8dee2aaSAndroid Build Coastguard Worker } 242*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldLCDTextGeoProc()243*c8dee2aaSAndroid Build Coastguard Worker ~GrDistanceFieldLCDTextGeoProc() override {} 244*c8dee2aaSAndroid Build Coastguard Worker name()245*c8dee2aaSAndroid Build Coastguard Worker const char* name() const override { return "DistanceFieldLCDText"; } 246*c8dee2aaSAndroid Build Coastguard Worker 247*c8dee2aaSAndroid Build Coastguard Worker void addNewViews(const GrSurfaceProxyView*, int numActiveViews, GrSamplerState); 248*c8dee2aaSAndroid Build Coastguard Worker 249*c8dee2aaSAndroid Build Coastguard Worker void addToKey(const GrShaderCaps&, skgpu::KeyBuilder*) const override; 250*c8dee2aaSAndroid Build Coastguard Worker 251*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<ProgramImpl> makeProgramImpl(const GrShaderCaps&) const override; 252*c8dee2aaSAndroid Build Coastguard Worker 253*c8dee2aaSAndroid Build Coastguard Worker private: 254*c8dee2aaSAndroid Build Coastguard Worker class Impl; 255*c8dee2aaSAndroid Build Coastguard Worker 256*c8dee2aaSAndroid Build Coastguard Worker GrDistanceFieldLCDTextGeoProc(const GrShaderCaps& caps, const GrSurfaceProxyView* views, 257*c8dee2aaSAndroid Build Coastguard Worker int numActiveViews, GrSamplerState params, DistanceAdjust wa, 258*c8dee2aaSAndroid Build Coastguard Worker uint32_t flags, const SkMatrix& localMatrix); 259*c8dee2aaSAndroid Build Coastguard Worker onTextureSampler(int i)260*c8dee2aaSAndroid Build Coastguard Worker const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; } 261*c8dee2aaSAndroid Build Coastguard Worker 262*c8dee2aaSAndroid Build Coastguard Worker TextureSampler fTextureSamplers[kMaxTextures]; 263*c8dee2aaSAndroid Build Coastguard Worker SkISize fAtlasDimensions; // dimensions for all textures used with fTextureSamplers[]. 264*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix fLocalMatrix; 265*c8dee2aaSAndroid Build Coastguard Worker DistanceAdjust fDistanceAdjust; 266*c8dee2aaSAndroid Build Coastguard Worker Attribute fInPosition; 267*c8dee2aaSAndroid Build Coastguard Worker Attribute fInColor; 268*c8dee2aaSAndroid Build Coastguard Worker Attribute fInTextureCoords; 269*c8dee2aaSAndroid Build Coastguard Worker uint32_t fFlags; 270*c8dee2aaSAndroid Build Coastguard Worker 271*c8dee2aaSAndroid Build Coastguard Worker GR_DECLARE_GEOMETRY_PROCESSOR_TEST 272*c8dee2aaSAndroid Build Coastguard Worker 273*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrGeometryProcessor; 274*c8dee2aaSAndroid Build Coastguard Worker }; 275*c8dee2aaSAndroid Build Coastguard Worker 276*c8dee2aaSAndroid Build Coastguard Worker #endif // !defined(SK_DISABLE_SDF_TEXT) 277*c8dee2aaSAndroid Build Coastguard Worker 278*c8dee2aaSAndroid Build Coastguard Worker #endif 279