blob: c6d7f7d60d5a36a0f65d345d177c67cfdb393276 [file] [log] [blame]
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "GrPaint.h"
9
egdanielb6cbc382014-11-13 11:00:34 -080010#include "GrProcOptInfo.h"
egdanielb197b8f2015-02-17 07:34:43 -080011#include "effects/GrCoverageSetOpXP.h"
egdaniel378092f2014-12-03 10:40:13 -080012#include "effects/GrPorterDuffXferProcessor.h"
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000013#include "effects/GrSimpleTextureEffect.h"
14
joshualitt2fdeda02015-01-22 07:11:44 -080015GrPaint::GrPaint()
16 : fAntiAlias(false)
brianosman64d094d2016-03-25 06:01:59 -070017 , fDisableOutputConversionToSRGB(false)
brianosman898235c2016-04-06 07:38:23 -070018 , fAllowSRGBInputs(false)
dvonbeck9b03e7b2016-08-01 11:01:56 -070019 , fUsesDistanceVectorField(false)
Brian Osman618d3042016-10-25 10:51:28 -040020 , fColor(GrColor4f::OpaqueWhite()) {}
joshualitt2fdeda02015-01-22 07:11:44 -080021
egdanielb197b8f2015-02-17 07:34:43 -080022void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
bungeman06ca8ec2016-06-09 08:01:03 -070023 fXPFactory = GrCoverageSetOpXPFactory::Make(regionOp, invertCoverage);
egdanielb197b8f2015-02-17 07:34:43 -080024}
25
brianosman54f30c12016-07-18 10:53:52 -070026void GrPaint::addColorTextureProcessor(GrTexture* texture,
27 sk_sp<GrColorSpaceXform> colorSpaceXform,
28 const SkMatrix& matrix) {
29 this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture,
30 std::move(colorSpaceXform),
31 matrix));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000032}
33
joshualittb0a8a372014-09-23 09:50:21 -070034void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
brianosman54f30c12016-07-18 10:53:52 -070035 this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000036}
37
joshualittb0a8a372014-09-23 09:50:21 -070038void GrPaint::addColorTextureProcessor(GrTexture* texture,
brianosman54f30c12016-07-18 10:53:52 -070039 sk_sp<GrColorSpaceXform> colorSpaceXform,
joshualitt40d4bd82014-12-29 09:04:40 -080040 const SkMatrix& matrix,
41 const GrTextureParams& params) {
brianosman54f30c12016-07-18 10:53:52 -070042 this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture,
43 std::move(colorSpaceXform),
44 matrix, params));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000045}
46
joshualittb0a8a372014-09-23 09:50:21 -070047void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
joshualitt40d4bd82014-12-29 09:04:40 -080048 const SkMatrix& matrix,
49 const GrTextureParams& params) {
brianosman54f30c12016-07-18 10:53:52 -070050 this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix,
51 params));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000052}
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000053
bsalomon198ca422016-08-11 07:39:33 -070054bool GrPaint::internalIsConstantBlendedColor(GrColor paintColor, GrColor* color) const {
egdaniel9e4ecdc2014-12-18 12:44:55 -080055 GrProcOptInfo colorProcInfo;
bungeman06ca8ec2016-06-09 08:01:03 -070056 colorProcInfo.calcWithInitialValues(
57 sk_sp_address_as_pointer_address(fColorFragmentProcessors.begin()),
bsalomon198ca422016-08-11 07:39:33 -070058 this->numColorFragmentProcessors(), paintColor, kRGBA_GrColorComponentFlags, false);
egdaniel9e4ecdc2014-12-18 12:44:55 -080059
cdalton1fa45722015-06-02 10:43:39 -070060 GrXPFactory::InvariantBlendedColor blendedColor;
egdanielc4b72722015-11-23 13:20:41 -080061 if (fXPFactory) {
62 fXPFactory->getInvariantBlendedColor(colorProcInfo, &blendedColor);
63 } else {
64 GrPorterDuffXPFactory::SrcOverInvariantBlendedColor(colorProcInfo.color(),
65 colorProcInfo.validFlags(),
66 colorProcInfo.isOpaque(),
halcanary9d524f22016-03-29 09:03:52 -070067 &blendedColor);
egdanielc4b72722015-11-23 13:20:41 -080068 }
egdaniel9e4ecdc2014-12-18 12:44:55 -080069
cdalton1fa45722015-06-02 10:43:39 -070070 if (kRGBA_GrColorComponentFlags == blendedColor.fKnownColorFlags) {
71 *color = blendedColor.fKnownColor;
egdaniel9e4ecdc2014-12-18 12:44:55 -080072 return true;
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000073 }
74 return false;
75}