GrPorterDuffXferProcessor.h revision 6fd158ea47472c4d038e48980a95e36623f840c9
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:
276fd158ea47472c4d038e48980a95e36623f840c9cdalton    GrPorterDuffXPFactory(SkXfermode::Mode);
28915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel
294b91f768b348aa1cebeb54f3ff9331938734c242bsalomon    GrXferProcessor* onCreateXferProcessor(const GrCaps& caps,
303ad6570e94965d54871eaea8b314f560b82ca792egdaniel                                           const GrProcOptInfo& colorPOI,
3150785a3d10b53bea5beb6e18431a2449860be237bsalomon                                           const GrProcOptInfo& coveragePOI,
326a44c6a7d89b748fb040d41697a337d357d7fa22bsalomon                                           const DstTexture*) const override;
3350785a3d10b53bea5beb6e18431a2449860be237bsalomon
344b91f768b348aa1cebeb54f3ff9331938734c242bsalomon    bool willReadDstColor(const GrCaps& 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>();
406fd158ea47472c4d038e48980a95e36623f840c9cdalton        return fXfermode == xpf.fXfermode;
41915187b71d4068f21a15a1b8f4d919e1179d8b74egdaniel    }
42378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
43c230414861558ce20b74281b1ca363e56c441832egdaniel    GR_DECLARE_XP_FACTORY_TEST;
446fd158ea47472c4d038e48980a95e36623f840c9cdalton    static void TestGetXPOutputTypes(const GrXferProcessor*, int* outPrimary, int* outSecondary);
45c230414861558ce20b74281b1ca363e56c441832egdaniel
466fd158ea47472c4d038e48980a95e36623f840c9cdalton    SkXfermode::Mode fXfermode;
47378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
486fd158ea47472c4d038e48980a95e36623f840c9cdalton    friend class GrPorterDuffTest; // for TestGetXPOutputTypes()
49378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel    typedef GrXPFactory INHERITED;
50378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel};
51378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel
52378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#endif
53