OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SkXfermode.h" | 9 #include "SkXfermode.h" |
10 #include "SkXfermode_opts_SSE2.h" | 10 #include "SkXfermode_opts_SSE2.h" |
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
668 /////////////////////////////////////////////////////////////////////////////// | 668 /////////////////////////////////////////////////////////////////////////////// |
669 | 669 |
670 bool SkXfermode::asMode(Mode* mode) const { | 670 bool SkXfermode::asMode(Mode* mode) const { |
671 return false; | 671 return false; |
672 } | 672 } |
673 | 673 |
674 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { | 674 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { |
675 return false; | 675 return false; |
676 } | 676 } |
677 | 677 |
678 bool SkXfermode::asXPFactory(GrXPFactory**) const { | 678 bool SkXfermode::asXPFactory(const GrContext*, GrXPFactory**) const { |
679 return false; | 679 return false; |
680 } | 680 } |
681 | 681 |
682 | 682 |
683 #if SK_SUPPORT_GPU | 683 #if SK_SUPPORT_GPU |
684 #include "effects/GrPorterDuffXferProcessor.h" | 684 #include "effects/GrPorterDuffXferProcessor.h" |
685 | 685 |
686 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { | 686 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, const GrContext* context, GrX
PFactory** xpf) { |
687 if (NULL == xfermode) { | 687 if (NULL == xfermode) { |
688 if (xpf) { | 688 if (xpf) { |
689 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); | 689 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); |
690 } | 690 } |
691 return true; | 691 return true; |
692 } else { | 692 } else { |
693 return xfermode->asXPFactory(xpf); | 693 return xfermode->asXPFactory(context, xpf); |
694 } | 694 } |
695 } | 695 } |
696 #else | 696 #else |
697 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { | 697 bool SkXfermode::AsXPFactory(SkXfermode*, const GrContext*, GrXPFactory**) { |
698 return false; | 698 return false; |
699 } | 699 } |
700 #endif | 700 #endif |
701 | 701 |
702 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ | 702 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ |
703 // no-op. subclasses should override this | 703 // no-op. subclasses should override this |
704 return dst; | 704 return dst; |
705 } | 705 } |
706 | 706 |
707 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 707 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); | 931 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); |
932 } | 932 } |
933 dst[i] = SkToU8(A); | 933 dst[i] = SkToU8(A); |
934 } | 934 } |
935 } | 935 } |
936 } | 936 } |
937 } | 937 } |
938 } | 938 } |
939 | 939 |
940 #if SK_SUPPORT_GPU | 940 #if SK_SUPPORT_GPU |
| 941 #include "effects/GrAdvancedEquationXPFactory.h" |
941 #include "effects/GrCustomXfermode.h" | 942 #include "effects/GrCustomXfermode.h" |
942 | 943 |
943 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, | 944 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, |
944 GrTexture* background) const { | 945 GrTexture* background) const { |
945 if (GrCustomXfermode::IsSupportedMode(fMode)) { | 946 if (GrCustomXfermode::IsSupportedMode(fMode)) { |
946 if (fp) { | 947 if (fp) { |
947 *fp = GrCustomXfermode::CreateFP(fMode, background); | 948 *fp = GrCustomXfermode::CreateFP(fMode, background); |
948 SkASSERT(*fp); | 949 SkASSERT(*fp); |
949 } | 950 } |
950 return true; | 951 return true; |
951 } | 952 } |
952 return false; | 953 return false; |
953 } | 954 } |
954 | 955 |
955 bool SkProcCoeffXfermode::asXPFactory(GrXPFactory** xp) const { | 956 bool SkProcCoeffXfermode::asXPFactory(const GrContext* context, GrXPFactory** xp
) const { |
956 if (CANNOT_USE_COEFF != fSrcCoeff) { | 957 if (CANNOT_USE_COEFF != fSrcCoeff) { |
957 if (xp) { | 958 if (xp) { |
958 *xp = GrPorterDuffXPFactory::Create(fMode); | 959 *xp = GrPorterDuffXPFactory::Create(fMode); |
959 SkASSERT(*xp); | 960 SkASSERT(*xp); |
960 } | 961 } |
961 return true; | 962 return true; |
962 } | 963 } |
963 | 964 |
| 965 if (GrAdvancedEquationXPFactory::IsSupported(context, fMode)) { |
| 966 if (xp) { |
| 967 *xp = GrAdvancedEquationXPFactory::Create(context, fMode); |
| 968 SkASSERT(*xp); |
| 969 } |
| 970 return true; |
| 971 } |
| 972 |
964 if (GrCustomXfermode::IsSupportedMode(fMode)) { | 973 if (GrCustomXfermode::IsSupportedMode(fMode)) { |
965 if (xp) { | 974 if (xp) { |
966 *xp = GrCustomXfermode::CreateXPFactory(fMode); | 975 *xp = GrCustomXfermode::CreateXPFactory(fMode); |
967 SkASSERT(*xp); | 976 SkASSERT(*xp); |
968 } | 977 } |
969 return true; | 978 return true; |
970 } | 979 } |
971 return false; | 980 return false; |
972 } | 981 } |
973 #endif | 982 #endif |
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1536 } else { | 1545 } else { |
1537 proc16 = rec.fProc16_General; | 1546 proc16 = rec.fProc16_General; |
1538 } | 1547 } |
1539 } | 1548 } |
1540 return proc16; | 1549 return proc16; |
1541 } | 1550 } |
1542 | 1551 |
1543 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1552 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
1544 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1553 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
1545 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1554 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |