1378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel/*
2378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel * Copyright 2014 Google Inc.
3378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel *
4378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel * Use of this source code is governed by a BSD-style license that can be
5378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel * found in the LICENSE file.
6378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel */
7378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
8378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#ifndef GrPorterDuffXferProcessor_DEFINED
9378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#define GrPorterDuffXferProcessor_DEFINED
10378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
11378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#include "GrTypes.h"
12378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#include "GrXferProcessor.h"
13378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#include "SkXfermode.h"
14378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
158750924a1470e8215b2a344155259b93062d3fa2egdanielclass GrProcOptInfo;
16378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
17378092f3d10b1dd62967f419c35cfefec7c10ee7egdanielclass GrPorterDuffXPFactory : public GrXPFactory {
18378092f3d10b1dd62967f419c35cfefec7c10ee7egdanielpublic:
19c016fb8f9fb53dd8d4936c5e9e16a9dc99ab392eegdaniel    static GrXPFactory* Create(SkXfermode::Mode mode);
20c016fb8f9fb53dd8d4936c5e9e16a9dc99ab392eegdaniel
2136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const override;
22378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
239e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel    void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
2436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                            GrXPFactory::InvariantOutput*) const override;
259513143efa734bef0c1a0c7f945022572dbc8518egdaniel
26378092f3d10b1dd62967f419c35cfefec7c10ee7egdanielprivate:
27915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel    GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst);
28915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel
293ad6570e94965d54871eaea8b314f560b82ca792egdaniel    GrXferProcessor* onCreateXferProcessor(const GrDrawTargetCaps& caps,
303ad6570e94965d54871eaea8b314f560b82ca792egdaniel                                           const GrProcOptInfo& colorPOI,
3150785a3d10b53bea5beb6e18431a2449860be237bsalomon                                           const GrProcOptInfo& coveragePOI,
3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                                           const GrDeviceCoordTexture* dstCopy) const override;
3350785a3d10b53bea5beb6e18431a2449860be237bsalomon
343ad6570e94965d54871eaea8b314f560b82ca792egdaniel    bool willReadDstColor(const GrDrawTargetCaps& caps,
353ad6570e94965d54871eaea8b314f560b82ca792egdaniel                          const GrProcOptInfo& colorPOI,
3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                          const GrProcOptInfo& coveragePOI) const override;
3750785a3d10b53bea5beb6e18431a2449860be237bsalomon
3836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    bool onIsEqual(const GrXPFactory& xpfBase) const override {
39915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel        const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>();
409513143efa734bef0c1a0c7f945022572dbc8518egdaniel        return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff);
41915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel    }
42378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
43c230414861558ce20b74281b1ca363e56c441832egdaniel    GR_DECLARE_XP_FACTORY_TEST;
44c230414861558ce20b74281b1ca363e56c441832egdaniel
459513143efa734bef0c1a0c7f945022572dbc8518egdaniel    GrBlendCoeff fSrcCoeff;
469513143efa734bef0c1a0c7f945022572dbc8518egdaniel    GrBlendCoeff fDstCoeff;
47378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
48378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel    typedef GrXPFactory INHERITED;
49378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel};
50378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
51378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#endif
52