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

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

Issue 1022673007: Revert of remove colorfilter native-565 support. complicating w/ no real value. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 9 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
« no previous file with comments | « src/core/SkFilterShader.cpp ('k') | src/effects/SkColorMatrixFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "SkModeColorFilter.h" 11 #include "SkModeColorFilter.h"
12 #include "SkReadBuffer.h" 12 #include "SkReadBuffer.h"
13 #include "SkWriteBuffer.h" 13 #include "SkWriteBuffer.h"
14 #include "SkUtils.h" 14 #include "SkUtils.h"
15 #include "SkString.h" 15 #include "SkString.h"
16 #include "SkValidationUtils.h" 16 #include "SkValidationUtils.h"
17 #include "SkColorMatrixFilter.h" 17 #include "SkColorMatrixFilter.h"
18 18
19 bool SkModeColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) cons t { 19 bool SkModeColorFilter::asColorMode(SkColor* color, SkXfermode::Mode* mode) cons t {
20 if (color) { 20 if (color) {
21 *color = fColor; 21 *color = fColor;
22 } 22 }
23 if (mode) { 23 if (mode) {
24 *mode = fMode; 24 *mode = fMode;
25 } 25 }
26 return true; 26 return true;
27 } 27 }
28 28
29 uint32_t SkModeColorFilter::getFlags() const { 29 uint32_t SkModeColorFilter::getFlags() const {
30 switch (fMode) { 30 return fProc16 ? (kAlphaUnchanged_Flag | kHasFilter16_Flag) : 0;
31 case SkXfermode::kDst_Mode: //!< [Da, Dc]
32 case SkXfermode::kSrcATop_Mode: //!< [Da, Sc * Da + (1 - Sa) * Dc]
33 return kAlphaUnchanged_Flag;
34 default:
35 break;
36 }
37 return 0;
38 } 31 }
39 32
40 void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColo r result[]) const { 33 void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColo r result[]) const {
41 SkPMColor color = fPMColor; 34 SkPMColor color = fPMColor;
42 SkXfermodeProc proc = fProc; 35 SkXfermodeProc proc = fProc;
43 36
44 for (int i = 0; i < count; i++) { 37 for (int i = 0; i < count; i++) {
45 result[i] = proc(color, shader[i]); 38 result[i] = proc(color, shader[i]);
46 } 39 }
47 } 40 }
48 41
42 void SkModeColorFilter::filterSpan16(const uint16_t shader[], int count, uint16_ t result[]) const {
43 SkASSERT(this->getFlags() & kHasFilter16_Flag);
44
45 SkPMColor color = fPMColor;
46 SkXfermodeProc16 proc16 = fProc16;
47
48 for (int i = 0; i < count; i++) {
49 result[i] = proc16(color, shader[i]);
50 }
51 }
49 void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const { 52 void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const {
50 buffer.writeColor(fColor); 53 buffer.writeColor(fColor);
51 buffer.writeUInt(fMode); 54 buffer.writeUInt(fMode);
52 } 55 }
53 56
54 void SkModeColorFilter::updateCache() { 57 void SkModeColorFilter::updateCache() {
55 fPMColor = SkPreMultiplyColor(fColor); 58 fPMColor = SkPreMultiplyColor(fColor);
56 fProc = SkXfermode::GetProc(fMode); 59 fProc = SkXfermode::GetProc(fMode);
60 fProc16 = SkXfermode::GetProc16(fMode, fColor);
57 } 61 }
58 62
59 SkFlattenable* SkModeColorFilter::CreateProc(SkReadBuffer& buffer) { 63 SkFlattenable* SkModeColorFilter::CreateProc(SkReadBuffer& buffer) {
60 SkColor color = buffer.readColor(); 64 SkColor color = buffer.readColor();
61 SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt(); 65 SkXfermode::Mode mode = (SkXfermode::Mode)buffer.readUInt();
62 return SkColorFilter::CreateModeFilter(color, mode); 66 return SkColorFilter::CreateModeFilter(color, mode);
63 } 67 }
64 68
65 /////////////////////////////////////////////////////////////////////////////// 69 ///////////////////////////////////////////////////////////////////////////////
66 #if SK_SUPPORT_GPU 70 #if SK_SUPPORT_GPU
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 } 381 }
378 382
379 #endif 383 #endif
380 384
381 /////////////////////////////////////////////////////////////////////////////// 385 ///////////////////////////////////////////////////////////////////////////////
382 386
383 class Src_SkModeColorFilter : public SkModeColorFilter { 387 class Src_SkModeColorFilter : public SkModeColorFilter {
384 public: 388 public:
385 Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mod e) {} 389 Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkXfermode::kSrc_Mod e) {}
386 390
387 void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) con st SK_OVERRIDE { 391 uint32_t getFlags() const SK_OVERRIDE {
392 if (SkGetPackedA32(this->getPMColor()) == 0xFF) {
393 return kAlphaUnchanged_Flag | kHasFilter16_Flag;
394 } else {
395 return 0;
396 }
397 }
398
399 virtual void filterSpan(const SkPMColor shader[], int count,
400 SkPMColor result[]) const SK_OVERRIDE {
388 sk_memset32(result, this->getPMColor(), count); 401 sk_memset32(result, this->getPMColor(), count);
389 } 402 }
390 403
404 virtual void filterSpan16(const uint16_t shader[], int count,
405 uint16_t result[]) const SK_OVERRIDE {
406 SkASSERT(this->getFlags() & kHasFilter16_Flag);
407 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count);
408 }
409
391 private: 410 private:
392 typedef SkModeColorFilter INHERITED; 411 typedef SkModeColorFilter INHERITED;
393 }; 412 };
394 413
395 class SrcOver_SkModeColorFilter : public SkModeColorFilter { 414 class SrcOver_SkModeColorFilter : public SkModeColorFilter {
396 public: 415 public:
397 SrcOver_SkModeColorFilter(SkColor color) 416 SrcOver_SkModeColorFilter(SkColor color)
398 : INHERITED(color, SkXfermode::kSrcOver_Mode) { 417 : INHERITED(color, SkXfermode::kSrcOver_Mode) {
399 fColor32Proc = SkBlitRow::ColorProcFactory(); 418 fColor32Proc = SkBlitRow::ColorProcFactory();
400 } 419 }
401 420
402 void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) con st SK_OVERRIDE { 421 uint32_t getFlags() const SK_OVERRIDE {
422 if (SkGetPackedA32(this->getPMColor()) == 0xFF) {
423 return kAlphaUnchanged_Flag | kHasFilter16_Flag;
424 } else {
425 return 0;
426 }
427 }
428
429 virtual void filterSpan(const SkPMColor shader[], int count,
430 SkPMColor result[]) const SK_OVERRIDE {
403 fColor32Proc(result, shader, count, this->getPMColor()); 431 fColor32Proc(result, shader, count, this->getPMColor());
404 } 432 }
405 433
434 virtual void filterSpan16(const uint16_t shader[], int count,
435 uint16_t result[]) const SK_OVERRIDE {
436 SkASSERT(this->getFlags() & kHasFilter16_Flag);
437 sk_memset16(result, SkPixel32ToPixel16(this->getPMColor()), count);
438 }
439
406 private: 440 private:
407 441
408 SkBlitRow::ColorProc fColor32Proc; 442 SkBlitRow::ColorProc fColor32Proc;
409 443
410 typedef SkModeColorFilter INHERITED; 444 typedef SkModeColorFilter INHERITED;
411 }; 445 };
412 446
413 /////////////////////////////////////////////////////////////////////////////// 447 ///////////////////////////////////////////////////////////////////////////////
414 448
415 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, SkXfermode::Mode m ode) { 449 SkColorFilter* SkColorFilter::CreateModeFilter(SkColor color, SkXfermode::Mode m ode) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 byte_to_scale(SkColorGetG(mul)), 506 byte_to_scale(SkColorGetG(mul)),
473 byte_to_scale(SkColorGetB(mul)), 507 byte_to_scale(SkColorGetB(mul)),
474 1); 508 1);
475 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), 509 matrix.postTranslate(SkIntToScalar(SkColorGetR(add)),
476 SkIntToScalar(SkColorGetG(add)), 510 SkIntToScalar(SkColorGetG(add)),
477 SkIntToScalar(SkColorGetB(add)), 511 SkIntToScalar(SkColorGetB(add)),
478 0); 512 0);
479 return SkColorMatrixFilter::Create(matrix); 513 return SkColorMatrixFilter::Create(matrix);
480 } 514 }
481 515
OLDNEW
« no previous file with comments | « src/core/SkFilterShader.cpp ('k') | src/effects/SkColorMatrixFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698