OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 #include "SkBlitRow.h" | 8 #include "SkBlitRow.h" |
9 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 bool willUseFilterColor() const { | 140 bool willUseFilterColor() const { |
141 SkXfermode::Coeff dstCoeff; | 141 SkXfermode::Coeff dstCoeff; |
142 SkXfermode::Coeff srcCoeff; | 142 SkXfermode::Coeff srcCoeff; |
143 SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff)); | 143 SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff)); |
144 if (SkXfermode::kZero_Coeff == srcCoeff) { | 144 if (SkXfermode::kZero_Coeff == srcCoeff) { |
145 return GrBlendCoeffRefsSrc(sk_blend_to_grblend(dstCoeff)); | 145 return GrBlendCoeffRefsSrc(sk_blend_to_grblend(dstCoeff)); |
146 } | 146 } |
147 return true; | 147 return true; |
148 } | 148 } |
149 | 149 |
150 GrGLFragmentProcessor* createGLInstance() const override { | |
151 return SkNEW_ARGS(GLProcessor, (*this)); | |
152 } | |
153 | |
154 const char* name() const override { return "ModeColorFilterEffect"; } | 150 const char* name() const override { return "ModeColorFilterEffect"; } |
155 | 151 |
156 SkXfermode::Mode mode() const { return fMode; } | 152 SkXfermode::Mode mode() const { return fMode; } |
157 GrColor color() const { return fColor; } | 153 GrColor color() const { return fColor; } |
158 | 154 |
159 class GLProcessor : public GrGLFragmentProcessor { | 155 class GLProcessor : public GrGLFragmentProcessor { |
160 public: | 156 public: |
161 GLProcessor(const GrProcessor&) { | 157 GLProcessor(const GrProcessor&) { |
162 } | 158 } |
163 | 159 |
(...skipping 19 matching lines...) Expand all Loading... |
183 } | 179 } |
184 | 180 |
185 static void GenKey(const GrProcessor& fp, const GrGLSLCaps&, | 181 static void GenKey(const GrProcessor& fp, const GrGLSLCaps&, |
186 GrProcessorKeyBuilder* b) { | 182 GrProcessorKeyBuilder* b) { |
187 const ModeColorFilterEffect& colorModeFilter = fp.cast<ModeColorFilt
erEffect>(); | 183 const ModeColorFilterEffect& colorModeFilter = fp.cast<ModeColorFilt
erEffect>(); |
188 // The SL code does not depend on filter color at the moment, so no
need to represent it | 184 // The SL code does not depend on filter color at the moment, so no
need to represent it |
189 // in the key. | 185 // in the key. |
190 b->add32(colorModeFilter.mode()); | 186 b->add32(colorModeFilter.mode()); |
191 } | 187 } |
192 | 188 |
193 virtual void setData(const GrGLProgramDataManager& pdman, | 189 protected: |
| 190 virtual void onSetData(const GrGLProgramDataManager& pdman, |
194 const GrProcessor& fp) override { | 191 const GrProcessor& fp) override { |
195 if (fFilterColorUni.isValid()) { | 192 if (fFilterColorUni.isValid()) { |
196 const ModeColorFilterEffect& colorModeFilter = fp.cast<ModeColor
FilterEffect>(); | 193 const ModeColorFilterEffect& colorModeFilter = fp.cast<ModeColor
FilterEffect>(); |
197 GrGLfloat c[4]; | 194 GrGLfloat c[4]; |
198 GrColorToRGBAFloat(colorModeFilter.color(), c); | 195 GrColorToRGBAFloat(colorModeFilter.color(), c); |
199 pdman.set4fv(fFilterColorUni, 1, c); | 196 pdman.set4fv(fFilterColorUni, 1, c); |
200 } | 197 } |
201 } | 198 } |
202 | 199 |
203 private: | 200 private: |
204 | 201 |
205 GrGLProgramDataManager::UniformHandle fFilterColorUni; | 202 GrGLProgramDataManager::UniformHandle fFilterColorUni; |
206 typedef GrGLFragmentProcessor INHERITED; | 203 typedef GrGLFragmentProcessor INHERITED; |
207 }; | 204 }; |
208 | 205 |
209 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 206 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
210 | 207 |
211 private: | 208 private: |
212 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) | 209 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) |
213 : fMode(mode), | 210 : fMode(mode), |
214 fColor(color) { | 211 fColor(color) { |
215 this->initClassID<ModeColorFilterEffect>(); | 212 this->initClassID<ModeColorFilterEffect>(); |
216 } | 213 } |
217 | 214 |
| 215 GrGLFragmentProcessor* onCreateGLInstance() const override { |
| 216 return SkNEW_ARGS(GLProcessor, (*this)); |
| 217 } |
| 218 |
218 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, | 219 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, |
219 GrProcessorKeyBuilder* b) const override { | 220 GrProcessorKeyBuilder* b) const override { |
220 GLProcessor::GenKey(*this, caps, b); | 221 GLProcessor::GenKey(*this, caps, b); |
221 } | 222 } |
222 | 223 |
223 bool onIsEqual(const GrFragmentProcessor& other) const override { | 224 bool onIsEqual(const GrFragmentProcessor& other) const override { |
224 const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>(); | 225 const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>(); |
225 return fMode == s.fMode && fColor == s.fColor; | 226 return fMode == s.fMode && fColor == s.fColor; |
226 } | 227 } |
227 | 228 |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 byte_to_scale(SkColorGetG(mul)), | 463 byte_to_scale(SkColorGetG(mul)), |
463 byte_to_scale(SkColorGetB(mul)), | 464 byte_to_scale(SkColorGetB(mul)), |
464 1); | 465 1); |
465 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), | 466 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), |
466 SkIntToScalar(SkColorGetG(add)), | 467 SkIntToScalar(SkColorGetG(add)), |
467 SkIntToScalar(SkColorGetB(add)), | 468 SkIntToScalar(SkColorGetB(add)), |
468 0); | 469 0); |
469 return SkColorMatrixFilter::Create(matrix); | 470 return SkColorMatrixFilter::Create(matrix); |
470 } | 471 } |
471 | 472 |
OLD | NEW |