Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: src/gpu/effects/GrDistanceFieldTextureEffect.h

Issue 424103002: Add effect caching to distance field text. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Rebase to ToT Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW
« no previous file with comments | « src/gpu/GrDistanceFieldTextContext.cpp ('k') | src/gpu/effects/GrDistanceFieldTextureEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698