blob: 7427785588b2ced313dd5d186a8869bcac61582f [file] [log] [blame]
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +00001
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
egdanielb6cbc382014-11-13 11:00:34 -080011#include "GrProcOptInfo.h"
egdanielb197b8f2015-02-17 07:34:43 -080012#include "effects/GrCoverageSetOpXP.h"
egdaniel378092f2014-12-03 10:40:13 -080013#include "effects/GrPorterDuffXferProcessor.h"
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000014#include "effects/GrSimpleTextureEffect.h"
15
joshualitt2fdeda02015-01-22 07:11:44 -080016GrPaint::GrPaint()
17 : fAntiAlias(false)
18 , fDither(false)
joshualitt5b4f05f2015-07-10 07:26:21 -070019 , fColor(GrColor_WHITE)
20 , fProcDataManager(SkNEW(GrProcessorDataManager)) {
joshualitt2fdeda02015-01-22 07:11:44 -080021}
22
egdanielb197b8f2015-02-17 07:34:43 -080023void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
24 fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage));
25}
26
joshualittb0a8a372014-09-23 09:50:21 -070027void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
joshualitt5b4f05f2015-07-10 07:26:21 -070028 this->addColorProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
joshualitt5f10b5c2015-07-09 10:24:35 -070029 matrix))->unref();
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000030}
31
joshualittb0a8a372014-09-23 09:50:21 -070032void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
joshualitt5b4f05f2015-07-10 07:26:21 -070033 this->addCoverageProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture,
joshualitt5f10b5c2015-07-09 10:24:35 -070034 matrix))->unref();
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000035}
36
joshualittb0a8a372014-09-23 09:50:21 -070037void GrPaint::addColorTextureProcessor(GrTexture* texture,
joshualitt40d4bd82014-12-29 09:04:40 -080038 const SkMatrix& matrix,
39 const GrTextureParams& params) {
joshualitt5b4f05f2015-07-10 07:26:21 -070040 this->addColorProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture, matrix,
joshualitt5f10b5c2015-07-09 10:24:35 -070041 params))->unref();
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000042}
43
joshualittb0a8a372014-09-23 09:50:21 -070044void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
joshualitt40d4bd82014-12-29 09:04:40 -080045 const SkMatrix& matrix,
46 const GrTextureParams& params) {
joshualitt5b4f05f2015-07-10 07:26:21 -070047 this->addCoverageProcessor(GrSimpleTextureEffect::Create(fProcDataManager, texture, matrix,
joshualitt5f10b5c2015-07-09 10:24:35 -070048 params))->unref();
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000049}
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000050
cdalton1fa45722015-06-02 10:43:39 -070051bool GrPaint::isConstantBlendedColor(GrColor* color) const {
egdaniel9e4ecdc2014-12-18 12:44:55 -080052 GrProcOptInfo colorProcInfo;
53 colorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), fColor,
54 kRGBA_GrColorComponentFlags, false);
55
cdalton1fa45722015-06-02 10:43:39 -070056 GrXPFactory::InvariantBlendedColor blendedColor;
57 fXPFactory->getInvariantBlendedColor(colorProcInfo, &blendedColor);
egdaniel9e4ecdc2014-12-18 12:44:55 -080058
cdalton1fa45722015-06-02 10:43:39 -070059 if (kRGBA_GrColorComponentFlags == blendedColor.fKnownColorFlags) {
60 *color = blendedColor.fKnownColor;
egdaniel9e4ecdc2014-12-18 12:44:55 -080061 return true;
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000062 }
63 return false;
64}