blob: 20bb6262ae68abbe8916fb0f1c51331ee9eb6055 [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
jvanverth502286d2015-04-08 12:37:51 -07008#ifndef GrDistanceFieldGeoProc_DEFINED
9#define GrDistanceFieldGeoProc_DEFINED
jvanverth@google.comd830d132013-11-11 20:54:09 +000010
Mike Kleinc0bd9f92019-04-23 12:05:21 -050011#include "src/gpu/GrGeometryProcessor.h"
12#include "src/gpu/GrProcessor.h"
jvanverth@google.comd830d132013-11-11 20:54:09 +000013
jvanverth502286d2015-04-08 12:37:51 -070014class GrGLDistanceFieldA8TextGeoProc;
15class GrGLDistanceFieldPathGeoProc;
16class GrGLDistanceFieldLCDTextGeoProc;
Brian Salomon1127c0b2019-06-13 20:22:10 +000017class GrInvariantOutput;
jvanverth@google.comd830d132013-11-11 20:54:09 +000018
jvanverth78f07182014-07-30 06:17:59 -070019enum GrDistanceFieldEffectFlags {
brianosmanb461d342016-04-13 13:10:14 -070020 kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix
21 kScaleOnly_DistanceFieldEffectFlag = 0x02, // ctm has only scale and translate
Brian Salomon5c6ac642017-12-19 11:09:32 -050022 kPerspective_DistanceFieldEffectFlag = 0x04, // ctm has perspective (and positions are x,y,w)
23 kUseLCD_DistanceFieldEffectFlag = 0x08, // use lcd text
24 kBGR_DistanceFieldEffectFlag = 0x10, // lcd display has bgr order
25 kPortrait_DistanceFieldEffectFlag = 0x20, // lcd display is in portrait mode (not used yet)
26 kGammaCorrect_DistanceFieldEffectFlag = 0x40, // assume gamma-correct output (linear blending)
27 kAliased_DistanceFieldEffectFlag = 0x80, // monochrome output
jvanverth6d22eca2014-10-28 11:10:48 -070028
Brian Salomon5c6ac642017-12-19 11:09:32 -050029 kInvalid_DistanceFieldEffectFlag = 0x100, // invalid state (for initialization)
halcanary9d524f22016-03-29 09:03:52 -070030
jvanverth78f07182014-07-30 06:17:59 -070031 kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
jvanverthcf371bb2016-03-10 11:10:43 -080032 kScaleOnly_DistanceFieldEffectFlag,
jvanverth502286d2015-04-08 12:37:51 -070033 // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc
jvanverthcf371bb2016-03-10 11:10:43 -080034 kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
brianosman0586f5c2016-04-12 12:48:21 -070035 kScaleOnly_DistanceFieldEffectFlag |
Brian Salomon5c6ac642017-12-19 11:09:32 -050036 kPerspective_DistanceFieldEffectFlag |
Jim Van Verth90e89b32017-07-06 16:36:55 -040037 kGammaCorrect_DistanceFieldEffectFlag |
38 kAliased_DistanceFieldEffectFlag,
jvanverth502286d2015-04-08 12:37:51 -070039 // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc
jvanverth78f07182014-07-30 06:17:59 -070040 kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag |
jvanverthcf371bb2016-03-10 11:10:43 -080041 kScaleOnly_DistanceFieldEffectFlag |
Brian Salomon5c6ac642017-12-19 11:09:32 -050042 kPerspective_DistanceFieldEffectFlag |
jvanverth78f07182014-07-30 06:17:59 -070043 kUseLCD_DistanceFieldEffectFlag |
brianosman0586f5c2016-04-12 12:48:21 -070044 kBGR_DistanceFieldEffectFlag |
brianosmanb461d342016-04-13 13:10:14 -070045 kGammaCorrect_DistanceFieldEffectFlag,
jvanverth78f07182014-07-30 06:17:59 -070046};
47
jvanverth@google.comd830d132013-11-11 20:54:09 +000048/**
skia.committer@gmail.com11a253b2013-11-12 07:02:05 +000049 * 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 +000050 * distance field texture (using a smoothed step function near 0.5).
Brian Salomon2bbdcc42017-09-07 12:36:34 -040051 * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input
jvanverth2d2a68c2014-06-10 06:42:56 -070052 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
jvanverth@google.comd830d132013-11-11 20:54:09 +000053 */
jvanverth502286d2015-04-08 12:37:51 -070054class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor {
jvanverth@google.comd830d132013-11-11 20:54:09 +000055public:
Brian Salomon7eae3e02018-08-07 14:02:38 +000056 static constexpr int kMaxTextures = 4;
57
Brian Salomon5c6ac642017-12-19 11:09:32 -050058 /** The local matrix should be identity if local coords are not required by the GrPipeline. */
jvanverth2d2a68c2014-06-10 06:42:56 -070059#ifdef SK_GAMMA_APPLY_TO_A8
Brian Osman4a3f5c82018-09-18 16:16:38 -040060 static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps& caps,
61 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -040062 int numActiveProxies,
Brian Salomon2bbdcc42017-09-07 12:36:34 -040063 const GrSamplerState& params, float lum, uint32_t flags,
Brian Salomon5c6ac642017-12-19 11:09:32 -050064 const SkMatrix& localMatrixIfUsesLocalCoords) {
65 return sk_sp<GrGeometryProcessor>(new GrDistanceFieldA8TextGeoProc(
Brian Osman4a3f5c82018-09-18 16:16:38 -040066 caps, proxies, numActiveProxies, params, lum, flags, localMatrixIfUsesLocalCoords));
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -050067 }
jvanverth2d2a68c2014-06-10 06:42:56 -070068#else
Brian Osman4a3f5c82018-09-18 16:16:38 -040069 static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps& caps,
70 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -040071 int numActiveProxies,
Brian Salomon2bbdcc42017-09-07 12:36:34 -040072 const GrSamplerState& params, uint32_t flags,
Brian Salomon5c6ac642017-12-19 11:09:32 -050073 const SkMatrix& localMatrixIfUsesLocalCoords) {
74 return sk_sp<GrGeometryProcessor>(new GrDistanceFieldA8TextGeoProc(
Brian Osman4a3f5c82018-09-18 16:16:38 -040075 caps, proxies, numActiveProxies, params, flags, localMatrixIfUsesLocalCoords));
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -050076 }
bsalomon55fad7a2014-07-08 07:34:20 -070077#endif
jvanverth@google.comd830d132013-11-11 20:54:09 +000078
Brian Salomond3b65972017-03-22 12:05:03 -040079 ~GrDistanceFieldA8TextGeoProc() override {}
jvanverth@google.comd830d132013-11-11 20:54:09 +000080
bsalomon32d1e952016-09-15 07:29:52 -070081 const char* name() const override { return "DistanceFieldA8Text"; }
jvanverth@google.comd830d132013-11-11 20:54:09 +000082
Brian Salomon92be2f72018-06-19 14:33:47 -040083 const Attribute& inPosition() const { return fInPosition; }
Brian Osmanf04fb3c2018-11-12 15:34:00 -050084 const Attribute& inColor() const { return fInColor; }
Brian Osman4a3f5c82018-09-18 16:16:38 -040085 const Attribute& inTextureCoords() const { return fInTextureCoords; }
Brian Salomon5c6ac642017-12-19 11:09:32 -050086 const SkMatrix& localMatrix() const { return fLocalMatrix; }
jvanverth2d2a68c2014-06-10 06:42:56 -070087#ifdef SK_GAMMA_APPLY_TO_A8
jvanverth21deace2015-04-01 12:43:48 -070088 float getDistanceAdjust() const { return fDistanceAdjust; }
jvanverth2d2a68c2014-06-10 06:42:56 -070089#endif
jvanverth78f07182014-07-30 06:17:59 -070090 uint32_t getFlags() const { return fFlags; }
Brian Salomon7eae3e02018-08-07 14:02:38 +000091 const SkISize& atlasSize() const { return fAtlasSize; }
jvanverth@google.comd830d132013-11-11 20:54:09 +000092
Robert Phillips4bc70112018-03-01 10:24:02 -050093 void addNewProxies(const sk_sp<GrTextureProxy>* proxies, int numProxies, const GrSamplerState&);
Jim Van Vertheafa64b2017-09-18 10:05:00 -040094
Brian Salomon94efbf52016-11-29 13:43:05 -050095 void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
jvanverth@google.comd830d132013-11-11 20:54:09 +000096
Brian Salomon94efbf52016-11-29 13:43:05 -050097 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
jvanverth@google.comd830d132013-11-11 20:54:09 +000098
99private:
Brian Osman4a3f5c82018-09-18 16:16:38 -0400100 GrDistanceFieldA8TextGeoProc(const GrShaderCaps& caps,
101 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -0400102 int numActiveProxies,
Brian Salomon2bbdcc42017-09-07 12:36:34 -0400103 const GrSamplerState& params,
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500104#ifdef SK_GAMMA_APPLY_TO_A8
105 float distanceAdjust,
106#endif
Brian Salomon5c6ac642017-12-19 11:09:32 -0500107 uint32_t flags, const SkMatrix& localMatrix);
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500108
Brian Salomonf7dcd762018-07-30 14:48:15 -0400109 const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
110
Jim Van Vertha950b632017-09-12 11:54:11 -0400111 TextureSampler fTextureSamplers[kMaxTextures];
Brian Salomon7eae3e02018-08-07 14:02:38 +0000112 SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
Brian Salomon92be2f72018-06-19 14:33:47 -0400113 SkMatrix fLocalMatrix;
114 Attribute fInPosition;
Brian Osmanf04fb3c2018-11-12 15:34:00 -0500115 Attribute fInColor;
Brian Osman4a3f5c82018-09-18 16:16:38 -0400116 Attribute fInTextureCoords;
Brian Salomon92be2f72018-06-19 14:33:47 -0400117 uint32_t fFlags;
jvanverth2d2a68c2014-06-10 06:42:56 -0700118#ifdef SK_GAMMA_APPLY_TO_A8
jvanverth21deace2015-04-01 12:43:48 -0700119 float fDistanceAdjust;
jvanverth2d2a68c2014-06-10 06:42:56 -0700120#endif
Brian Salomon92be2f72018-06-19 14:33:47 -0400121
Brian Salomon0c26a9d2017-07-06 10:09:38 -0400122 GR_DECLARE_GEOMETRY_PROCESSOR_TEST
jvanverth@google.comd830d132013-11-11 20:54:09 +0000123
jvanverthfa38a302014-10-06 05:59:05 -0700124 typedef GrGeometryProcessor INHERITED;
125};
126
jvanverthfa38a302014-10-06 05:59:05 -0700127/**
Brian Salomon2bbdcc42017-09-07 12:36:34 -0400128 * The output color of this effect is a modulation of the input color and a sample from a
129 * distance field texture (using a smoothed step function near 0.5).
130 * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input
131 * coords are a custom attribute. No gamma correct blending is applied. Used for paths only.
132 */
jvanverth502286d2015-04-08 12:37:51 -0700133class GrDistanceFieldPathGeoProc : public GrGeometryProcessor {
jvanverthfa38a302014-10-06 05:59:05 -0700134public:
Brian Salomon7eae3e02018-08-07 14:02:38 +0000135 static constexpr int kMaxTextures = 4;
Jim Van Vertha950b632017-09-12 11:54:11 -0400136
Brian Salomon5c6ac642017-12-19 11:09:32 -0500137 /** The local matrix should be identity if local coords are not required by the GrPipeline. */
Brian Osman4a3f5c82018-09-18 16:16:38 -0400138 static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps& caps,
139 const SkMatrix& matrix,
Brian Osmanc906d252018-12-04 11:17:46 -0500140 bool wideColor,
Robert Phillips4bc70112018-03-01 10:24:02 -0500141 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -0400142 int numActiveProxies,
Jim Van Verth5698c8a2017-10-12 10:18:44 -0400143 const GrSamplerState& params, uint32_t flags) {
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500144 return sk_sp<GrGeometryProcessor>(
Brian Osmanc906d252018-12-04 11:17:46 -0500145 new GrDistanceFieldPathGeoProc(caps, matrix, wideColor, proxies, numActiveProxies,
146 params, flags));
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500147 }
148
149 ~GrDistanceFieldPathGeoProc() override {}
jvanverthfa38a302014-10-06 05:59:05 -0700150
bsalomon32d1e952016-09-15 07:29:52 -0700151 const char* name() const override { return "DistanceFieldPath"; }
jvanverthfa38a302014-10-06 05:59:05 -0700152
Brian Osmanf04fb3c2018-11-12 15:34:00 -0500153 const Attribute& inPosition() const { return fInPosition; }
154 const Attribute& inColor() const { return fInColor; }
Brian Osman4a3f5c82018-09-18 16:16:38 -0400155 const Attribute& inTextureCoords() const { return fInTextureCoords; }
Jim Van Verth5698c8a2017-10-12 10:18:44 -0400156 const SkMatrix& matrix() const { return fMatrix; }
jvanverthfa38a302014-10-06 05:59:05 -0700157 uint32_t getFlags() const { return fFlags; }
Brian Salomon7eae3e02018-08-07 14:02:38 +0000158 const SkISize& atlasSize() const { return fAtlasSize; }
jvanverthfa38a302014-10-06 05:59:05 -0700159
Jim Van Verthcbeae032018-05-16 14:54:41 -0400160 void addNewProxies(const sk_sp<GrTextureProxy>*, int numActiveProxies, const GrSamplerState&);
Jim Van Vertheafa64b2017-09-18 10:05:00 -0400161
Brian Salomon94efbf52016-11-29 13:43:05 -0500162 void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
jvanverthfa38a302014-10-06 05:59:05 -0700163
Brian Salomon94efbf52016-11-29 13:43:05 -0500164 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
jvanverthfa38a302014-10-06 05:59:05 -0700165
166private:
Brian Osman4a3f5c82018-09-18 16:16:38 -0400167 GrDistanceFieldPathGeoProc(const GrShaderCaps& caps,
168 const SkMatrix& matrix,
Brian Osmanc906d252018-12-04 11:17:46 -0500169 bool wideColor,
Robert Phillips4bc70112018-03-01 10:24:02 -0500170 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -0400171 int numActiveProxies,
Jim Van Verth5698c8a2017-10-12 10:18:44 -0400172 const GrSamplerState&, uint32_t flags);
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500173
Brian Salomonf7dcd762018-07-30 14:48:15 -0400174 const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
Brian Salomon92be2f72018-06-19 14:33:47 -0400175
Brian Salomon7eae3e02018-08-07 14:02:38 +0000176 SkMatrix fMatrix; // view matrix if perspective, local matrix otherwise
Jim Van Vertha950b632017-09-12 11:54:11 -0400177 TextureSampler fTextureSamplers[kMaxTextures];
Brian Salomon7eae3e02018-08-07 14:02:38 +0000178 SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
Brian Osmanf04fb3c2018-11-12 15:34:00 -0500179 Attribute fInPosition;
180 Attribute fInColor;
Brian Osman4a3f5c82018-09-18 16:16:38 -0400181 Attribute fInTextureCoords;
joshualitt88c23fc2015-05-13 14:18:07 -0700182 uint32_t fFlags;
jvanverthfa38a302014-10-06 05:59:05 -0700183
Brian Salomon0c26a9d2017-07-06 10:09:38 -0400184 GR_DECLARE_GEOMETRY_PROCESSOR_TEST
jvanverthfa38a302014-10-06 05:59:05 -0700185
186 typedef GrGeometryProcessor INHERITED;
jvanverth@google.comd830d132013-11-11 20:54:09 +0000187};
188
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000189/**
190 * The output color of this effect is a modulation of the input color and samples from a
191 * distance field texture (using a smoothed step function near 0.5), adjusted for LCD displays.
Brian Salomon2bbdcc42017-09-07 12:36:34 -0400192 * It allows explicit specification of the filtering and wrap modes (GrSamplerState). The input
jvanverth2d2a68c2014-06-10 06:42:56 -0700193 * coords are a custom attribute. Gamma correction is handled via a texture LUT.
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000194 */
jvanverth502286d2015-04-08 12:37:51 -0700195class GrDistanceFieldLCDTextGeoProc : public GrGeometryProcessor {
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000196public:
Brian Salomon7eae3e02018-08-07 14:02:38 +0000197 static constexpr int kMaxTextures = 4;
198
jvanverth21deace2015-04-01 12:43:48 -0700199 struct DistanceAdjust {
200 SkScalar fR, fG, fB;
201 static DistanceAdjust Make(SkScalar r, SkScalar g, SkScalar b) {
202 DistanceAdjust result;
203 result.fR = r; result.fG = g; result.fB = b;
204 return result;
205 }
206 bool operator==(const DistanceAdjust& wa) const {
207 return (fR == wa.fR && fG == wa.fG && fB == wa.fB);
208 }
209 bool operator!=(const DistanceAdjust& wa) const {
210 return !(*this == wa);
211 }
212 };
213
Brian Osman4a3f5c82018-09-18 16:16:38 -0400214 static sk_sp<GrGeometryProcessor> Make(const GrShaderCaps& caps,
215 const sk_sp<GrTextureProxy>* proxies,
Jim Van Verthcbeae032018-05-16 14:54:41 -0400216 int numActiveProxies,
Brian Salomon2bbdcc42017-09-07 12:36:34 -0400217 const GrSamplerState& params,
Robert Phillipsfbcef6e2017-06-15 12:07:18 -0400218 DistanceAdjust distanceAdjust,
219 uint32_t flags,
Brian Salomon5c6ac642017-12-19 11:09:32 -0500220 const SkMatrix& localMatrixIfUsesLocalCoords) {
Jim Van Verthcbeae032018-05-16 14:54:41 -0400221 return sk_sp<GrGeometryProcessor>(
Brian Osman4a3f5c82018-09-18 16:16:38 -0400222 new GrDistanceFieldLCDTextGeoProc(caps, proxies, numActiveProxies, params,
223 distanceAdjust, flags, localMatrixIfUsesLocalCoords));
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500224 }
225
226 ~GrDistanceFieldLCDTextGeoProc() override {}
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000227
bsalomon32d1e952016-09-15 07:29:52 -0700228 const char* name() const override { return "DistanceFieldLCDText"; }
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000229
Brian Salomon92be2f72018-06-19 14:33:47 -0400230 const Attribute& inPosition() const { return fInPosition; }
Brian Osmanf04fb3c2018-11-12 15:34:00 -0500231 const Attribute& inColor() const { return fInColor; }
Brian Osman4a3f5c82018-09-18 16:16:38 -0400232 const Attribute& inTextureCoords() const { return fInTextureCoords; }
jvanverth21deace2015-04-01 12:43:48 -0700233 DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; }
jvanverth78f07182014-07-30 06:17:59 -0700234 uint32_t getFlags() const { return fFlags; }
Brian Salomon5c6ac642017-12-19 11:09:32 -0500235 const SkMatrix& localMatrix() const { return fLocalMatrix; }
Brian Salomon7eae3e02018-08-07 14:02:38 +0000236 const SkISize& atlasSize() const { return fAtlasSize; }
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000237
Jim Van Verthcbeae032018-05-16 14:54:41 -0400238 void addNewProxies(const sk_sp<GrTextureProxy>*, int numActiveProxies, const GrSamplerState&);
Jim Van Vertheafa64b2017-09-18 10:05:00 -0400239
Brian Salomon94efbf52016-11-29 13:43:05 -0500240 void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000241
Brian Salomon94efbf52016-11-29 13:43:05 -0500242 GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override;
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000243
244private:
Brian Osman4a3f5c82018-09-18 16:16:38 -0400245 GrDistanceFieldLCDTextGeoProc(const GrShaderCaps& caps, const sk_sp<GrTextureProxy>* proxies,
246 int numActiveProxies, const GrSamplerState& params,
247 DistanceAdjust wa, uint32_t flags, const SkMatrix& localMatrix);
Robert Phillipsdbc8eeb2017-02-21 10:04:31 -0500248
Brian Salomonf7dcd762018-07-30 14:48:15 -0400249 const TextureSampler& onTextureSampler(int i) const override { return fTextureSamplers[i]; }
Brian Salomon92be2f72018-06-19 14:33:47 -0400250
Jim Van Vertha950b632017-09-12 11:54:11 -0400251 TextureSampler fTextureSamplers[kMaxTextures];
Brian Salomon7eae3e02018-08-07 14:02:38 +0000252 SkISize fAtlasSize; // size for all textures used with fTextureSamplers[].
Mike Klein5045e502018-06-19 01:40:57 +0000253 const SkMatrix fLocalMatrix;
Brian Salomon92be2f72018-06-19 14:33:47 -0400254 DistanceAdjust fDistanceAdjust;
255 Attribute fInPosition;
Brian Osmanf04fb3c2018-11-12 15:34:00 -0500256 Attribute fInColor;
Brian Osman4a3f5c82018-09-18 16:16:38 -0400257 Attribute fInTextureCoords;
Brian Salomon92be2f72018-06-19 14:33:47 -0400258 uint32_t fFlags;
259
Brian Salomon0c26a9d2017-07-06 10:09:38 -0400260 GR_DECLARE_GEOMETRY_PROCESSOR_TEST
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000261
jvanverthfa38a302014-10-06 05:59:05 -0700262 typedef GrGeometryProcessor INHERITED;
commit-bot@chromium.org609ced42014-04-03 18:25:48 +0000263};
264
jvanverth@google.comd830d132013-11-11 20:54:09 +0000265#endif