blob: 38e41e5590d6d801304cdc3d5d37a6895b8907e6 [file] [log] [blame]
jvanverth@google.comd830d132013-11-11 20:54:09 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrDistanceFieldTextureEffect_DEFINED
9#define GrDistanceFieldTextureEffect_DEFINED
10
11#include "GrEffect.h"
12#include "GrVertexEffect.h"
13
14class GrGLDistanceFieldTextureEffect;
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000015class GrGLDistanceFieldLCDTextureEffect;
jvanverth@google.comd830d132013-11-11 20:54:09 +000016
17/**
skia.committer@gmail.com11a253b2013-11-12 07:02:05 +000018 * The output color of this effect is a modulation of the input color and a sample from a
jvanverth@google.comd830d132013-11-11 20:54:09 +000019 * distance field texture (using a smoothed step function near 0.5).
20 * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
jvanverth2d2a68c2014-06-10 06:42:56 -070021 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
jvanverth@google.comd830d132013-11-11 20:54:09 +000022 */
23class GrDistanceFieldTextureEffect : public GrVertexEffect {
24public:
jvanverth2d2a68c2014-06-10 06:42:56 -070025#ifdef SK_GAMMA_APPLY_TO_A8
bsalomon83d081a2014-07-08 09:56:10 -070026 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
27 GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
28 bool similarity) {
bsalomon55fad7a2014-07-08 07:34:20 -070029 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, gamma, gammaParams, lum,
30 similarity));
31 }
jvanverth2d2a68c2014-06-10 06:42:56 -070032#else
bsalomon83d081a2014-07-08 09:56:10 -070033 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
34 bool similarity) {
bsalomon55fad7a2014-07-08 07:34:20 -070035 return SkNEW_ARGS(GrDistanceFieldTextureEffect, (tex, params, similarity));
jvanverth@google.comd830d132013-11-11 20:54:09 +000036 }
bsalomon55fad7a2014-07-08 07:34:20 -070037#endif
jvanverth@google.comd830d132013-11-11 20:54:09 +000038
39 virtual ~GrDistanceFieldTextureEffect() {}
40
commit-bot@chromium.org6c89c342014-02-14 21:48:29 +000041 static const char* Name() { return "DistanceFieldTexture"; }
jvanverth@google.comd830d132013-11-11 20:54:09 +000042
43 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
jvanverth2d2a68c2014-06-10 06:42:56 -070044#ifdef SK_GAMMA_APPLY_TO_A8
45 float getLuminance() const { return fLuminance; }
46#endif
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000047 bool isSimilarity() const { return fIsSimilarity; }
jvanverth@google.comd830d132013-11-11 20:54:09 +000048
49 typedef GrGLDistanceFieldTextureEffect GLEffect;
50
51 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
52
53private:
skia.committer@gmail.coma3b53272014-02-15 03:02:15 +000054 GrDistanceFieldTextureEffect(GrTexture* texture, const GrTextureParams& params,
jvanverth2d2a68c2014-06-10 06:42:56 -070055#ifdef SK_GAMMA_APPLY_TO_A8
56 GrTexture* gamma, const GrTextureParams& gammaParams, float lum,
57#endif
commit-bot@chromium.org4362a382014-03-26 19:49:03 +000058 bool uniformScale);
jvanverth@google.comd830d132013-11-11 20:54:09 +000059
60 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
61
62 GrTextureAccess fTextureAccess;
jvanverth2d2a68c2014-06-10 06:42:56 -070063#ifdef SK_GAMMA_APPLY_TO_A8
64 GrTextureAccess fGammaTextureAccess;
65 float fLuminance;
66#endif
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000067 bool fIsSimilarity;
jvanverth@google.comd830d132013-11-11 20:54:09 +000068
69 GR_DECLARE_EFFECT_TEST;
70
71 typedef GrVertexEffect INHERITED;
72};
73
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000074/**
75 * The output color of this effect is a modulation of the input color and samples from a
76 * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays.
77 * It allows explicit specification of the filtering and wrap modes (GrTextureParams). The input
jvanverth2d2a68c2014-06-10 06:42:56 -070078 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000079 */
80class GrDistanceFieldLCDTextureEffect : public GrVertexEffect {
81public:
bsalomon83d081a2014-07-08 09:56:10 -070082 static GrEffect* Create(GrTexture* tex, const GrTextureParams& params,
83 GrTexture* gamma, const GrTextureParams& gammaParams,
84 SkColor textColor, bool uniformScale, bool useBGR) {
bsalomon55fad7a2014-07-08 07:34:20 -070085 return SkNEW_ARGS(GrDistanceFieldLCDTextureEffect,
86 (tex, params, gamma, gammaParams, textColor, uniformScale, useBGR));
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000087 }
88
89 virtual ~GrDistanceFieldLCDTextureEffect() {}
90
91 static const char* Name() { return "DistanceFieldLCDTexture"; }
92
93 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags) const SK_OVERRIDE;
jvanverth2d2a68c2014-06-10 06:42:56 -070094 GrColor getTextColor() const { return fTextColor; }
commit-bot@chromium.org609ced42014-04-03 18:25:48 +000095 bool isUniformScale() const { return fUniformScale; }
96 bool useBGR() const { return fUseBGR; }
97
98 typedef GrGLDistanceFieldLCDTextureEffect GLEffect;
99
100 virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE;
101
102private:
103 GrDistanceFieldLCDTextureEffect(GrTexture* texture, const GrTextureParams& params,
jvanverth2d2a68c2014-06-10 06:42:56 -0700104 GrTexture* gamma, const GrTextureParams& gammaParams,
105 SkColor textColor,
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000106 bool uniformScale, bool useBGR);
107
108 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE;
109
110 GrTextureAccess fTextureAccess;
jvanverth2d2a68c2014-06-10 06:42:56 -0700111 GrTextureAccess fGammaTextureAccess;
112 GrColor fTextColor;
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000113 bool fUniformScale;
114 bool fUseBGR;
115
116 GR_DECLARE_EFFECT_TEST;
117
118 typedef GrVertexEffect INHERITED;
119};
120
jvanverth@google.comd830d132013-11-11 20:54:09 +0000121#endif