Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Side by Side Diff: src/effects/SkColorFilters.cpp

Issue 395603002: Simplify flattening to just write enough to call the factory (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: simplify xfermodes, fix SkLayerDrawLooper Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 } 86 }
87 #endif 87 #endif
88 88
89 #if SK_SUPPORT_GPU 89 #if SK_SUPPORT_GPU
90 virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE; 90 virtual GrEffect* asNewEffect(GrContext*) const SK_OVERRIDE;
91 #endif 91 #endif
92 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter) 92 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
93 93
94 protected: 94 protected:
95 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE { 95 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE {
96 this->INHERITED::flatten(buffer);
97 buffer.writeColor(fColor); 96 buffer.writeColor(fColor);
98 buffer.writeUInt(fMode); 97 buffer.writeUInt(fMode);
99 } 98 }
100 99
100 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
101 SkModeColorFilter(SkReadBuffer& buffer) { 101 SkModeColorFilter(SkReadBuffer& buffer) {
102 fColor = buffer.readColor(); 102 fColor = buffer.readColor();
103 fMode = (SkXfermode::Mode)buffer.readUInt(); 103 fMode = (SkXfermode::Mode)buffer.readUInt();
104 if (buffer.isValid()) { 104 if (buffer.isValid()) {
105 this->updateCache(); 105 this->updateCache();
106 buffer.validate(SkIsValidMode(fMode)); 106 buffer.validate(SkIsValidMode(fMode));
107 } 107 }
108 } 108 }
109 #endif
109 110
110 private: 111 private:
111 SkColor fColor; 112 SkColor fColor;
112 SkXfermode::Mode fMode; 113 SkXfermode::Mode fMode;
113 // cache 114 // cache
114 SkPMColor fPMColor; 115 SkPMColor fPMColor;
115 SkXfermodeProc fProc; 116 SkXfermodeProc fProc;
116 SkXfermodeProc16 fProc16; 117 SkXfermodeProc16 fProc16;
117 118
118 void updateCache() { 119 void updateCache() {
119 fPMColor = SkPreMultiplyColor(fColor); 120 fPMColor = SkPreMultiplyColor(fColor);
120 fProc = SkXfermode::GetProc(fMode); 121 fProc = SkXfermode::GetProc(fMode);
121 fProc16 = SkXfermode::GetProc16(fMode, fColor); 122 fProc16 = SkXfermode::GetProc16(fMode, fColor);
122 } 123 }
123 124
124 typedef SkColorFilter INHERITED; 125 typedef SkColorFilter INHERITED;
125 }; 126 };
126 127
128 SkFlattenable* SkModeColorFilter::CreateProc(SkReadBuffer& buffer) {
129 SkColor color = buffer.readColor();
130 SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt();
131 return SkColorFilter::CreateModeFilter(color, mode);
sugoi1 2014/08/19 18:46:17 I think the mode validation might be important her
reed1 2014/08/19 19:58:06 Fixed in factory, removed 1st constructor, elimina
132 }
133
127 /////////////////////////////////////////////////////////////////////////////// 134 ///////////////////////////////////////////////////////////////////////////////
128 #if SK_SUPPORT_GPU 135 #if SK_SUPPORT_GPU
129 #include "GrBlend.h" 136 #include "GrBlend.h"
130 #include "GrEffect.h" 137 #include "GrEffect.h"
131 #include "GrEffectUnitTest.h" 138 #include "GrEffectUnitTest.h"
132 #include "GrTBackendEffectFactory.h" 139 #include "GrTBackendEffectFactory.h"
133 #include "gl/GrGLEffect.h" 140 #include "gl/GrGLEffect.h"
134 #include "gl/GrGLShaderBuilder.h" 141 #include "gl/GrGLShaderBuilder.h"
135 #include "SkGr.h" 142 #include "SkGr.h"
136 143
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 SkPMColor result[]) const SK_OVERRIDE { 443 SkPMColor result[]) const SK_OVERRIDE {
437 sk_memset32(result, this->getPMColor(), count); 444 sk_memset32(result, this->getPMColor(), count);
438 } 445 }
439 446
440 virtual void filterSpan16(const uint16_t shader[], int count, 447 virtual void filterSpan16(const uint16_t shader[], int count,
441 uint16_t result[]) const SK_OVERRIDE { 448 uint16_t result[]) const SK_OVERRIDE {
442 SkASSERT(this->getFlags() & kHasFilter16_Flag); 449 SkASSERT(this->getFlags() & kHasFilter16_Flag);
443 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); 450 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count);
444 } 451 }
445 452
446 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(Src_SkModeColorFilter)
447
448 protected:
449 Src_SkModeColorFilter(SkReadBuffer& buffer)
450 : INHERITED(buffer) {}
451
452 private: 453 private:
453 typedef SkModeColorFilter INHERITED; 454 typedef SkModeColorFilter INHERITED;
454 }; 455 };
455 456
456 class SrcOver_SkModeColorFilter : public SkModeColorFilter { 457 class SrcOver_SkModeColorFilter : public SkModeColorFilter {
457 public: 458 public:
458 SrcOver_SkModeColorFilter(SkColor color) 459 SrcOver_SkModeColorFilter(SkColor color)
459 : INHERITED(color, SkXfermode::kSrcOver_Mode) { 460 : INHERITED(color, SkXfermode::kSrcOver_Mode) {
460 fColor32Proc = SkBlitRow::ColorProcFactory(); 461 fColor32Proc = SkBlitRow::ColorProcFactory();
461 } 462 }
(...skipping 10 matching lines...) Expand all
472 SkPMColor result[]) const SK_OVERRIDE { 473 SkPMColor result[]) const SK_OVERRIDE {
473 fColor32Proc(result, shader, count, this->getPMColor()); 474 fColor32Proc(result, shader, count, this->getPMColor());
474 } 475 }
475 476
476 virtual void filterSpan16(const uint16_t shader[], int count, 477 virtual void filterSpan16(const uint16_t shader[], int count,
477 uint16_t result[]) const SK_OVERRIDE { 478 uint16_t result[]) const SK_OVERRIDE {
478 SkASSERT(this->getFlags() & kHasFilter16_Flag); 479 SkASSERT(this->getFlags() & kHasFilter16_Flag);
479 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count); 480 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count);
480 } 481 }
481 482
482 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SrcOver_SkModeColorFilte r)
483
484 protected:
485 SrcOver_SkModeColorFilter(SkReadBuffer& buffer)
486 : INHERITED(buffer) {
487 fColor32Proc = SkBlitRow::ColorProcFactory();
488 }
489
490 private: 483 private:
491 484
492 SkBlitRow::ColorProc fColor32Proc; 485 SkBlitRow::ColorProc fColor32Proc;
493 486
494 typedef SkModeColorFilter INHERITED; 487 typedef SkModeColorFilter INHERITED;
495 }; 488 };
496 489
497 /////////////////////////////////////////////////////////////////////////////// 490 ///////////////////////////////////////////////////////////////////////////////
498 491
499 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, 492 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, SkXfermode::Mode m ode) {
500 SkXfermode::Mode mode) {
501 unsigned alpha = SkColorGetA(color); 493 unsigned alpha = SkColorGetA(color);
502 494
503 // first collaps some modes if possible 495 // first collaps some modes if possible
504 496
505 if (SkXfermode::kClear_Mode == mode) { 497 if (SkXfermode::kClear_Mode == mode) {
506 color = 0; 498 color = 0;
507 mode = SkXfermode::kSrc_Mode; 499 mode = SkXfermode::kSrc_Mode;
508 } else if (SkXfermode::kSrcOver_Mode == mode) { 500 } else if (SkXfermode::kSrcOver_Mode == mode) {
509 if (0 == alpha) { 501 if (0 == alpha) {
510 mode = SkXfermode::kDst_Mode; 502 mode = SkXfermode::kDst_Mode;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 SkIntToScalar(SkColorGetB(add)), 550 SkIntToScalar(SkColorGetB(add)),
559 0); 551 0);
560 return SkColorMatrixFilter::Create(matrix); 552 return SkColorMatrixFilter::Create(matrix);
561 } 553 }
562 554
563 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter) 555 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkColorFilter)
564 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter) 556 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkModeColorFilter)
565 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter) 557 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(Src_SkModeColorFilter)
566 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter) 558 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SrcOver_SkModeColorFilter)
567 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 559 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698