| 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 return GrTBackendEffectFactory<ModeColorFilterEffect>::getInstance(); | 211 return GrTBackendEffectFactory<ModeColorFilterEffect>::getInstance(); |
| 212 } | 212 } |
| 213 | 213 |
| 214 static const char* Name() { return "ModeColorFilterEffect"; } | 214 static const char* Name() { return "ModeColorFilterEffect"; } |
| 215 | 215 |
| 216 SkXfermode::Mode mode() const { return fMode; } | 216 SkXfermode::Mode mode() const { return fMode; } |
| 217 GrColor color() const { return fColor; } | 217 GrColor color() const { return fColor; } |
| 218 | 218 |
| 219 class GLEffect : public GrGLEffect { | 219 class GLEffect : public GrGLEffect { |
| 220 public: | 220 public: |
| 221 GLEffect(const GrBackendEffectFactory& factory, const GrDrawEffect&) | 221 GLEffect(const GrBackendEffectFactory& factory, const GrEffect&) |
| 222 : INHERITED(factory) { | 222 : INHERITED(factory) { |
| 223 } | 223 } |
| 224 | 224 |
| 225 virtual void emitCode(GrGLProgramBuilder* builder, | 225 virtual void emitCode(GrGLProgramBuilder* builder, |
| 226 const GrDrawEffect& drawEffect, | 226 const GrEffect& effect, |
| 227 const GrEffectKey& key, | 227 const GrEffectKey& key, |
| 228 const char* outputColor, | 228 const char* outputColor, |
| 229 const char* inputColor, | 229 const char* inputColor, |
| 230 const TransformedCoordsArray& coords, | 230 const TransformedCoordsArray& coords, |
| 231 const TextureSamplerArray& samplers) SK_OVERRIDE { | 231 const TextureSamplerArray& samplers) SK_OVERRIDE { |
| 232 SkXfermode::Mode mode = drawEffect.castEffect<ModeColorFilterEffect>
().mode(); | 232 SkXfermode::Mode mode = effect.cast<ModeColorFilterEffect>().mode(); |
| 233 | 233 |
| 234 SkASSERT(SkXfermode::kDst_Mode != mode); | 234 SkASSERT(SkXfermode::kDst_Mode != mode); |
| 235 const char* colorFilterColorUniName = NULL; | 235 const char* colorFilterColorUniName = NULL; |
| 236 if (drawEffect.castEffect<ModeColorFilterEffect>().willUseFilterColo
r()) { | 236 if (effect.cast<ModeColorFilterEffect>().willUseFilterColor()) { |
| 237 fFilterColorUni = builder->addUniform(GrGLProgramBuilder::kFragm
ent_Visibility, | 237 fFilterColorUni = builder->addUniform(GrGLProgramBuilder::kFragm
ent_Visibility, |
| 238 kVec4f_GrSLType, "FilterCo
lor", | 238 kVec4f_GrSLType, "FilterCo
lor", |
| 239 &colorFilterColorUniName); | 239 &colorFilterColorUniName); |
| 240 } | 240 } |
| 241 | 241 |
| 242 GrGLSLExpr4 filter = | 242 GrGLSLExpr4 filter = |
| 243 color_filter_expression(mode, GrGLSLExpr4(colorFilterColorUniNam
e), GrGLSLExpr4(inputColor)); | 243 color_filter_expression(mode, GrGLSLExpr4(colorFilterColorUniNam
e), |
| 244 GrGLSLExpr4(inputColor)); |
| 244 | 245 |
| 245 builder->getFragmentShaderBuilder()-> | 246 builder->getFragmentShaderBuilder()-> |
| 246 codeAppendf("\t%s = %s;\n", outputColor, filter.c_str()); | 247 codeAppendf("\t%s = %s;\n", outputColor, filter.c_str()); |
| 247 } | 248 } |
| 248 | 249 |
| 249 static void GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, | 250 static void GenKey(const GrEffect& effect, const GrGLCaps&, |
| 250 GrEffectKeyBuilder* b) { | 251 GrEffectKeyBuilder* b) { |
| 251 const ModeColorFilterEffect& colorModeFilter = drawEffect.castEffect
<ModeColorFilterEffect>(); | 252 const ModeColorFilterEffect& colorModeFilter = effect.cast<ModeColor
FilterEffect>(); |
| 252 // The SL code does not depend on filter color at the moment, so no
need to represent it | 253 // The SL code does not depend on filter color at the moment, so no
need to represent it |
| 253 // in the key. | 254 // in the key. |
| 254 b->add32(colorModeFilter.mode()); | 255 b->add32(colorModeFilter.mode()); |
| 255 } | 256 } |
| 256 | 257 |
| 257 virtual void setData(const GrGLProgramDataManager& pdman, const GrDrawEf
fect& drawEffect) SK_OVERRIDE { | 258 virtual void setData(const GrGLProgramDataManager& pdman, |
| 259 const GrEffect& effect) SK_OVERRIDE { |
| 258 if (fFilterColorUni.isValid()) { | 260 if (fFilterColorUni.isValid()) { |
| 259 const ModeColorFilterEffect& colorModeFilter = drawEffect.castEf
fect<ModeColorFilterEffect>(); | 261 const ModeColorFilterEffect& colorModeFilter = effect.cast<ModeC
olorFilterEffect>(); |
| 260 GrGLfloat c[4]; | 262 GrGLfloat c[4]; |
| 261 GrColorToRGBAFloat(colorModeFilter.color(), c); | 263 GrColorToRGBAFloat(colorModeFilter.color(), c); |
| 262 pdman.set4fv(fFilterColorUni, 1, c); | 264 pdman.set4fv(fFilterColorUni, 1, c); |
| 263 } | 265 } |
| 264 } | 266 } |
| 265 | 267 |
| 266 private: | 268 private: |
| 267 | 269 |
| 268 GrGLProgramDataManager::UniformHandle fFilterColorUni; | 270 GrGLProgramDataManager::UniformHandle fFilterColorUni; |
| 269 typedef GrGLEffect INHERITED; | 271 typedef GrGLEffect INHERITED; |
| 270 }; | 272 }; |
| 271 | 273 |
| 272 GR_DECLARE_EFFECT_TEST; | 274 GR_DECLARE_EFFECT_TEST; |
| 273 | 275 |
| 274 private: | 276 private: |
| 275 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) | 277 ModeColorFilterEffect(GrColor color, SkXfermode::Mode mode) |
| 276 : fMode(mode), | 278 : fMode(mode), |
| 277 fColor(color) { | 279 fColor(color) { |
| 278 | 280 |
| 279 SkXfermode::Coeff dstCoeff; | 281 SkXfermode::Coeff dstCoeff; |
| 280 SkXfermode::Coeff srcCoeff; | 282 SkXfermode::Coeff srcCoeff; |
| 281 SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff)); | 283 SkAssertResult(SkXfermode::ModeAsCoeff(fMode, &srcCoeff, &dstCoeff)); |
| 282 // These could be calculated from the blend equation with template trick
ery.. | 284 // These could be calculated from the blend equation with template trick
ery.. |
| 283 if (SkXfermode::kZero_Coeff == dstCoeff && !GrBlendCoeffRefsDst(sk_blend
_to_grblend(srcCoeff))) { | 285 if (SkXfermode::kZero_Coeff == dstCoeff && |
| 286 !GrBlendCoeffRefsDst(sk_blend_to_grblend(srcCoeff))) { |
| 284 this->setWillNotUseInputColor(); | 287 this->setWillNotUseInputColor(); |
| 285 } | 288 } |
| 286 } | 289 } |
| 287 | 290 |
| 288 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { | 291 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { |
| 289 const ModeColorFilterEffect& s = CastEffect<ModeColorFilterEffect>(other
); | 292 const ModeColorFilterEffect& s = other.cast<ModeColorFilterEffect>(); |
| 290 return fMode == s.fMode && fColor == s.fColor; | 293 return fMode == s.fMode && fColor == s.fColor; |
| 291 } | 294 } |
| 292 | 295 |
| 293 SkXfermode::Mode fMode; | 296 SkXfermode::Mode fMode; |
| 294 GrColor fColor; | 297 GrColor fColor; |
| 295 | 298 |
| 296 typedef GrEffect INHERITED; | 299 typedef GrEffect INHERITED; |
| 297 }; | 300 }; |
| 298 | 301 |
| 299 namespace { | 302 namespace { |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), | 545 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), |
| 543 SkIntToScalar(SkColorGetG(add)), | 546 SkIntToScalar(SkColorGetG(add)), |
| 544 SkIntToScalar(SkColorGetB(add)), | 547 SkIntToScalar(SkColorGetB(add)), |
| 545 0); | 548 0); |
| 546 return SkColorMatrixFilter::Create(matrix); | 549 return SkColorMatrixFilter::Create(matrix); |
| 547 } | 550 } |
| 548 | 551 |
| 549 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) | 552 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) |
| 550 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) | 553 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) |
| 551 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 554 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |