142dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 242dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org/* 342dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org * Copyright 2013 Google Inc. 442dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org * 542dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 642dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org * found in the LICENSE file. 742dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org */ 842dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 942dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org#include "GrPaint.h" 1042dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 11b6cbc38702dc4a1540a17181cbdab71060c92ce7egdaniel#include "GrProcOptInfo.h" 12b197b8ff31b73ccb20423023e03592df8ae78ea6egdaniel#include "effects/GrCoverageSetOpXP.h" 13378092f3d10b1dd62967f419c35cfefec7c10ee7egdaniel#include "effects/GrPorterDuffXferProcessor.h" 1442dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org#include "effects/GrSimpleTextureEffect.h" 1542dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 162fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualittGrPaint::GrPaint() 172fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualitt : fAntiAlias(false) 182fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualitt , fDither(false) 192fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualitt , fColor(GrColor_WHITE) { 202fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualitt} 212fdeda04988867625bb9bc2f7f6037406a0a98ecjoshualitt 22b197b8ff31b73ccb20423023e03592df8ae78ea6egdanielvoid GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) { 23b197b8ff31b73ccb20423023e03592df8ae78ea6egdaniel fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage)); 24b197b8ff31b73ccb20423023e03592df8ae78ea6egdaniel} 25b197b8ff31b73ccb20423023e03592df8ae78ea6egdaniel 26b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { 27b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); 2842dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org} 2942dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 30b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { 31b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); 3242dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org} 3342dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 34b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrPaint::addColorTextureProcessor(GrTexture* texture, 3540d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const SkMatrix& matrix, 3640d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const GrTextureParams& params) { 37b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); 3842dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org} 3942dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org 40b0a8a377f832c59cee939ad721e1f87d378b7142joshualittvoid GrPaint::addCoverageTextureProcessor(GrTexture* texture, 4140d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const SkMatrix& matrix, 4240d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const GrTextureParams& params) { 43b0a8a377f832c59cee939ad721e1f87d378b7142joshualitt this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); 4442dacab4e7366d9f53989558cc8d045c3d065bcdcommit-bot@chromium.org} 4524ab3b0ce50b3428f063849b6160e468f047487ccommit-bot@chromium.org 4624ab3b0ce50b3428f063849b6160e468f047487ccommit-bot@chromium.orgbool GrPaint::isOpaqueAndConstantColor(GrColor* color) const { 479e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel GrProcOptInfo coverageProcInfo; 489e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel coverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->numCoverageStages(), 499e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel 0xFFFFFFFF, kRGBA_GrColorComponentFlags, true); 509e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel GrProcOptInfo colorProcInfo; 519e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel colorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), fColor, 529e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel kRGBA_GrColorComponentFlags, false); 539e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel 549e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel GrXPFactory::InvariantOutput output; 55080e673b10ac607305f140ddb245e140ccde40c6egdaniel fXPFactory->getInvariantOutput(colorProcInfo, coverageProcInfo, &output); 569e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel 579e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel if (kRGBA_GrColorComponentFlags == output.fBlendedColorFlags && 589e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel 0xFF == GrColorUnpackA(output.fBlendedColor)) { 599e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel *color = output.fBlendedColor; 609e4ecdc9f86724dcce23dc7546e2f295b901407begdaniel return true; 6124ab3b0ce50b3428f063849b6160e468f047487ccommit-bot@chromium.org } 6224ab3b0ce50b3428f063849b6160e468f047487ccommit-bot@chromium.org return false; 6324ab3b0ce50b3428f063849b6160e468f047487ccommit-bot@chromium.org} 64