1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2013 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrPaint.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkBlendMode.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/effects/GrCoverageSetOpXP.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/effects/GrPorterDuffXferProcessor.h" 13*c8dee2aaSAndroid Build Coastguard Worker GrPaint(const GrPaint & that)14*c8dee2aaSAndroid Build Coastguard WorkerGrPaint::GrPaint(const GrPaint& that) 15*c8dee2aaSAndroid Build Coastguard Worker : fXPFactory(that.fXPFactory) 16*c8dee2aaSAndroid Build Coastguard Worker , fTrivial(that.fTrivial) 17*c8dee2aaSAndroid Build Coastguard Worker , fColor(that.fColor) { 18*c8dee2aaSAndroid Build Coastguard Worker if (that.fColorFragmentProcessor) { 19*c8dee2aaSAndroid Build Coastguard Worker fColorFragmentProcessor = that.fColorFragmentProcessor->clone(); 20*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fColorFragmentProcessor); 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker if (that.fCoverageFragmentProcessor) { 23*c8dee2aaSAndroid Build Coastguard Worker fCoverageFragmentProcessor = that.fCoverageFragmentProcessor->clone(); 24*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fCoverageFragmentProcessor); 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker } 27*c8dee2aaSAndroid Build Coastguard Worker setPorterDuffXPFactory(SkBlendMode mode)28*c8dee2aaSAndroid Build Coastguard Workervoid GrPaint::setPorterDuffXPFactory(SkBlendMode mode) { 29*c8dee2aaSAndroid Build Coastguard Worker this->setXPFactory(GrPorterDuffXPFactory::Get(mode)); 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker setCoverageSetOpXPFactory(SkRegion::Op regionOp,bool invertCoverage)32*c8dee2aaSAndroid Build Coastguard Workervoid GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) { 33*c8dee2aaSAndroid Build Coastguard Worker this->setXPFactory(GrCoverageSetOpXPFactory::Get(regionOp, invertCoverage)); 34*c8dee2aaSAndroid Build Coastguard Worker } 35*c8dee2aaSAndroid Build Coastguard Worker isConstantBlendedColor(SkPMColor4f * constantColor) const36*c8dee2aaSAndroid Build Coastguard Workerbool GrPaint::isConstantBlendedColor(SkPMColor4f* constantColor) const { 37*c8dee2aaSAndroid Build Coastguard Worker // This used to do a more sophisticated analysis but now it just explicitly looks for common 38*c8dee2aaSAndroid Build Coastguard Worker // cases. 39*c8dee2aaSAndroid Build Coastguard Worker static const GrXPFactory* kSrc = GrPorterDuffXPFactory::Get(SkBlendMode::kSrc); 40*c8dee2aaSAndroid Build Coastguard Worker static const GrXPFactory* kClear = GrPorterDuffXPFactory::Get(SkBlendMode::kClear); 41*c8dee2aaSAndroid Build Coastguard Worker if (kClear == fXPFactory) { 42*c8dee2aaSAndroid Build Coastguard Worker *constantColor = SK_PMColor4fTRANSPARENT; 43*c8dee2aaSAndroid Build Coastguard Worker return true; 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker if (this->hasColorFragmentProcessor()) { 46*c8dee2aaSAndroid Build Coastguard Worker return false; 47*c8dee2aaSAndroid Build Coastguard Worker } 48*c8dee2aaSAndroid Build Coastguard Worker if (kSrc == fXPFactory || (!fXPFactory && fColor.isOpaque())) { 49*c8dee2aaSAndroid Build Coastguard Worker *constantColor = fColor; 50*c8dee2aaSAndroid Build Coastguard Worker return true; 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker return false; 53*c8dee2aaSAndroid Build Coastguard Worker } 54