blob: 5bcd28a69e9ffdc83cfe4e38e0a89138631393a4 [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
egdanielb197b8f2015-02-17 07:34:43 -080015void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
Brian Salomona1633922017-01-09 11:46:10 -050016 fXPFactory = GrCoverageSetOpXPFactory::Get(regionOp, invertCoverage);
egdanielb197b8f2015-02-17 07:34:43 -080017}
18
brianosman54f30c12016-07-18 10:53:52 -070019void GrPaint::addColorTextureProcessor(GrTexture* texture,
20 sk_sp<GrColorSpaceXform> colorSpaceXform,
21 const SkMatrix& matrix) {
22 this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture,
23 std::move(colorSpaceXform),
24 matrix));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000025}
26
joshualittb0a8a372014-09-23 09:50:21 -070027void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
brianosman54f30c12016-07-18 10:53:52 -070028 this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000029}
30
joshualittb0a8a372014-09-23 09:50:21 -070031void GrPaint::addColorTextureProcessor(GrTexture* texture,
brianosman54f30c12016-07-18 10:53:52 -070032 sk_sp<GrColorSpaceXform> colorSpaceXform,
joshualitt40d4bd82014-12-29 09:04:40 -080033 const SkMatrix& matrix,
Brian Salomon514baff2016-11-17 15:17:07 -050034 const GrSamplerParams& params) {
brianosman54f30c12016-07-18 10:53:52 -070035 this->addColorFragmentProcessor(GrSimpleTextureEffect::Make(texture,
36 std::move(colorSpaceXform),
37 matrix, params));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000038}
39
joshualittb0a8a372014-09-23 09:50:21 -070040void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
joshualitt40d4bd82014-12-29 09:04:40 -080041 const SkMatrix& matrix,
Brian Salomon514baff2016-11-17 15:17:07 -050042 const GrSamplerParams& params) {
brianosman54f30c12016-07-18 10:53:52 -070043 this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(texture, nullptr, matrix,
44 params));
commit-bot@chromium.org42dacab2013-07-13 17:24:24 +000045}
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000046
bsalomon198ca422016-08-11 07:39:33 -070047bool GrPaint::internalIsConstantBlendedColor(GrColor paintColor, GrColor* color) const {
Brian Salomonaab259e2017-01-17 10:44:34 -050048 GrProcOptInfo colorProcInfo(paintColor, kRGBA_GrColorComponentFlags);
Brian Salomon0831f1b2017-01-18 11:08:41 -050049 colorProcInfo.analyzeProcessors(
50 sk_sp_address_as_pointer_address(fColorFragmentProcessors.begin()),
51 this->numColorFragmentProcessors());
egdaniel9e4ecdc2014-12-18 12:44:55 -080052
cdalton1fa45722015-06-02 10:43:39 -070053 GrXPFactory::InvariantBlendedColor blendedColor;
egdanielc4b72722015-11-23 13:20:41 -080054 if (fXPFactory) {
55 fXPFactory->getInvariantBlendedColor(colorProcInfo, &blendedColor);
56 } else {
57 GrPorterDuffXPFactory::SrcOverInvariantBlendedColor(colorProcInfo.color(),
58 colorProcInfo.validFlags(),
59 colorProcInfo.isOpaque(),
halcanary9d524f22016-03-29 09:03:52 -070060 &blendedColor);
egdanielc4b72722015-11-23 13:20:41 -080061 }
egdaniel9e4ecdc2014-12-18 12:44:55 -080062
cdalton1fa45722015-06-02 10:43:39 -070063 if (kRGBA_GrColorComponentFlags == blendedColor.fKnownColorFlags) {
64 *color = blendedColor.fKnownColor;
egdaniel9e4ecdc2014-12-18 12:44:55 -080065 return true;
commit-bot@chromium.org24ab3b02013-08-14 21:56:37 +000066 }
67 return false;
68}