1 /* 2 * Copyright 2016 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkBlendModePriv_DEFINED 9 #define SkBlendModePriv_DEFINED 10 11 #include "SkBlendMode.h" 12 #include "SkPM4f.h" 13 14 class SkRasterPipeline; 15 16 bool SkBlendMode_SupportsCoverageAsAlpha(SkBlendMode); 17 18 static inline bool SkBlendMode_CaresAboutRBOrder(SkBlendMode mode) { 19 return (mode > SkBlendMode::kLastSeparableMode); 20 } 21 22 void SkBlendMode_AppendStagesNoClamp(SkBlendMode, SkRasterPipeline*); 23 void SkBlendMode_AppendClampIfNeeded(SkBlendMode, SkRasterPipeline*); 24 25 static inline void SkBlendMode_AppendStages(SkBlendMode mode, SkRasterPipeline* p) { 26 // Only plus clamps, so maybe append a clamping plus here instead of a second stage? 27 SkBlendMode_AppendStagesNoClamp(mode, p); 28 SkBlendMode_AppendClampIfNeeded(mode, p); 29 } 30 31 enum class SkBlendModeCoeff { 32 kZero, /** 0 */ 33 kOne, /** 1 */ 34 kSC, /** src color */ 35 kISC, /** inverse src color (i.e. 1 - sc) */ 36 kDC, /** dst color */ 37 kIDC, /** inverse dst color (i.e. 1 - dc) */ 38 kSA, /** src alpha */ 39 kISA, /** inverse src alpha (i.e. 1 - sa) */ 40 kDA, /** dst alpha */ 41 kIDA, /** inverse dst alpha (i.e. 1 - da) */ 42 43 kCoeffCount 44 }; 45 46 bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst); 47 48 SkPM4f SkBlendMode_Apply(SkBlendMode, const SkPM4f& src, const SkPM4f& dst); 49 50 #if SK_SUPPORT_GPU 51 #include "GrXferProcessor.h" 52 const GrXPFactory* SkBlendMode_AsXPFactory(SkBlendMode); 53 #endif 54 55 #endif 56