C++程序  |  50行  |  1.21 KB

/*
 * Copyright 2018 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkCoverageModePriv_DEFINED
#define SkCoverageModePriv_DEFINED

#include "SkBlendMode.h"
#include "SkCoverageMode.h"

const SkBlendMode gUncorrelatedCoverageToBlend[] = {
    SkBlendMode::kSrcOver,  // or DstOver
    SkBlendMode::kSrcIn,    // or kDstIn
    SkBlendMode::kSrcOut,
    SkBlendMode::kDstOut,
    SkBlendMode::kXor,
};

#if 0
// Experimental idea to extend to overlap types

Master calculation =   X(S,D) + Y(S,D) + Z(S,D)

enum class SkCoverageOverlap {
                    // X                Y               Z
    kUncorrelated,  // S*D              S*(1-D)         D*(1-S)
    kConjoint,      // min(S,D)         max(S-D,0)      max(D-S,0)
    kDisjoint,      // max(S+D-1,0)     min(S,1-D)      min(D,1-S)

    kLast = kDisjoint
};

// The coverage modes each have a set of coefficients to be applied to the general equation (above)
//
//  e.g.
//     kXor+conjoint = max(S-D,0) + max(D-S,0) ==> abs(D-S)
//
kUnion,             // 1,1,1
kIntersect,         // 1,0,0
kDifference,        // 0,1,0
kReverseDifference, // 0,0,1
kXor,               // 0,1,1

#endif

#endif