diff options
author | cdalton <cdalton@nvidia.com> | 2015-06-12 08:21:26 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-12 08:21:26 -0700 |
commit | ee0175f1b0c9099096d90945a985378dbe8e7fd9 (patch) | |
tree | bdab4f33f4895196d05781944f18ea5d637e5b32 /src/gpu/GrBlend.h | |
parent | 7e8521610446df6222703e8bc2a2fb45ec77823a (diff) |
Move blend enums into GrBlend.h
Moves blend enums from GrXferProcessor.h to GrBlend.h, makes GrBlend.h
public.
BUG=skia:
Review URL: https://codereview.chromium.org/1180713008
Diffstat (limited to 'src/gpu/GrBlend.h')
-rw-r--r-- | src/gpu/GrBlend.h | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/src/gpu/GrBlend.h b/src/gpu/GrBlend.h deleted file mode 100644 index 7021902765..0000000000 --- a/src/gpu/GrBlend.h +++ /dev/null @@ -1,155 +0,0 @@ - -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "GrTypes.h" -#include "SkTLogic.h" -#include "GrXferProcessor.h" - -#ifndef GrBlend_DEFINED -#define GrBlend_DEFINED - -template<GrBlendCoeff Coeff> -struct GrTBlendCoeffRefsSrc : SkTBool<kSC_GrBlendCoeff == Coeff || - kISC_GrBlendCoeff == Coeff || - kSA_GrBlendCoeff == Coeff || - kISA_GrBlendCoeff == Coeff> {}; - -#define GR_BLEND_COEFF_REFS_SRC(COEFF) \ - GrTBlendCoeffRefsSrc<COEFF>::value - -inline bool GrBlendCoeffRefsSrc(GrBlendCoeff coeff) { - switch (coeff) { - case kSC_GrBlendCoeff: - case kISC_GrBlendCoeff: - case kSA_GrBlendCoeff: - case kISA_GrBlendCoeff: - return true; - default: - return false; - } -} - - -template<GrBlendCoeff Coeff> -struct GrTBlendCoeffRefsDst : SkTBool<kDC_GrBlendCoeff == Coeff || - kIDC_GrBlendCoeff == Coeff || - kDA_GrBlendCoeff == Coeff || - kIDA_GrBlendCoeff == Coeff> {}; - -#define GR_BLEND_COEFF_REFS_DST(COEFF) \ - GrTBlendCoeffRefsDst<COEFF>::value - -inline bool GrBlendCoeffRefsDst(GrBlendCoeff coeff) { - switch (coeff) { - case kDC_GrBlendCoeff: - case kIDC_GrBlendCoeff: - case kDA_GrBlendCoeff: - case kIDA_GrBlendCoeff: - return true; - default: - return false; - } -} - - -template<GrBlendCoeff Coeff> -struct GrTBlendCoeffRefsSrc2 : SkTBool<kS2C_GrBlendCoeff == Coeff || - kIS2C_GrBlendCoeff == Coeff || - kS2A_GrBlendCoeff == Coeff || - kIS2A_GrBlendCoeff == Coeff> {}; - -#define GR_BLEND_COEFF_REFS_SRC2(COEFF) \ - GrTBlendCoeffRefsSrc2<COEFF>::value - -inline bool GrBlendCoeffRefsSrc2(GrBlendCoeff coeff) { - switch (coeff) { - case kS2C_GrBlendCoeff: - case kIS2C_GrBlendCoeff: - case kS2A_GrBlendCoeff: - case kIS2A_GrBlendCoeff: - return true; - default: - return false; - } -} - - -template<GrBlendCoeff SrcCoeff, GrBlendCoeff DstCoeff> -struct GrTBlendCoeffsUseSrcColor : SkTBool<kZero_GrBlendCoeff != SrcCoeff || - GR_BLEND_COEFF_REFS_SRC(DstCoeff)> {}; - -#define GR_BLEND_COEFFS_USE_SRC_COLOR(SRC_COEFF, DST_COEFF) \ - GrTBlendCoeffsUseSrcColor<SRC_COEFF, DST_COEFF>::value - - -template<GrBlendCoeff SrcCoeff, GrBlendCoeff DstCoeff> -struct GrTBlendCoeffsUseDstColor : SkTBool<GR_BLEND_COEFF_REFS_DST(SrcCoeff) || - kZero_GrBlendCoeff != DstCoeff> {}; - -#define GR_BLEND_COEFFS_USE_DST_COLOR(SRC_COEFF, DST_COEFF) \ - GrTBlendCoeffsUseDstColor<SRC_COEFF, DST_COEFF>::value - - -template<GrBlendEquation Equation> -struct GrTBlendEquationIsAdvanced : SkTBool<Equation >= kFirstAdvancedGrBlendEquation> {}; - -#define GR_BLEND_EQUATION_IS_ADVANCED(EQUATION) \ - GrTBlendEquationIsAdvanced<EQUATION>::value - -inline bool GrBlendEquationIsAdvanced(GrBlendEquation equation) { - return equation >= kFirstAdvancedGrBlendEquation; -} - - -template<GrBlendEquation BlendEquation, GrBlendCoeff SrcCoeff, GrBlendCoeff DstCoeff> -struct GrTBlendModifiesDst : SkTBool<(kAdd_GrBlendEquation != BlendEquation && - kReverseSubtract_GrBlendEquation != BlendEquation) || - kZero_GrBlendCoeff != SrcCoeff || - kOne_GrBlendCoeff != DstCoeff> {}; - -#define GR_BLEND_MODIFIES_DST(EQUATION, SRC_COEFF, DST_COEFF) \ - GrTBlendModifiesDst<EQUATION, SRC_COEFF, DST_COEFF>::value - - -/** - * Advanced blend equations can always tweak alpha for coverage. (See GrCustomXfermode.cpp) - * - * For "add" and "reverse subtract" the blend equation with f=coverage is: - * - * D' = f * (S * srcCoeff + D * dstCoeff) + (1-f) * D - * = f * S * srcCoeff + D * (f * dstCoeff + (1 - f)) - * - * (Let srcCoeff be negative for reverse subtract.) We can tweak alpha for coverage when the - * following relationship holds: - * - * (f*S) * srcCoeff' + D * dstCoeff' == f * S * srcCoeff + D * (f * dstCoeff + (1 - f)) - * - * (Where srcCoeff' and dstCoeff' have any reference to S pre-multiplied by f.) - * - * It's easy to see this works for the src term as long as srcCoeff' == srcCoeff (meaning srcCoeff - * does not reference S). For the dst term, this will work as long as the following is true: - *| - * dstCoeff' == f * dstCoeff + (1 - f) - * dstCoeff' == 1 - f * (1 - dstCoeff) - * - * By inspection we can see this will work as long as dstCoeff has a 1, and any other term in - * dstCoeff references S. - */ -template<GrBlendEquation Equation, GrBlendCoeff SrcCoeff, GrBlendCoeff DstCoeff> -struct GrTBlendCanTweakAlphaForCoverage : SkTBool<GR_BLEND_EQUATION_IS_ADVANCED(Equation) || - ((kAdd_GrBlendEquation == Equation || - kReverseSubtract_GrBlendEquation == Equation) && - !GR_BLEND_COEFF_REFS_SRC(SrcCoeff) && - (kOne_GrBlendCoeff == DstCoeff || - kISC_GrBlendCoeff == DstCoeff || - kISA_GrBlendCoeff == DstCoeff))> {}; - -#define GR_BLEND_CAN_TWEAK_ALPHA_FOR_COVERAGE(EQUATION, SRC_COEFF, DST_COEFF) \ - GrTBlendCanTweakAlphaForCoverage<EQUATION, SRC_COEFF, DST_COEFF>::value - -#endif |