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 static GrPorterDuffXPFactory gClearPDXPF(kZero_GrBlendCoeff, kZero_G
rBlendCoeff); |
| 68 return SkRef(&gClearPDXPF); |
| 69 break; |
| 70 } |
| 71 case SkXfermode::kSrc_Mode: { |
| 72 static GrPorterDuffXPFactory gSrcPDXPF(kOne_GrBlendCoeff, kZero_GrBl
endCoeff); |
| 73 return SkRef(&gSrcPDXPF); |
| 74 break; |
| 75 } |
| 76 case SkXfermode::kDst_Mode: { |
| 77 static GrPorterDuffXPFactory gDstPDXPF(kZero_GrBlendCoeff, kOne_GrBl
endCoeff); |
| 78 return SkRef(&gDstPDXPF); |
| 79 break; |
| 80 } |
| 81 case SkXfermode::kSrcOver_Mode: { |
| 82 static GrPorterDuffXPFactory gSrcOverPDXPF(kOne_GrBlendCoeff, kISA_G
rBlendCoeff); |
| 83 return SkRef(&gSrcOverPDXPF); |
| 84 break; |
| 85 } |
| 86 case SkXfermode::kDstOver_Mode: { |
| 87 static GrPorterDuffXPFactory gDstOverPDXPF(kIDA_GrBlendCoeff, kOne_G
rBlendCoeff); |
| 88 return SkRef(&gDstOverPDXPF); |
| 89 break; |
| 90 } |
| 91 case SkXfermode::kSrcIn_Mode: { |
| 92 static GrPorterDuffXPFactory gSrcInPDXPF(kDA_GrBlendCoeff, kZero_GrB
lendCoeff); |
| 93 return SkRef(&gSrcInPDXPF); |
| 94 break; |
| 95 } |
| 96 case SkXfermode::kDstIn_Mode: { |
| 97 static GrPorterDuffXPFactory gDstInPDXPF(kZero_GrBlendCoeff, kSA_GrB
lendCoeff); |
| 98 return SkRef(&gDstInPDXPF); |
| 99 break; |
| 100 } |
| 101 case SkXfermode::kSrcOut_Mode: { |
| 102 static GrPorterDuffXPFactory gSrcOutPDXPF(kIDA_GrBlendCoeff, kZero_G
rBlendCoeff); |
| 103 return SkRef(&gSrcOutPDXPF); |
| 104 break; |
| 105 } |
| 106 case SkXfermode::kDstOut_Mode: { |
| 107 static GrPorterDuffXPFactory gDstOutPDXPF(kZero_GrBlendCoeff, kISA_G
rBlendCoeff); |
| 108 return SkRef(&gDstOutPDXPF); |
| 109 break; |
| 110 } |
| 111 case SkXfermode::kSrcATop_Mode: { |
| 112 static GrPorterDuffXPFactory gSrcATopPDXPF(kDA_GrBlendCoeff, kISA_Gr
BlendCoeff); |
| 113 return SkRef(&gSrcATopPDXPF); |
| 114 break; |
| 115 } |
| 116 case SkXfermode::kDstATop_Mode: { |
| 117 static GrPorterDuffXPFactory gDstATopPDXPF(kIDA_GrBlendCoeff, kSA_Gr
BlendCoeff); |
| 118 return SkRef(&gDstATopPDXPF); |
| 119 break; |
| 120 } |
| 121 case SkXfermode::kXor_Mode: { |
| 122 static GrPorterDuffXPFactory gXorPDXPF(kIDA_GrBlendCoeff, kISA_GrBle
ndCoeff); |
| 123 return SkRef(&gXorPDXPF); |
| 124 break; |
| 125 } |
| 126 case SkXfermode::kPlus_Mode: { |
| 127 static GrPorterDuffXPFactory gPlusPDXPF(kOne_GrBlendCoeff, kOne_GrBl
endCoeff); |
| 128 return SkRef(&gPlusPDXPF); |
| 129 break; |
| 130 } |
| 131 case SkXfermode::kModulate_Mode: { |
| 132 static GrPorterDuffXPFactory gModulatePDXPF(kZero_GrBlendCoeff, kSC_
GrBlendCoeff); |
| 133 return SkRef(&gModulatePDXPF); |
| 134 break; |
| 135 } |
| 136 case SkXfermode::kScreen_Mode: { |
| 137 static GrPorterDuffXPFactory gScreenPDXPF(kOne_GrBlendCoeff, kISC_Gr
BlendCoeff); |
| 138 return SkRef(&gScreenPDXPF); |
| 139 break; |
| 140 } |
| 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 |