aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPaint.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2017-02-21 16:32:20 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-02-21 22:27:17 +0000
commit94cce4cb2cf40b5ed3a1928c02618c1a98b1e0fa (patch)
treebd311de3092f22788eb90123138e444347b752db /src/gpu/GrPaint.cpp
parent5d5601c42982482552b9cde144558ddce9f789da (diff)
Make GrXferProcessor and related classes private.
Change-Id: I81ea6f5ea5c8b7b23848ef24524a7e48e531efe8 Reviewed-on: https://skia-review.googlesource.com/8819 Reviewed-by: Greg Daniel <egdaniel@google.com> Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/gpu/GrPaint.cpp')
-rw-r--r--src/gpu/GrPaint.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/gpu/GrPaint.cpp b/src/gpu/GrPaint.cpp
index 6d37adf5e9..0282bc38d2 100644
--- a/src/gpu/GrPaint.cpp
+++ b/src/gpu/GrPaint.cpp
@@ -6,12 +6,16 @@
*/
#include "GrPaint.h"
-
#include "GrProcOptInfo.h"
+#include "GrXferProcessor.h"
#include "effects/GrCoverageSetOpXP.h"
#include "effects/GrPorterDuffXferProcessor.h"
#include "effects/GrSimpleTextureEffect.h"
+void GrPaint::setPorterDuffXPFactory(SkBlendMode mode) {
+ fXPFactory = GrPorterDuffXPFactory::Get(mode);
+}
+
void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
fXPFactory = GrCoverageSetOpXPFactory::Get(regionOp, invertCoverage);
}
@@ -74,3 +78,22 @@ void GrPaint::addCoverageTextureProcessor(GrContext* ctx, sk_sp<GrTextureProxy>
this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Make(ctx, std::move(proxy),
nullptr, matrix, params));
}
+
+bool GrPaint::isConstantBlendedColor(GrColor* constantColor) const {
+ // This used to do a more sophisticated analysis but now it just explicitly looks for common
+ // cases.
+ static const GrXPFactory* kSrc = GrPorterDuffXPFactory::Get(SkBlendMode::kSrc);
+ static const GrXPFactory* kClear = GrPorterDuffXPFactory::Get(SkBlendMode::kClear);
+ if (kClear == fXPFactory) {
+ *constantColor = GrColor_TRANSPARENT_BLACK;
+ return true;
+ }
+ if (this->numColorFragmentProcessors()) {
+ return false;
+ }
+ if (kSrc == fXPFactory || (!fXPFactory && fColor.isOpaque())) {
+ *constantColor = fColor.toGrColor();
+ return true;
+ }
+ return false;
+}