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