OLD | NEW |
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 "SkXfermode.h" | 8 #include "SkXfermode.h" |
9 #include "SkXfermode_proccoeff.h" | 9 #include "SkXfermode_proccoeff.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 1454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1465 case kSoftLight_Mode: p->append(SkRasterPipeline::softlight); return t
rue; | 1465 case kSoftLight_Mode: p->append(SkRasterPipeline::softlight); return t
rue; |
1466 | 1466 |
1467 // TODO | 1467 // TODO |
1468 case kColor_Mode: return false; | 1468 case kColor_Mode: return false; |
1469 case kHue_Mode: return false; | 1469 case kHue_Mode: return false; |
1470 case kLuminosity_Mode: return false; | 1470 case kLuminosity_Mode: return false; |
1471 case kSaturation_Mode: return false; | 1471 case kSaturation_Mode: return false; |
1472 } | 1472 } |
1473 return false; | 1473 return false; |
1474 } | 1474 } |
| 1475 |
| 1476 ////////////////////////////////////////////////////////////////////////////////
/////////////////// |
| 1477 |
| 1478 bool SkBlendMode_SupportsCoverageAsAlpha(SkBlendMode mode) { |
| 1479 switch (mode) { |
| 1480 case SkBlendMode::kDst: |
| 1481 case SkBlendMode::kSrcOver: |
| 1482 case SkBlendMode::kDstOver: |
| 1483 case SkBlendMode::kDstOut: |
| 1484 case SkBlendMode::kSrcATop: |
| 1485 case SkBlendMode::kXor: |
| 1486 case SkBlendMode::kPlus: |
| 1487 return true; |
| 1488 default: |
| 1489 break; |
| 1490 } |
| 1491 return false; |
| 1492 } |
| 1493 |
| 1494 bool SkXfermode::IsOpaque(SkBlendMode mode, SrcColorOpacity opacityType) { |
| 1495 const ProcCoeff rec = gProcCoeffs[(int)mode]; |
| 1496 |
| 1497 switch (rec.fSC) { |
| 1498 case kDA_Coeff: |
| 1499 case kDC_Coeff: |
| 1500 case kIDA_Coeff: |
| 1501 case kIDC_Coeff: |
| 1502 return false; |
| 1503 default: |
| 1504 break; |
| 1505 } |
| 1506 |
| 1507 switch (rec.fDC) { |
| 1508 case kZero_Coeff: |
| 1509 return true; |
| 1510 case kISA_Coeff: |
| 1511 return kOpaque_SrcColorOpacity == opacityType; |
| 1512 case kSA_Coeff: |
| 1513 return kTransparentBlack_SrcColorOpacity == opacityType || |
| 1514 kTransparentAlpha_SrcColorOpacity == opacityType; |
| 1515 case kSC_Coeff: |
| 1516 return kTransparentBlack_SrcColorOpacity == opacityType; |
| 1517 default: |
| 1518 return false; |
| 1519 } |
| 1520 return false; |
| 1521 } |
| 1522 |
| 1523 #if SK_SUPPORT_GPU |
| 1524 sk_sp<GrXPFactory> SkBlendMode_AsXPFactory(SkBlendMode mode) { |
| 1525 const ProcCoeff rec = gProcCoeffs[(int)mode]; |
| 1526 if (CANNOT_USE_COEFF != rec.fSC) { |
| 1527 sk_sp<GrXPFactory> result(GrPorterDuffXPFactory::Make(mode)); |
| 1528 SkASSERT(result); |
| 1529 return result; |
| 1530 } |
| 1531 |
| 1532 SkASSERT(GrCustomXfermode::IsSupportedMode((SkXfermode::Mode)mode)); |
| 1533 return GrCustomXfermode::MakeXPFactory((SkXfermode::Mode)mode); |
| 1534 } |
| 1535 #endif |
OLD | NEW |