GrPorterDuffXferProcessor.h revision 3ad6570e94965d54871eaea8b314f560b82ca792
1/*
2 * Copyright 2014 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 GrPorterDuffXferProcessor_DEFINED
9#define GrPorterDuffXferProcessor_DEFINED
10
11#include "GrTypes.h"
12#include "GrXferProcessor.h"
13#include "SkXfermode.h"
14
15class GrProcOptInfo;
16
17class GrPorterDuffXPFactory : public GrXPFactory {
18public:
19    static GrXPFactory* Create(SkXfermode::Mode mode);
20
21    bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE;
22
23    bool canApplyCoverage(const GrProcOptInfo& /*colorPOI*/,
24                          const GrProcOptInfo& /*coveragePOI*/) const SK_OVERRIDE {
25        return true;
26    }
27
28    bool canTweakAlphaForCoverage() const SK_OVERRIDE;
29
30    void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
31                            GrXPFactory::InvariantOutput*) const SK_OVERRIDE;
32
33private:
34    GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst);
35
36    GrXferProcessor* onCreateXferProcessor(const GrDrawTargetCaps& caps,
37                                           const GrProcOptInfo& colorPOI,
38                                           const GrProcOptInfo& coveragePOI,
39                                           const GrDeviceCoordTexture* dstCopy) const SK_OVERRIDE;
40
41    bool willReadDstColor(const GrDrawTargetCaps& caps,
42                          const GrProcOptInfo& colorPOI,
43                          const GrProcOptInfo& coveragePOI) const SK_OVERRIDE;
44
45    bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE {
46        const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>();
47        return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff);
48    }
49
50    GR_DECLARE_XP_FACTORY_TEST;
51
52    GrBlendCoeff fSrcCoeff;
53    GrBlendCoeff fDstCoeff;
54
55    typedef GrXPFactory INHERITED;
56};
57
58#endif
59