1 2/* 3 * Copyright 2013 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9#include "GrPaint.h" 10 11#include "GrProcOptInfo.h" 12#include "effects/GrCoverageSetOpXP.h" 13#include "effects/GrPorterDuffXferProcessor.h" 14#include "effects/GrSimpleTextureEffect.h" 15 16GrPaint::GrPaint() 17 : fAntiAlias(false) 18 , fDither(false) 19 , fColor(GrColor_WHITE) { 20} 21 22void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) { 23 fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage)); 24} 25 26void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { 27 this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); 28} 29 30void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { 31 this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); 32} 33 34void GrPaint::addColorTextureProcessor(GrTexture* texture, 35 const SkMatrix& matrix, 36 const GrTextureParams& params) { 37 this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); 38} 39 40void GrPaint::addCoverageTextureProcessor(GrTexture* texture, 41 const SkMatrix& matrix, 42 const GrTextureParams& params) { 43 this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); 44} 45 46bool GrPaint::isOpaqueAndConstantColor(GrColor* color) const { 47 GrProcOptInfo coverageProcInfo; 48 coverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->numCoverageStages(), 49 0xFFFFFFFF, kRGBA_GrColorComponentFlags, true); 50 GrProcOptInfo colorProcInfo; 51 colorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), fColor, 52 kRGBA_GrColorComponentFlags, false); 53 54 GrXPFactory::InvariantOutput output; 55 fXPFactory->getInvariantOutput(colorProcInfo, coverageProcInfo, &output); 56 57 if (kRGBA_GrColorComponentFlags == output.fBlendedColorFlags && 58 0xFF == GrColorUnpackA(output.fBlendedColor)) { 59 *color = output.fBlendedColor; 60 return true; 61 } 62 return false; 63} 64