LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu/effects - GrDistanceFieldGeoProc.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 38 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 31 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2013 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef GrDistanceFieldGeoProc_DEFINED
       9             : #define GrDistanceFieldGeoProc_DEFINED
      10             : 
      11             : #include "GrProcessor.h"
      12             : #include "GrGeometryProcessor.h"
      13             : 
      14             : class GrGLDistanceFieldA8TextGeoProc;
      15             : class GrGLDistanceFieldPathGeoProc;
      16             : class GrGLDistanceFieldLCDTextGeoProc;
      17             : class GrInvariantOutput;
      18             : 
      19             : enum GrDistanceFieldEffectFlags {
      20             :     kSimilarity_DistanceFieldEffectFlag   = 0x01, // ctm is similarity matrix
      21             :     kScaleOnly_DistanceFieldEffectFlag    = 0x02, // ctm has only scale and translate
      22             :     kUseLCD_DistanceFieldEffectFlag       = 0x04, // use lcd text
      23             :     kBGR_DistanceFieldEffectFlag          = 0x08, // lcd display has bgr order
      24             :     kPortrait_DistanceFieldEffectFlag     = 0x10, // lcd display is in portrait mode (not used yet)
      25             :     kGammaCorrect_DistanceFieldEffectFlag = 0x20, // assume gamma-correct output (linear blending)
      26             : 
      27             :     kInvalid_DistanceFieldEffectFlag    = 0x80,   // invalid state (for initialization)
      28             : 
      29             :     kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
      30             :                                             kScaleOnly_DistanceFieldEffectFlag,
      31             :     // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc
      32             :     kNonLCD_DistanceFieldEffectMask       = kSimilarity_DistanceFieldEffectFlag |
      33             :                                             kScaleOnly_DistanceFieldEffectFlag |
      34             :                                             kGammaCorrect_DistanceFieldEffectFlag,
      35             :     // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc
      36             :     kLCD_DistanceFieldEffectMask          = kSimilarity_DistanceFieldEffectFlag |
      37             :                                             kScaleOnly_DistanceFieldEffectFlag |
      38             :                                             kUseLCD_DistanceFieldEffectFlag |
      39             :                                             kBGR_DistanceFieldEffectFlag |
      40             :                                             kGammaCorrect_DistanceFieldEffectFlag,
      41             : };
      42             : 
      43             : /**
      44             :  * The output color of this effect is a modulation of the input color and a sample from a
      45             :  * distance field texture (using a smoothed step function near 0.5).
      46             :  * It allows explicit specification of the filtering and wrap modes (GrSamplerParams). The input
      47             :  * coords are a custom attribute. Gamma correction is handled via a texture LUT.
      48             :  */
      49             : class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor {
      50             : public:
      51             : #ifdef SK_GAMMA_APPLY_TO_A8
      52             :     static sk_sp<GrGeometryProcessor> Make(GrResourceProvider* resourceProvider,
      53             :                                            GrColor color, const SkMatrix& viewMatrix,
      54             :                                            sk_sp<GrTextureProxy> proxy,
      55             :                                            const GrSamplerParams& params,
      56             :                                            float lum, uint32_t flags, bool usesLocalCoords) {
      57             :         return sk_sp<GrGeometryProcessor>(
      58             :             new GrDistanceFieldA8TextGeoProc(resourceProvider, color, viewMatrix, std::move(proxy),
      59             :                                              params, lum, flags, usesLocalCoords));
      60             :     }
      61             : #else
      62           0 :     static sk_sp<GrGeometryProcessor> Make(GrResourceProvider* resourceProvider,
      63             :                                            GrColor color, const SkMatrix& viewMatrix,
      64             :                                            sk_sp<GrTextureProxy> proxy,
      65             :                                            const GrSamplerParams& params,
      66             :                                            uint32_t flags, bool usesLocalCoords) {
      67             :         return sk_sp<GrGeometryProcessor>(
      68           0 :             new GrDistanceFieldA8TextGeoProc(resourceProvider, color, viewMatrix, std::move(proxy),
      69           0 :                                              params, flags, usesLocalCoords));
      70             :     }
      71             : #endif
      72             : 
      73           0 :     ~GrDistanceFieldA8TextGeoProc() override {}
      74             : 
      75           0 :     const char* name() const override { return "DistanceFieldA8Text"; }
      76             : 
      77           0 :     const Attribute* inPosition() const { return fInPosition; }
      78           0 :     const Attribute* inColor() const { return fInColor; }
      79           0 :     const Attribute* inTextureCoords() const { return fInTextureCoords; }
      80             :     GrColor color() const { return fColor; }
      81           0 :     const SkMatrix& viewMatrix() const { return fViewMatrix; }
      82             :     bool usesLocalCoords() const { return fUsesLocalCoords; }
      83             : #ifdef SK_GAMMA_APPLY_TO_A8
      84             :     float getDistanceAdjust() const { return fDistanceAdjust; }
      85             : #endif
      86           0 :     uint32_t getFlags() const { return fFlags; }
      87             : 
      88             :     void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
      89             : 
      90             :     GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
      91             : 
      92             : private:
      93             :     GrDistanceFieldA8TextGeoProc(GrResourceProvider*, GrColor, const SkMatrix& viewMatrix,
      94             :                                  sk_sp<GrTextureProxy> proxy, const GrSamplerParams& params,
      95             : #ifdef SK_GAMMA_APPLY_TO_A8
      96             :                                  float distanceAdjust,
      97             : #endif
      98             :                                  uint32_t flags, bool usesLocalCoords);
      99             : 
     100             :     GrColor          fColor;
     101             :     SkMatrix         fViewMatrix;
     102             :     TextureSampler   fTextureSampler;
     103             : #ifdef SK_GAMMA_APPLY_TO_A8
     104             :     float            fDistanceAdjust;
     105             : #endif
     106             :     uint32_t         fFlags;
     107             :     const Attribute* fInPosition;
     108             :     const Attribute* fInColor;
     109             :     const Attribute* fInTextureCoords;
     110             :     bool             fUsesLocalCoords;
     111             : 
     112             :     GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
     113             : 
     114             :     typedef GrGeometryProcessor INHERITED;
     115             : };
     116             : 
     117             : 
     118             : /**
     119             : * The output color of this effect is a modulation of the input color and a sample from a
     120             : * distance field texture (using a smoothed step function near 0.5).
     121             : * It allows explicit specification of the filtering and wrap modes (GrSamplerParams). The input
     122             : * coords are a custom attribute. No gamma correct blending is applied. Used for paths only.
     123             : */
     124             : class GrDistanceFieldPathGeoProc : public GrGeometryProcessor {
     125             : public:
     126           0 :     static sk_sp<GrGeometryProcessor> Make(GrResourceProvider* resourceProvider, GrColor color,
     127             :                                            const SkMatrix& viewMatrix, sk_sp<GrTextureProxy> proxy,
     128             :                                            const GrSamplerParams& params,
     129             :                                            uint32_t flags, bool usesLocalCoords) {
     130             :         return sk_sp<GrGeometryProcessor>(
     131           0 :             new GrDistanceFieldPathGeoProc(resourceProvider, color, viewMatrix, std::move(proxy),
     132           0 :                                            params, flags, usesLocalCoords));
     133             :     }
     134             : 
     135           0 :     ~GrDistanceFieldPathGeoProc() override {}
     136             : 
     137           0 :     const char* name() const override { return "DistanceFieldPath"; }
     138             : 
     139           0 :     const Attribute* inPosition() const { return fInPosition; }
     140           0 :     const Attribute* inColor() const { return fInColor; }
     141           0 :     const Attribute* inTextureCoords() const { return fInTextureCoords; }
     142             :     GrColor color() const { return fColor; }
     143           0 :     const SkMatrix& viewMatrix() const { return fViewMatrix; }
     144           0 :     uint32_t getFlags() const { return fFlags; }
     145             :     bool usesLocalCoords() const { return fUsesLocalCoords; }
     146             : 
     147             :     void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
     148             : 
     149             :     GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
     150             : 
     151             : private:
     152             :     GrDistanceFieldPathGeoProc(GrResourceProvider*, GrColor, const SkMatrix& viewMatrix,
     153             :                                sk_sp<GrTextureProxy>, const GrSamplerParams&, uint32_t flags,
     154             :                                bool usesLocalCoords);
     155             : 
     156             :     GrColor          fColor;
     157             :     SkMatrix         fViewMatrix;
     158             :     TextureSampler   fTextureSampler;
     159             :     uint32_t         fFlags;
     160             :     const Attribute* fInPosition;
     161             :     const Attribute* fInColor;
     162             :     const Attribute* fInTextureCoords;
     163             :     bool             fUsesLocalCoords;
     164             : 
     165             :     GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
     166             : 
     167             :     typedef GrGeometryProcessor INHERITED;
     168             : };
     169             : 
     170             : /**
     171             :  * The output color of this effect is a modulation of the input color and samples from a
     172             :  * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays.
     173             :  * It allows explicit specification of the filtering and wrap modes (GrSamplerParams). The input
     174             :  * coords are a custom attribute. Gamma correction is handled via a texture LUT.
     175             :  */
     176             : class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor {
     177             : public:
     178             :     struct DistanceAdjust {
     179             :         SkScalar fR, fG, fB;
     180           0 :         static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) {
     181             :             DistanceAdjust result;
     182           0 :             result.fR = r; result.fG = g; result.fB = b;
     183           0 :             return result;
     184             :         }
     185           0 :         bool operator==(const DistanceAdjust& wa) const {
     186           0 :             return (fR == wa.fR && fG == wa.fG && fB == wa.fB);
     187             :         }
     188           0 :         bool operator!=(const DistanceAdjust& wa) const {
     189           0 :             return !(*this == wa);
     190             :         }
     191             :     };
     192             : 
     193           0 :     static sk_sp<GrGeometryProcessor> Make(GrResourceProvider* resourceProvider, GrColor color,
     194             :                                            const SkMatrix& viewMatrix,
     195             :                                            sk_sp<GrTextureProxy> proxy,
     196             :                                            const GrSamplerParams& params,
     197             :                                            DistanceAdjust distanceAdjust, uint32_t flags,
     198             :                                            bool usesLocalCoords) {
     199             :         return sk_sp<GrGeometryProcessor>(
     200           0 :             new GrDistanceFieldLCDTextGeoProc(resourceProvider, color, viewMatrix, std::move(proxy),
     201             :                                               params, distanceAdjust,
     202           0 :                                               flags, usesLocalCoords));
     203             :     }
     204             : 
     205           0 :     ~GrDistanceFieldLCDTextGeoProc() override {}
     206             : 
     207           0 :     const char* name() const override { return "DistanceFieldLCDText"; }
     208             : 
     209           0 :     const Attribute* inPosition() const { return fInPosition; }
     210           0 :     const Attribute* inColor() const { return fInColor; }
     211           0 :     const Attribute* inTextureCoords() const { return fInTextureCoords; }
     212           0 :     DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; }
     213             :     GrColor color() const { return fColor; }
     214           0 :     const SkMatrix& viewMatrix() const { return fViewMatrix; }
     215           0 :     uint32_t getFlags() const { return fFlags; }
     216             :     bool usesLocalCoords() const { return fUsesLocalCoords; }
     217             : 
     218             :     void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
     219             : 
     220             :     GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
     221             : 
     222             : private:
     223             :     GrDistanceFieldLCDTextGeoProc(GrResourceProvider*, GrColor, const SkMatrix& viewMatrix,
     224             :                                   sk_sp<GrTextureProxy> proxy, const GrSamplerParams& params,
     225             :                                   DistanceAdjust wa, uint32_t flags,
     226             :                                   bool usesLocalCoords);
     227             : 
     228             :     GrColor          fColor;
     229             :     SkMatrix         fViewMatrix;
     230             :     TextureSampler   fTextureSampler;
     231             :     DistanceAdjust   fDistanceAdjust;
     232             :     uint32_t         fFlags;
     233             :     const Attribute* fInPosition;
     234             :     const Attribute* fInColor;
     235             :     const Attribute* fInTextureCoords;
     236             :     bool             fUsesLocalCoords;
     237             : 
     238             :     GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
     239             : 
     240             :     typedef GrGeometryProcessor INHERITED;
     241             : };
     242             : 
     243             : #endif

Generated by: LCOV version 1.13