OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
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 "GrPorterDuffXferProcessor.h" | 8 #include "GrPorterDuffXferProcessor.h" |
9 | 9 |
10 #include "GrBackendProcessorFactory.h" | 10 #include "GrBackendProcessorFactory.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 const GrBackendFragmentProcessorFactory& GrPorterDuffXferProcessor::getFactory()
const { | 54 const GrBackendFragmentProcessorFactory& GrPorterDuffXferProcessor::getFactory()
const { |
55 return GrTBackendFragmentProcessorFactory<GrPorterDuffXferProcessor>::getIns
tance(); | 55 return GrTBackendFragmentProcessorFactory<GrPorterDuffXferProcessor>::getIns
tance(); |
56 } | 56 } |
57 | 57 |
58 void GrPorterDuffXferProcessor::onComputeInvariantOutput(GrInvariantOutput* inou
t) const { | 58 void GrPorterDuffXferProcessor::onComputeInvariantOutput(GrInvariantOutput* inou
t) const { |
59 inout->setToUnknown(GrInvariantOutput::kWillNot_ReadInput); | 59 inout->setToUnknown(GrInvariantOutput::kWillNot_ReadInput); |
60 } | 60 } |
61 | 61 |
62 /////////////////////////////////////////////////////////////////////////////// | 62 /////////////////////////////////////////////////////////////////////////////// |
63 | 63 |
| 64 GrXPFactory* GrPorterDuffXPFactory::Create(SkXfermode::Mode mode) { |
| 65 switch (mode) { |
| 66 case SkXfermode::kClear_Mode: |
| 67 GR_CREATE_STATIC_XP_FACTORY(gClearPDXPF, GrPorterDuffXPFactory, (kZe
ro_GrBlendCoeff, |
| 68 kZe
ro_GrBlendCoeff)); |
| 69 return SkRef(gClearPDXPF); |
| 70 break; |
| 71 case SkXfermode::kSrc_Mode: |
| 72 GR_CREATE_STATIC_XP_FACTORY(gSrcPDXPF, GrPorterDuffXPFactory, (kOne_
GrBlendCoeff, |
| 73 kZero
_GrBlendCoeff)); |
| 74 return SkRef(gSrcPDXPF); |
| 75 break; |
| 76 case SkXfermode::kDst_Mode: |
| 77 GR_CREATE_STATIC_XP_FACTORY(gDstPDXPF, GrPorterDuffXPFactory, (kZero
_GrBlendCoeff, |
| 78 kOne_
GrBlendCoeff)); |
| 79 return SkRef(gDstPDXPF); |
| 80 break; |
| 81 case SkXfermode::kSrcOver_Mode: |
| 82 GR_CREATE_STATIC_XP_FACTORY(gSrcOverPDXPF, GrPorterDuffXPFactory, (k
One_GrBlendCoeff, |
| 83 k
ISA_GrBlendCoeff)); |
| 84 return SkRef(gSrcOverPDXPF); |
| 85 break; |
| 86 case SkXfermode::kDstOver_Mode: |
| 87 GR_CREATE_STATIC_XP_FACTORY(gDstOverPDXPF, GrPorterDuffXPFactory, (k
IDA_GrBlendCoeff, |
| 88 k
One_GrBlendCoeff)); |
| 89 return SkRef(gDstOverPDXPF); |
| 90 break; |
| 91 case SkXfermode::kSrcIn_Mode: |
| 92 GR_CREATE_STATIC_XP_FACTORY(gSrcInPDXPF, GrPorterDuffXPFactory, (kDA
_GrBlendCoeff, |
| 93 kZe
ro_GrBlendCoeff)); |
| 94 return SkRef(gSrcInPDXPF); |
| 95 break; |
| 96 case SkXfermode::kDstIn_Mode: |
| 97 GR_CREATE_STATIC_XP_FACTORY(gDstInPDXPF, GrPorterDuffXPFactory, (kZe
ro_GrBlendCoeff, |
| 98 kSA
_GrBlendCoeff)); |
| 99 return SkRef(gDstInPDXPF); |
| 100 break; |
| 101 case SkXfermode::kSrcOut_Mode: |
| 102 GR_CREATE_STATIC_XP_FACTORY(gSrcOutPDXPF, GrPorterDuffXPFactory, (kI
DA_GrBlendCoeff, |
| 103 kZ
ero_GrBlendCoeff)); |
| 104 return SkRef(gSrcOutPDXPF); |
| 105 break; |
| 106 case SkXfermode::kDstOut_Mode: |
| 107 GR_CREATE_STATIC_XP_FACTORY(gDstOutPDXPF, GrPorterDuffXPFactory, (kZ
ero_GrBlendCoeff, |
| 108 kI
SA_GrBlendCoeff)); |
| 109 return SkRef(gDstOutPDXPF); |
| 110 break; |
| 111 case SkXfermode::kSrcATop_Mode: |
| 112 GR_CREATE_STATIC_XP_FACTORY(gSrcATopPDXPF, GrPorterDuffXPFactory, (k
DA_GrBlendCoeff, |
| 113 k
ISA_GrBlendCoeff)); |
| 114 return SkRef(gSrcATopPDXPF); |
| 115 break; |
| 116 case SkXfermode::kDstATop_Mode: |
| 117 GR_CREATE_STATIC_XP_FACTORY(gDstATopPDXPF, GrPorterDuffXPFactory, (k
IDA_GrBlendCoeff, |
| 118 k
SA_GrBlendCoeff)); |
| 119 return SkRef(gDstATopPDXPF); |
| 120 break; |
| 121 case SkXfermode::kXor_Mode: |
| 122 GR_CREATE_STATIC_XP_FACTORY(gXorPDXPF, GrPorterDuffXPFactory, (kIDA_
GrBlendCoeff, |
| 123 kISA_
GrBlendCoeff)); |
| 124 return SkRef(gXorPDXPF); |
| 125 break; |
| 126 case SkXfermode::kPlus_Mode: |
| 127 GR_CREATE_STATIC_XP_FACTORY(gPlusPDXPF, GrPorterDuffXPFactory, (kOne
_GrBlendCoeff, |
| 128 kOne
_GrBlendCoeff)); |
| 129 return SkRef(gPlusPDXPF); |
| 130 break; |
| 131 case SkXfermode::kModulate_Mode: |
| 132 GR_CREATE_STATIC_XP_FACTORY(gModulatePDXPF, GrPorterDuffXPFactory, (
kZero_GrBlendCoeff, |
| 133
kSC_GrBlendCoeff)); |
| 134 return SkRef(gModulatePDXPF); |
| 135 break; |
| 136 case SkXfermode::kScreen_Mode: |
| 137 GR_CREATE_STATIC_XP_FACTORY(gScreenPDXPF, GrPorterDuffXPFactory, (kO
ne_GrBlendCoeff, |
| 138 kI
SC_GrBlendCoeff)); |
| 139 return SkRef(gScreenPDXPF); |
| 140 break; |
| 141 default: |
| 142 return NULL; |
| 143 } |
| 144 } |
| 145 |
64 const GrXferProcessor* GrPorterDuffXPFactory::createXferProcessor() const { | 146 const GrXferProcessor* GrPorterDuffXPFactory::createXferProcessor() const { |
65 return GrPorterDuffXferProcessor::Create(fSrc, fDst); | 147 return GrPorterDuffXferProcessor::Create(fSrc, fDst); |
66 } | 148 } |
67 | 149 |
68 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, | 150 bool GrPorterDuffXPFactory::supportsRGBCoverage(GrColor /*knownColor*/, |
69 uint32_t knownColorFlags) const
{ | 151 uint32_t knownColorFlags) const
{ |
70 if (kOne_GrBlendCoeff == fSrc && kISA_GrBlendCoeff == fDst && | 152 if (kOne_GrBlendCoeff == fSrc && kISA_GrBlendCoeff == fDst && |
71 kRGBA_GrColorComponentFlags == knownColorFlags) { | 153 kRGBA_GrColorComponentFlags == knownColorFlags) { |
72 return true; | 154 return true; |
73 } | 155 } |
74 return false; | 156 return false; |
75 } | 157 } |
76 | 158 |
OLD | NEW |