| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2013 Google Inc. | 2  * Copyright 2013 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #ifndef GrDistanceFieldTextureEffect_DEFINED | 8 #ifndef GrDistanceFieldTextureEffect_DEFINED | 
| 9 #define GrDistanceFieldTextureEffect_DEFINED | 9 #define GrDistanceFieldTextureEffect_DEFINED | 
| 10 | 10 | 
| 11 #include "GrEffect.h" | 11 #include "GrEffect.h" | 
| 12 #include "GrVertexEffect.h" | 12 #include "GrVertexEffect.h" | 
| 13 | 13 | 
| 14 class GrGLDistanceFieldTextureEffect; | 14 class GrGLDistanceFieldTextureEffect; | 
| 15 class GrGLDistanceFieldLCDTextureEffect; | 15 class GrGLDistanceFieldLCDTextureEffect; | 
| 16 | 16 | 
|  | 17 enum GrDistanceFieldEffectFlags { | 
|  | 18     kSimilarity_DistanceFieldEffectFlag = 0x01,   // ctm is similarity matrix | 
|  | 19     kRectToRect_DistanceFieldEffectFlag = 0x02,   // ctm maps rects to rects | 
|  | 20     kUseLCD_DistanceFieldEffectFlag     = 0x04,   // use lcd text | 
|  | 21     kBGR_DistanceFieldEffectFlag        = 0x08,   // lcd display has bgr order | 
|  | 22     kPortrait_DistanceFieldEffectFlag   = 0x10,   // lcd display is in portrait 
     mode (not used yet) | 
|  | 23 | 
|  | 24     kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag 
     | | 
|  | 25                                             kRectToRect_DistanceFieldEffectFlag, | 
|  | 26     // The subset of the flags relevant to GrDistanceFieldTextureEffect | 
|  | 27     kNonLCD_DistanceFieldEffectMask       = kSimilarity_DistanceFieldEffectFlag, | 
|  | 28     // The subset of the flags relevant to GrDistanceFieldLCDTextureEffect | 
|  | 29     kLCD_DistanceFieldEffectMask          = kSimilarity_DistanceFieldEffectFlag 
     | | 
|  | 30                                             kRectToRect_DistanceFieldEffectFlag 
     | | 
|  | 31                                             kUseLCD_DistanceFieldEffectFlag | | 
|  | 32                                             kBGR_DistanceFieldEffectFlag, | 
|  | 33 }; | 
|  | 34 | 
| 17 /** | 35 /** | 
| 18  * The output color of this effect is a modulation of the input color and a samp
     le from a | 36  * The output color of this effect is a modulation of the input color and a samp
     le from a | 
| 19  * distance field texture (using a smoothed step function near 0.5). | 37  * distance field texture (using a smoothed step function near 0.5). | 
| 20  * It allows explicit specification of the filtering and wrap modes (GrTexturePa
     rams). The input | 38  * It allows explicit specification of the filtering and wrap modes (GrTexturePa
     rams). The input | 
| 21  * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 39  * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 
| 22  */ | 40  */ | 
| 23 class GrDistanceFieldTextureEffect : public GrVertexEffect { | 41 class GrDistanceFieldTextureEffect : public GrVertexEffect { | 
| 24 public: | 42 public: | 
| 25 #ifdef SK_GAMMA_APPLY_TO_A8 | 43 #ifdef SK_GAMMA_APPLY_TO_A8 | 
| 26     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 44     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 
| 27                             GrTexture* gamma, const GrTextureParams& gammaParams
     , float lum, | 45                             GrTexture* gamma, const GrTextureParams& gammaParams
     , float lum, | 
| 28                             bool similarity) { | 46                             uint32_t flags) { | 
| 29        return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gamm
     aParams, lum, | 47        return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gamm
     aParams, lum, | 
| 30                                                         similarity)); | 48                                                         flags)); | 
| 31     } | 49     } | 
| 32 #else | 50 #else | 
| 33     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 51     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 
| 34                             bool similarity) { | 52                             uint32_t flags) { | 
| 35         return  SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, similarit
     y)); | 53         return  SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, flags)); | 
| 36     } | 54     } | 
| 37 #endif | 55 #endif | 
| 38 | 56 | 
| 39     virtual ~GrDistanceFieldTextureEffect() {} | 57     virtual ~GrDistanceFieldTextureEffect() {} | 
| 40 | 58 | 
| 41     static const char* Name() { return "DistanceFieldTexture"; } | 59     static const char* Name() { return "DistanceFieldTexture"; } | 
| 42 | 60 | 
| 43     virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags
     ) const SK_OVERRIDE; | 61     virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags
     ) const SK_OVERRIDE; | 
| 44 #ifdef SK_GAMMA_APPLY_TO_A8 | 62 #ifdef SK_GAMMA_APPLY_TO_A8 | 
| 45     float getLuminance() const { return fLuminance; } | 63     float getLuminance() const { return fLuminance; } | 
| 46 #endif | 64 #endif | 
| 47     bool isSimilarity() const { return fIsSimilarity; } | 65     uint32_t getFlags() const { return fFlags; } | 
| 48 | 66 | 
| 49     typedef GrGLDistanceFieldTextureEffect GLEffect; | 67     typedef GrGLDistanceFieldTextureEffect GLEffect; | 
| 50 | 68 | 
| 51     virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; | 69     virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; | 
| 52 | 70 | 
| 53 private: | 71 private: | 
| 54     GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para
     ms, | 72     GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para
     ms, | 
| 55 #ifdef SK_GAMMA_APPLY_TO_A8 | 73 #ifdef SK_GAMMA_APPLY_TO_A8 | 
| 56                                  GrTexture* gamma, const GrTextureParams& gammaP
     arams, float lum, | 74                                  GrTexture* gamma, const GrTextureParams& gammaP
     arams, float lum, | 
| 57 #endif | 75 #endif | 
| 58                                  bool uniformScale); | 76                                  uint32_t flags); | 
| 59 | 77 | 
| 60     virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; | 78     virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; | 
| 61 | 79 | 
| 62     GrTextureAccess fTextureAccess; | 80     GrTextureAccess fTextureAccess; | 
| 63 #ifdef SK_GAMMA_APPLY_TO_A8 | 81 #ifdef SK_GAMMA_APPLY_TO_A8 | 
| 64     GrTextureAccess fGammaTextureAccess; | 82     GrTextureAccess fGammaTextureAccess; | 
| 65     float           fLuminance; | 83     float           fLuminance; | 
| 66 #endif | 84 #endif | 
| 67     bool            fIsSimilarity; | 85     uint32_t        fFlags; | 
| 68 | 86 | 
| 69     GR_DECLARE_EFFECT_TEST; | 87     GR_DECLARE_EFFECT_TEST; | 
| 70 | 88 | 
| 71     typedef GrVertexEffect INHERITED; | 89     typedef GrVertexEffect INHERITED; | 
| 72 }; | 90 }; | 
| 73 | 91 | 
| 74 /** | 92 /** | 
| 75  * The output color of this effect is a modulation of the input color and sample
     s from a | 93  * The output color of this effect is a modulation of the input color and sample
     s from a | 
| 76  * distance field texture (using a smoothed step function near 0.5), adjusted fo
     r LCD displays. | 94  * distance field texture (using a smoothed step function near 0.5), adjusted fo
     r LCD displays. | 
| 77  * It allows explicit specification of the filtering and wrap modes (GrTexturePa
     rams). The input | 95  * It allows explicit specification of the filtering and wrap modes (GrTexturePa
     rams). The input | 
| 78  * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 96  * coords are a custom attribute. Gamma correction is handled via a texture LUT. | 
| 79  */ | 97  */ | 
| 80 class GrDistanceFieldLCDTextureEffect : public GrVertexEffect { | 98 class GrDistanceFieldLCDTextureEffect : public GrVertexEffect { | 
| 81 public: | 99 public: | 
| 82     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 100     static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, | 
| 83                             GrTexture* gamma, const GrTextureParams& gammaParams
     , | 101                             GrTexture* gamma, const GrTextureParams& gammaParams
     , | 
| 84                             SkColor textColor, bool uniformScale, bool useBGR) { | 102                             SkColor textColor, uint32_t flags) { | 
| 85         return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, | 103         return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, | 
| 86                           (tex, params, gamma, gammaParams, textColor, uniformSc
     ale, useBGR)); | 104                           (tex, params, gamma, gammaParams, textColor, flags)); | 
| 87     } | 105     } | 
| 88 | 106 | 
| 89     virtual ~GrDistanceFieldLCDTextureEffect() {} | 107     virtual ~GrDistanceFieldLCDTextureEffect() {} | 
| 90 | 108 | 
| 91     static const char* Name() { return "DistanceFieldLCDTexture"; } | 109     static const char* Name() { return "DistanceFieldLCDTexture"; } | 
| 92 | 110 | 
| 93     virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags
     ) const SK_OVERRIDE; | 111     virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags
     ) const SK_OVERRIDE; | 
| 94     GrColor getTextColor() const { return fTextColor; } | 112     GrColor getTextColor() const { return fTextColor; } | 
| 95     bool isUniformScale() const { return fUniformScale; } | 113     uint32_t getFlags() const { return fFlags; } | 
| 96     bool useBGR() const { return fUseBGR; } |  | 
| 97 | 114 | 
| 98     typedef GrGLDistanceFieldLCDTextureEffect GLEffect; | 115     typedef GrGLDistanceFieldLCDTextureEffect GLEffect; | 
| 99 | 116 | 
| 100     virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; | 117     virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; | 
| 101 | 118 | 
| 102 private: | 119 private: | 
| 103     GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p
     arams, | 120     GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p
     arams, | 
| 104                                     GrTexture* gamma, const GrTextureParams& gam
     maParams, | 121                                     GrTexture* gamma, const GrTextureParams& gam
     maParams, | 
| 105                                     SkColor textColor, | 122                                     SkColor textColor, | 
| 106                                     bool uniformScale, bool useBGR); | 123                                     uint32_t flags); | 
| 107 | 124 | 
| 108     virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; | 125     virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; | 
| 109 | 126 | 
| 110     GrTextureAccess fTextureAccess; | 127     GrTextureAccess fTextureAccess; | 
| 111     GrTextureAccess fGammaTextureAccess; | 128     GrTextureAccess fGammaTextureAccess; | 
| 112     GrColor         fTextColor; | 129     GrColor         fTextColor; | 
| 113     bool            fUniformScale; | 130     uint32_t        fFlags; | 
| 114     bool            fUseBGR; |  | 
| 115 | 131 | 
| 116     GR_DECLARE_EFFECT_TEST; | 132     GR_DECLARE_EFFECT_TEST; | 
| 117 | 133 | 
| 118     typedef GrVertexEffect INHERITED; | 134     typedef GrVertexEffect INHERITED; | 
| 119 }; | 135 }; | 
| 120 | 136 | 
| 121 #endif | 137 #endif | 
| OLD | NEW | 
|---|