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

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: Fix initialization. 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,
robertphillips 2014/07/29 14:01:06 // The subset of the flags relevant to GrDistanceF
jvanverth1 2014/07/29 14:43:42 Done.
26 kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag,
robertphillips 2014/07/29 14:01:06 // The subset of the flags relevant to GrDistanceF
jvanverth1 2014/07/29 14:43:41 Done.
27 kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
28 kRectToRect_DistanceFieldEffectFlag |
29 kUseLCD_DistanceFieldEffectFlag |
30 kBGR_DistanceFieldEffectFlag,
31 };
32
17 /** 33 /**
18 * The output color of this effect is a modulation of the input color and a samp le from a 34 * 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). 35 * 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 36 * 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. 37 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
22 */ 38 */
23 class GrDistanceFieldTextureEffect : public GrVertexEffect { 39 class GrDistanceFieldTextureEffect : public GrVertexEffect {
24 public: 40 public:
25 #ifdef SK_GAMMA_APPLY_TO_A8 41 #ifdef SK_GAMMA_APPLY_TO_A8
26 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, 42 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
27 GrTexture* gamma, const GrTextureParams& gammaParams , float lum, 43 GrTexture* gamma, const GrTextureParams& gammaParams , float lum,
28 bool similarity) { 44 uint32_t flags) {
29 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gamm aParams, lum, 45 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gamm aParams, lum,
30 similarity)); 46 flags));
31 } 47 }
32 #else 48 #else
33 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, 49 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
34 bool similarity) { 50 uint32_t flags) {
35 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, similarit y)); 51 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, flags));
36 } 52 }
37 #endif 53 #endif
38 54
39 virtual ~GrDistanceFieldTextureEffect() {} 55 virtual ~GrDistanceFieldTextureEffect() {}
40 56
41 static const char* Name() { return "DistanceFieldTexture"; } 57 static const char* Name() { return "DistanceFieldTexture"; }
42 58
43 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; 59 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE;
44 #ifdef SK_GAMMA_APPLY_TO_A8 60 #ifdef SK_GAMMA_APPLY_TO_A8
45 float getLuminance() const { return fLuminance; } 61 float getLuminance() const { return fLuminance; }
46 #endif 62 #endif
47 bool isSimilarity() const { return fIsSimilarity; } 63 uint32_t getFlags() const { return fFlags; }
48 64
49 typedef GrGLDistanceFieldTextureEffect GLEffect; 65 typedef GrGLDistanceFieldTextureEffect GLEffect;
50 66
51 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 67 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
52 68
53 private: 69 private:
54 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para ms, 70 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& para ms,
55 #ifdef SK_GAMMA_APPLY_TO_A8 71 #ifdef SK_GAMMA_APPLY_TO_A8
56 GrTexture* gamma, const GrTextureParams& gammaP arams, float lum, 72 GrTexture* gamma, const GrTextureParams& gammaP arams, float lum,
57 #endif 73 #endif
58 bool uniformScale); 74 uint32_t flags);
59 75
60 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; 76 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
61 77
62 GrTextureAccess fTextureAccess; 78 GrTextureAccess fTextureAccess;
63 #ifdef SK_GAMMA_APPLY_TO_A8 79 #ifdef SK_GAMMA_APPLY_TO_A8
64 GrTextureAccess fGammaTextureAccess; 80 GrTextureAccess fGammaTextureAccess;
65 float fLuminance; 81 float fLuminance;
66 #endif 82 #endif
67 bool fIsSimilarity; 83 uint32_t fFlags;
68 84
69 GR_DECLARE_EFFECT_TEST; 85 GR_DECLARE_EFFECT_TEST;
70 86
71 typedef GrVertexEffect INHERITED; 87 typedef GrVertexEffect INHERITED;
72 }; 88 };
73 89
74 /** 90 /**
75 * The output color of this effect is a modulation of the input color and sample s from a 91 * 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. 92 * 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 93 * 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. 94 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
79 */ 95 */
80 class GrDistanceFieldLCDTextureEffect : public GrVertexEffect { 96 class GrDistanceFieldLCDTextureEffect : public GrVertexEffect {
81 public: 97 public:
82 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params, 98 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
83 GrTexture* gamma, const GrTextureParams& gammaParams , 99 GrTexture* gamma, const GrTextureParams& gammaParams ,
84 SkColor textColor, bool uniformScale, bool useBGR) { 100 SkColor textColor, uint32_t flags) {
85 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect, 101 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
86 (tex, params, gamma, gammaParams, textColor, uniformSc ale, useBGR)); 102 (tex, params, gamma, gammaParams, textColor, flags));
87 } 103 }
88 104
89 virtual ~GrDistanceFieldLCDTextureEffect() {} 105 virtual ~GrDistanceFieldLCDTextureEffect() {}
90 106
91 static const char* Name() { return "DistanceFieldLCDTexture"; } 107 static const char* Name() { return "DistanceFieldLCDTexture"; }
92 108
93 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; 109 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE;
94 GrColor getTextColor() const { return fTextColor; } 110 GrColor getTextColor() const { return fTextColor; }
95 bool isUniformScale() const { return fUniformScale; } 111 uint32_t getFlags() const { return fFlags; }
96 bool useBGR() const { return fUseBGR; }
97 112
98 typedef GrGLDistanceFieldLCDTextureEffect GLEffect; 113 typedef GrGLDistanceFieldLCDTextureEffect GLEffect;
99 114
100 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE; 115 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
101 116
102 private: 117 private:
103 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p arams, 118 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& p arams,
104 GrTexture* gamma, const GrTextureParams& gam maParams, 119 GrTexture* gamma, const GrTextureParams& gam maParams,
105 SkColor textColor, 120 SkColor textColor,
106 bool uniformScale, bool useBGR); 121 uint32_t flags);
107 122
108 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE; 123 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
109 124
110 GrTextureAccess fTextureAccess; 125 GrTextureAccess fTextureAccess;
111 GrTextureAccess fGammaTextureAccess; 126 GrTextureAccess fGammaTextureAccess;
112 GrColor fTextColor; 127 GrColor fTextColor;
113 bool fUniformScale; 128 uint32_t fFlags;
114 bool fUseBGR;
115 129
116 GR_DECLARE_EFFECT_TEST; 130 GR_DECLARE_EFFECT_TEST;
117 131
118 typedef GrVertexEffect INHERITED; 132 typedef GrVertexEffect INHERITED;
119 }; 133 };
120 134
121 #endif 135 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698