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 14class SkRasterPipeline; 15 16bool SkBlendMode_SupportsCoverageAsAlpha(SkBlendMode); 17 18static inline bool SkBlendMode_CaresAboutRBOrder(SkBlendMode mode) { 19 return (mode > SkBlendMode::kLastSeparableMode); 20} 21 22void SkBlendMode_AppendStagesNoClamp(SkBlendMode, SkRasterPipeline*); 23void SkBlendMode_AppendClampIfNeeded(SkBlendMode, SkRasterPipeline*); 24 25static 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 31enum 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 46bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst); 47 48SkPM4f SkBlendMode_Apply(SkBlendMode, const SkPM4f& src, const SkPM4f& dst); 49 50#if SK_SUPPORT_GPU 51#include "GrXferProcessor.h" 52const GrXPFactory* SkBlendMode_AsXPFactory(SkBlendMode); 53#endif 54 55#endif 56