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