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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
665 /////////////////////////////////////////////////////////////////////////////// | 665 /////////////////////////////////////////////////////////////////////////////// |
666 | 666 |
667 bool SkXfermode::asMode(Mode* mode) const { | 667 bool SkXfermode::asMode(Mode* mode) const { |
668 return false; | 668 return false; |
669 } | 669 } |
670 | 670 |
671 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { | 671 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { |
672 return false; | 672 return false; |
673 } | 673 } |
674 | 674 |
675 bool SkXfermode::asXPFactory(GrXPFactory**) const { | 675 bool SkXfermode::asXPFactory(const GrContext*, GrXPFactory**) const { |
676 return false; | 676 return false; |
677 } | 677 } |
678 | 678 |
679 | 679 |
680 #if SK_SUPPORT_GPU | 680 #if SK_SUPPORT_GPU |
681 #include "effects/GrPorterDuffXferProcessor.h" | 681 #include "effects/GrPorterDuffXferProcessor.h" |
682 | 682 |
683 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { | 683 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, const GrContext* context, GrX
PFactory** xpf) { |
684 if (NULL == xfermode) { | 684 if (NULL == xfermode) { |
685 if (xpf) { | 685 if (xpf) { |
686 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); | 686 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); |
687 } | 687 } |
688 return true; | 688 return true; |
689 } else { | 689 } else { |
690 return xfermode->asXPFactory(xpf); | 690 return xfermode->asXPFactory(context, xpf); |
691 } | 691 } |
692 } | 692 } |
693 #else | 693 #else |
694 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { | 694 bool SkXfermode::AsXPFactory(SkXfermode*, const GrContext*, GrXPFactory**) { |
695 return false; | 695 return false; |
696 } | 696 } |
697 #endif | 697 #endif |
698 | 698 |
699 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ | 699 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ |
700 // no-op. subclasses should override this | 700 // no-op. subclasses should override this |
701 return dst; | 701 return dst; |
702 } | 702 } |
703 | 703 |
704 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, | 704 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
928 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); | 928 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); |
929 } | 929 } |
930 dst[i] = SkToU8(A); | 930 dst[i] = SkToU8(A); |
931 } | 931 } |
932 } | 932 } |
933 } | 933 } |
934 } | 934 } |
935 } | 935 } |
936 | 936 |
937 #if SK_SUPPORT_GPU | 937 #if SK_SUPPORT_GPU |
| 938 #include "effects/GrAdvancedEquationXferProcessor.h" |
938 #include "effects/GrCustomXfermode.h" | 939 #include "effects/GrCustomXfermode.h" |
939 | 940 |
940 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, | 941 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, |
941 GrTexture* background) const { | 942 GrTexture* background) const { |
942 if (GrCustomXfermode::IsSupportedMode(fMode)) { | 943 if (GrCustomXfermode::IsSupportedMode(fMode)) { |
943 if (fp) { | 944 if (fp) { |
944 *fp = GrCustomXfermode::CreateFP(fMode, background); | 945 *fp = GrCustomXfermode::CreateFP(fMode, background); |
945 SkASSERT(*fp); | 946 SkASSERT(*fp); |
946 } | 947 } |
947 return true; | 948 return true; |
948 } | 949 } |
949 return false; | 950 return false; |
950 } | 951 } |
951 | 952 |
952 bool SkProcCoeffXfermode::asXPFactory(GrXPFactory** xp) const { | 953 bool SkProcCoeffXfermode::asXPFactory(const GrContext* context, GrXPFactory** xp
) const { |
953 if (CANNOT_USE_COEFF != fSrcCoeff) { | 954 if (CANNOT_USE_COEFF != fSrcCoeff) { |
954 if (xp) { | 955 if (xp) { |
955 *xp = GrPorterDuffXPFactory::Create(fMode); | 956 *xp = GrPorterDuffXPFactory::Create(fMode); |
956 SkASSERT(*xp); | 957 SkASSERT(*xp); |
957 } | 958 } |
958 return true; | 959 return true; |
959 } | 960 } |
960 | 961 |
| 962 if (GrAdvancedEquationXPFactory::IsSupported(context, fMode)) { |
| 963 if (xp) { |
| 964 *xp = GrAdvancedEquationXPFactory::Create(context, fMode); |
| 965 SkASSERT(*xp); |
| 966 } |
| 967 return true; |
| 968 } |
| 969 |
961 if (GrCustomXfermode::IsSupportedMode(fMode)) { | 970 if (GrCustomXfermode::IsSupportedMode(fMode)) { |
962 if (xp) { | 971 if (xp) { |
963 *xp = GrCustomXfermode::CreateXPFactory(fMode); | 972 *xp = GrCustomXfermode::CreateXPFactory(fMode); |
964 SkASSERT(*xp); | 973 SkASSERT(*xp); |
965 } | 974 } |
966 return true; | 975 return true; |
967 } | 976 } |
968 return false; | 977 return false; |
969 } | 978 } |
970 #endif | 979 #endif |
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1762 } else { | 1771 } else { |
1763 proc16 = rec.fProc16_General; | 1772 proc16 = rec.fProc16_General; |
1764 } | 1773 } |
1765 } | 1774 } |
1766 return proc16; | 1775 return proc16; |
1767 } | 1776 } |
1768 | 1777 |
1769 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1778 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
1770 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1779 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
1771 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1780 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
OLD | NEW |