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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 class ModeColorFilterEffect : public GrFragmentProcessor { | 127 class ModeColorFilterEffect : public GrFragmentProcessor { |
128 public: | 128 public: |
129 static GrFragmentProcessor* Create(const GrColor& c, SkXfermode::Mode mode)
{ | 129 static GrFragmentProcessor* Create(const GrColor& c, SkXfermode::Mode mode)
{ |
130 // TODO: Make the effect take the coeffs rather than mode since we alrea
dy do the | 130 // TODO: Make the effect take the coeffs rather than mode since we alrea
dy do the |
131 // conversion here. | 131 // conversion here. |
132 SkXfermode::Coeff srcCoeff, dstCoeff; | 132 SkXfermode::Coeff srcCoeff, dstCoeff; |
133 if (!SkXfermode::ModeAsCoeff(mode, &srcCoeff, &dstCoeff)) { | 133 if (!SkXfermode::ModeAsCoeff(mode, &srcCoeff, &dstCoeff)) { |
134 // SkDebugf("Failing to create color filter for mode %d\n", mode); | 134 // SkDebugf("Failing to create color filter for mode %d\n", mode); |
135 return NULL; | 135 return NULL; |
136 } | 136 } |
137 return SkNEW_ARGS(ModeColorFilterEffect, (c, mode)); | 137 return new ModeColorFilterEffect(c, mode); |
138 } | 138 } |
139 | 139 |
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; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 205 |
206 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 206 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
207 | 207 |
208 private: | 208 private: |
209 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) | 209 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) |
210 : fMode(mode), | 210 : fMode(mode), |
211 fColor(color) { | 211 fColor(color) { |
212 this->initClassID<ModeColorFilterEffect>(); | 212 this->initClassID<ModeColorFilterEffect>(); |
213 } | 213 } |
214 | 214 |
215 GrGLFragmentProcessor* onCreateGLInstance() const override { | 215 GrGLFragmentProcessor* onCreateGLInstance() const override { return new GLPr
ocessor(*this); } |
216 return SkNEW_ARGS(GLProcessor, (*this)); | |
217 } | |
218 | 216 |
219 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, | 217 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, |
220 GrProcessorKeyBuilder* b) const override { | 218 GrProcessorKeyBuilder* b) const override { |
221 GLProcessor::GenKey(*this, caps, b); | 219 GLProcessor::GenKey(*this, caps, b); |
222 } | 220 } |
223 | 221 |
224 bool onIsEqual(const GrFragmentProcessor& other) const override { | 222 bool onIsEqual(const GrFragmentProcessor& other) const override { |
225 const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>(); | 223 const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>(); |
226 return fMode == s.fMode && fColor == s.fColor; | 224 return fMode == s.fMode && fColor == s.fColor; |
227 } | 225 } |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 SkXfermode::kDstOut_Mode == mode || | 429 SkXfermode::kDstOut_Mode == mode || |
432 SkXfermode::kSrcATop_Mode == mode || | 430 SkXfermode::kSrcATop_Mode == mode || |
433 SkXfermode::kXor_Mode == mode || | 431 SkXfermode::kXor_Mode == mode || |
434 SkXfermode::kDarken_Mode == mode)) || | 432 SkXfermode::kDarken_Mode == mode)) || |
435 (0xFF == alpha && SkXfermode::kDstIn_Mode == mode)) { | 433 (0xFF == alpha && SkXfermode::kDstIn_Mode == mode)) { |
436 return NULL; | 434 return NULL; |
437 } | 435 } |
438 | 436 |
439 switch (mode) { | 437 switch (mode) { |
440 case SkXfermode::kSrc_Mode: | 438 case SkXfermode::kSrc_Mode: |
441 return SkNEW_ARGS(Src_SkModeColorFilter, (color)); | 439 return new Src_SkModeColorFilter(color); |
442 case SkXfermode::kSrcOver_Mode: | 440 case SkXfermode::kSrcOver_Mode: |
443 return SkNEW_ARGS(SrcOver_SkModeColorFilter, (color)); | 441 return new SrcOver_SkModeColorFilter(color); |
444 default: | 442 default: |
445 return SkNEW_ARGS(SkModeColorFilter, (color, mode)); | 443 return new SkModeColorFilter(color, mode); |
446 } | 444 } |
447 } | 445 } |
448 | 446 |
449 /////////////////////////////////////////////////////////////////////////////// | 447 /////////////////////////////////////////////////////////////////////////////// |
450 | 448 |
451 static SkScalar byte_to_scale(U8CPU byte) { | 449 static SkScalar byte_to_scale(U8CPU byte) { |
452 if (0xFF == byte) { | 450 if (0xFF == byte) { |
453 // want to get this exact | 451 // want to get this exact |
454 return 1; | 452 return 1; |
455 } else { | 453 } else { |
456 return byte * 0.00392156862745f; | 454 return byte * 0.00392156862745f; |
457 } | 455 } |
458 } | 456 } |
459 | 457 |
460 SkColorFilter* SkColorFilter::CreateLightingFilter(SkColor mul, SkColor add) { | 458 SkColorFilter* SkColorFilter::CreateLightingFilter(SkColor mul, SkColor add) { |
461 SkColorMatrix matrix; | 459 SkColorMatrix matrix; |
462 matrix.setScale(byte_to_scale(SkColorGetR(mul)), | 460 matrix.setScale(byte_to_scale(SkColorGetR(mul)), |
463 byte_to_scale(SkColorGetG(mul)), | 461 byte_to_scale(SkColorGetG(mul)), |
464 byte_to_scale(SkColorGetB(mul)), | 462 byte_to_scale(SkColorGetB(mul)), |
465 1); | 463 1); |
466 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), | 464 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), |
467 SkIntToScalar(SkColorGetG(add)), | 465 SkIntToScalar(SkColorGetG(add)), |
468 SkIntToScalar(SkColorGetB(add)), | 466 SkIntToScalar(SkColorGetB(add)), |
469 0); | 467 0); |
470 return SkColorMatrixFilter::Create(matrix); | 468 return SkColorMatrixFilter::Create(matrix); |
471 } | 469 } |
472 | 470 |
OLD | NEW |