2 * Copyright 2013 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef GrDistanceFieldTextureEffect_DEFINED
9 #define GrDistanceFieldTextureEffect_DEFINED
12 #include "GrVertexEffect.h"
14 class GrGLDistanceFieldTextureEffect;
15 class GrGLDistanceFieldLCDTextureEffect;
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)
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,
36 * The output color of this effect is a modulation of the input color and a sample from a
37 * distance field texture (using a smoothed step function near 0.5).
38 * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
39 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
41 class GrDistanceFieldTextureEffect : public GrVertexEffect {
43 #ifdef SK_GAMMA_APPLY_TO_A8
44 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
45 GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
47 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gammaParams, lum,
51 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
53 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, flags));
57 virtual ~GrDistanceFieldTextureEffect() {}
59 static const char* Name() { return "DistanceFieldTexture"; }
61 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
62 #ifdef SK_GAMMA_APPLY_TO_A8
63 float getLuminance() const { return fLuminance; }
65 uint32_t getFlags() const { return fFlags; }
67 typedef GrGLDistanceFieldTextureEffect GLEffect;
69 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
72 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& params,
73 #ifdef SK_GAMMA_APPLY_TO_A8
74 GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
78 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
80 GrTextureAccess fTextureAccess;
81 #ifdef SK_GAMMA_APPLY_TO_A8
82 GrTextureAccess fGammaTextureAccess;
87 GR_DECLARE_EFFECT_TEST;
89 typedef GrVertexEffect INHERITED;
93 * The output color of this effect is a modulation of the input color and samples from a
94 * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays.
95 * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
96 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
98 class GrDistanceFieldLCDTextureEffect : public GrVertexEffect {
100 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
101 GrTexture* gamma, const GrTextureParams& gammaParams,
102 SkColor textColor, uint32_t flags) {
103 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
104 (tex, params, gamma, gammaParams, textColor, flags));
107 virtual ~GrDistanceFieldLCDTextureEffect() {}
109 static const char* Name() { return "DistanceFieldLCDTexture"; }
111 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
112 GrColor getTextColor() const { return fTextColor; }
113 uint32_t getFlags() const { return fFlags; }
115 typedef GrGLDistanceFieldLCDTextureEffect GLEffect;
117 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
120 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& params,
121 GrTexture* gamma, const GrTextureParams& gammaParams,
125 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
127 GrTextureAccess fTextureAccess;
128 GrTextureAccess fGammaTextureAccess;
132 GR_DECLARE_EFFECT_TEST;
134 typedef GrVertexEffect INHERITED;