| /* | |
| * 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/GrPorterDuffXferProcessor.h" | |
| #include "effects/GrSimpleTextureEffect.h" | |
| void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { | |
| this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); | |
| } | |
| void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) { | |
| this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref(); | |
| } | |
| void GrPaint::addColorTextureProcessor(GrTexture* texture, | |
| const SkMatrix& matrix, | |
| const GrTextureParams& params) { | |
| this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); | |
| } | |
| void GrPaint::addCoverageTextureProcessor(GrTexture* texture, | |
| const SkMatrix& matrix, | |
| const GrTextureParams& params) { | |
| this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref(); | |
| } | |
| bool GrPaint::isOpaqueAndConstantColor(GrColor* color) const { | |
| GrProcOptInfo coverageProcInfo; | |
| coverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->numCoverageStages(), | |
| 0xFFFFFFFF, kRGBA_GrColorComponentFlags, true); | |
| GrProcOptInfo colorProcInfo; | |
| colorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), fColor, | |
| kRGBA_GrColorComponentFlags, false); | |
| GrXPFactory::InvariantOutput output; | |
| fXPFactory->getInvariantOutput(colorProcInfo, coverageProcInfo, &output); | |
| if (kRGBA_GrColorComponentFlags == output.fBlendedColorFlags && | |
| 0xFF == GrColorUnpackA(output.fBlendedColor)) { | |
| *color = output.fBlendedColor; | |
| return true; | |
| } | |
| return false; | |
| } | |
| void GrPaint::resetStages() { | |
| fColorStages.reset(); | |
| fCoverageStages.reset(); | |
| fXPFactory.reset(GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode)); | |
| } | |