| Index: src/gpu/effects/GrDistanceFieldTextureEffect.h
|
| diff --git a/src/gpu/effects/GrDistanceFieldTextureEffect.h b/src/gpu/effects/GrDistanceFieldTextureEffect.h
|
| index 937908f9bc0a55fa75bcfc539596f2325b5b00c8..692290ccdb334f0443fb34da7c2c5c287f17f1d5 100644
|
| --- a/src/gpu/effects/GrDistanceFieldTextureEffect.h
|
| +++ b/src/gpu/effects/GrDistanceFieldTextureEffect.h
|
| @@ -18,12 +18,23 @@ class GrGLDistanceFieldLCDTextureEffect;
|
| * The output color of this effect is a modulation of the input color and a sample from a
|
| * distance field texture (using a smoothed step function near 0.5).
|
| * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
|
| - * coords are a custom attribute.
|
| + * coords are a custom attribute. Gamma correction is handled via a texture LUT.
|
| */
|
| class GrDistanceFieldTextureEffect : public GrVertexEffect {
|
| public:
|
| - static GrEffectRef* Create(GrTexture* tex, const GrTextureParams& params, bool similarity) {
|
| - AutoEffectUnref effect(SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, similarity)));
|
| +#ifdef SK_GAMMA_APPLY_TO_A8
|
| + static GrEffectRef* Create(GrTexture* tex, const GrTextureParams& params,
|
| + GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
|
| + bool similarity) {
|
| + AutoEffectUnref effect(SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params,
|
| + gamma, gammaParams, lum,
|
| + similarity)));
|
| +#else
|
| + static GrEffectRef* Create(GrTexture* tex, const GrTextureParams& params,
|
| + bool similarity) {
|
| + AutoEffectUnref effect(SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params,
|
| + similarity)));
|
| +#endif
|
| return CreateEffectRef(effect);
|
| }
|
|
|
| @@ -32,6 +43,9 @@ public:
|
| static const char* Name() { return "DistanceFieldTexture"; }
|
|
|
| virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
|
| +#ifdef SK_GAMMA_APPLY_TO_A8
|
| + float getLuminance() const { return fLuminance; }
|
| +#endif
|
| bool isSimilarity() const { return fIsSimilarity; }
|
|
|
| typedef GrGLDistanceFieldTextureEffect GLEffect;
|
| @@ -40,11 +54,18 @@ public:
|
|
|
| private:
|
| GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& params,
|
| +#ifdef SK_GAMMA_APPLY_TO_A8
|
| + GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
|
| +#endif
|
| bool uniformScale);
|
|
|
| virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
|
|
|
| GrTextureAccess fTextureAccess;
|
| +#ifdef SK_GAMMA_APPLY_TO_A8
|
| + GrTextureAccess fGammaTextureAccess;
|
| + float fLuminance;
|
| +#endif
|
| bool fIsSimilarity;
|
|
|
| GR_DECLARE_EFFECT_TEST;
|
| @@ -56,14 +77,17 @@ private:
|
| * The output color of this effect is a modulation of the input color and samples from a
|
| * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays.
|
| * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
|
| - * coords are a custom attribute.
|
| + * coords are a custom attribute. Gamma correction is handled via a texture LUT.
|
| */
|
| class GrDistanceFieldLCDTextureEffect : public GrVertexEffect {
|
| public:
|
| static GrEffectRef* Create(GrTexture* tex, const GrTextureParams& params,
|
| + GrTexture* gamma, const GrTextureParams& gammaParams,
|
| + SkColor textColor,
|
| bool uniformScale, bool useBGR) {
|
| AutoEffectUnref effect(SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
|
| - (tex, params, uniformScale, useBGR)));
|
| + (tex, params, gamma, gammaParams, textColor, uniformScale,
|
| + useBGR)));
|
| return CreateEffectRef(effect);
|
| }
|
|
|
| @@ -72,6 +96,7 @@ public:
|
| static const char* Name() { return "DistanceFieldLCDTexture"; }
|
|
|
| virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
|
| + GrColor getTextColor() const { return fTextColor; }
|
| bool isUniformScale() const { return fUniformScale; }
|
| bool useBGR() const { return fUseBGR; }
|
|
|
| @@ -81,11 +106,15 @@ public:
|
|
|
| private:
|
| GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& params,
|
| + GrTexture* gamma, const GrTextureParams& gammaParams,
|
| + SkColor textColor,
|
| bool uniformScale, bool useBGR);
|
|
|
| virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
|
|
|
| GrTextureAccess fTextureAccess;
|
| + GrTextureAccess fGammaTextureAccess;
|
| + GrColor fTextColor;
|
| bool fUniformScale;
|
| bool fUseBGR;
|
|
|
| @@ -94,5 +123,4 @@ private:
|
| typedef GrVertexEffect INHERITED;
|
| };
|
|
|
| -
|
| #endif
|
|
|