aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/SkShader.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-08-29 14:58:19 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-08-29 20:10:31 +0000
commit1d8c42eb903b66035ecf4d45b03dfeb1ad07b957 (patch)
treebddb7925865421ff762ae7e458ae3c24b6be477e /src/shaders/SkShader.cpp
parent8b0f265f70703fa96c6d9011b1d8440e60d63632 (diff)
fold params into StageRec
pre-CL before trying to add a hint-rect field to allow shaders to "optimize" their stages for a given restriction in device space - e.g. if the shader's intrinsic domain is contained, it won't need to tile/clamp Bug: skia: Change-Id: Ia2da557691da25f31e4b9e3f53c3bc6709b89083 Reviewed-on: https://skia-review.googlesource.com/40224 Reviewed-by: Mike Klein <mtklein@google.com> Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src/shaders/SkShader.cpp')
-rw-r--r--src/shaders/SkShader.cpp34
1 files changed, 12 insertions, 22 deletions
diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp
index d288054a99..896438898f 100644
--- a/src/shaders/SkShader.cpp
+++ b/src/shaders/SkShader.cpp
@@ -201,39 +201,29 @@ void SkShaderBase::toString(SkString* str) const {
}
#endif
-bool SkShaderBase::appendStages(SkRasterPipeline* p,
- SkColorSpace* dstCS,
- SkArenaAlloc* alloc,
- const SkMatrix& ctm,
- const SkPaint& paint,
- const SkMatrix* localM) const {
- return this->onAppendStages(p, dstCS, alloc, ctm, paint, localM);
+bool SkShaderBase::appendStages(const StageRec& rec) const {
+ return this->onAppendStages(rec);
}
-bool SkShaderBase::onAppendStages(SkRasterPipeline* p,
- SkColorSpace* dstCS,
- SkArenaAlloc* alloc,
- const SkMatrix& ctm,
- const SkPaint& paint,
- const SkMatrix* localM) const {
+bool SkShaderBase::onAppendStages(const StageRec& rec) const {
// SkShader::Context::shadeSpan4f() handles the paint opacity internally,
// but SkRasterPipelineBlitter applies it as a separate stage.
// We skip the internal shadeSpan4f() step by forcing the paint opaque.
- SkTCopyOnFirstWrite<SkPaint> opaquePaint(paint);
- if (paint.getAlpha() != SK_AlphaOPAQUE) {
+ SkTCopyOnFirstWrite<SkPaint> opaquePaint(rec.fPaint);
+ if (rec.fPaint.getAlpha() != SK_AlphaOPAQUE) {
opaquePaint.writable()->setAlpha(SK_AlphaOPAQUE);
}
- ContextRec rec(*opaquePaint, ctm, localM, ContextRec::kPM4f_DstType, dstCS);
+ ContextRec cr(*opaquePaint, rec.fCTM, rec.fLocalM, ContextRec::kPM4f_DstType, rec.fDstCS);
struct CallbackCtx : SkJumper_CallbackCtx {
sk_sp<SkShader> shader;
Context* ctx;
};
- auto cb = alloc->make<CallbackCtx>();
- cb->shader = dstCS ? SkColorSpaceXformer::Make(sk_ref_sp(dstCS))->apply(this)
- : sk_ref_sp((SkShader*)this);
- cb->ctx = as_SB(cb->shader)->makeContext(rec, alloc);
+ auto cb = rec.fAlloc->make<CallbackCtx>();
+ cb->shader = rec.fDstCS ? SkColorSpaceXformer::Make(sk_ref_sp(rec.fDstCS))->apply(this)
+ : sk_ref_sp((SkShader*)this);
+ cb->ctx = as_SB(cb->shader)->makeContext(cr, rec.fAlloc);
cb->fn = [](SkJumper_CallbackCtx* self, int active_pixels) {
auto c = (CallbackCtx*)self;
int x = (int)c->rgba[0],
@@ -242,8 +232,8 @@ bool SkShaderBase::onAppendStages(SkRasterPipeline* p,
};
if (cb->ctx) {
- p->append(SkRasterPipeline::seed_shader);
- p->append(SkRasterPipeline::callback, cb);
+ rec.fPipeline->append(SkRasterPipeline::seed_shader);
+ rec.fPipeline->append(SkRasterPipeline::callback, cb);
return true;
}
return false;