| /* | |
| * Copyright 2013 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "GrPaint.h" | |
| #include "GrProcOptInfo.h" | |
| #include "effects/GrCoverageSetOpXP.h" | |
| #include "effects/GrPorterDuffXferProcessor.h" | |
| #include "effects/GrSimpleTextureEffect.h" | |
| GrPaint::GrPaint() | |
| : fAntiAlias(false) | |
| , fColor(GrColor_WHITE) {} | |
| void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) { | |
| fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage)); | |
| } | |
| void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { | |
| this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); | |
| } | |
| void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { | |
| this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); | |
| } | |
| void GrPaint::addColorTextureProcessor(GrTexture* texture, | |
| const SkMatrix& matrix, | |
| const GrTextureParams& params) { | |
| this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(texture, | |
| matrix, params))->unref(); | |
| } | |
| void GrPaint::addCoverageTextureProcessor(GrTexture* texture, | |
| const SkMatrix& matrix, | |
| const GrTextureParams& params) { | |
| this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(texture, | |
| matrix, params))->unref(); | |
| } | |
| bool GrPaint::isConstantBlendedColor(GrColor* color) const { | |
| GrProcOptInfo colorProcInfo; | |
| colorProcInfo.calcWithInitialValues(fColorFragmentProcessors.begin(), | |
| this->numColorFragmentProcessors(), fColor, | |
| kRGBA_GrColorComponentFlags, false); | |
| GrXPFactory::InvariantBlendedColor blendedColor; | |
| if (fXPFactory) { | |
| fXPFactory->getInvariantBlendedColor(colorProcInfo, &blendedColor); | |
| } else { | |
| GrPorterDuffXPFactory::SrcOverInvariantBlendedColor(colorProcInfo.color(), | |
| colorProcInfo.validFlags(), | |
| colorProcInfo.isOpaque(), | |
| &blendedColor); | |
| } | |
| if (kRGBA_GrColorComponentFlags == blendedColor.fKnownColorFlags) { | |
| *color = blendedColor.fKnownColor; | |
| return true; | |
| } | |
| return false; | |
| } |