aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/SkImageShader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shaders/SkImageShader.cpp')
-rw-r--r--src/shaders/SkImageShader.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp
index ba6c9fa9fc..f5756fe2fa 100644
--- a/src/shaders/SkImageShader.cpp
+++ b/src/shaders/SkImageShader.cpp
@@ -253,20 +253,21 @@ SkFlattenable::Register("SkBitmapProcShader", SkBitmapProcShader_CreateProc, kSk
SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
-bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dstCS, SkArenaAlloc* alloc,
- const SkMatrix& ctm, const SkPaint& paint,
- const SkMatrix* localM) const {
- auto matrix = SkMatrix::Concat(ctm, this->getLocalMatrix());
- if (localM) {
- matrix.preConcat(*localM);
+bool SkImageShader::onAppendStages(const StageRec& rec) const {
+ SkRasterPipeline* p = rec.fPipeline;
+ SkArenaAlloc* alloc = rec.fAlloc;
+
+ auto matrix = SkMatrix::Concat(rec.fCTM, this->getLocalMatrix());
+ if (rec.fLocalM) {
+ matrix.preConcat(*rec.fLocalM);
}
if (!matrix.invert(&matrix)) {
return false;
}
- auto quality = paint.getFilterQuality();
+ auto quality = rec.fPaint.getFilterQuality();
- SkBitmapProvider provider(fImage.get(), dstCS);
+ SkBitmapProvider provider(fImage.get(), rec.fDstCS);
SkDefaultBitmapController controller;
std::unique_ptr<SkBitmapController::State> state {
controller.requestBitmap(provider, matrix, quality)
@@ -308,7 +309,7 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dstCS, SkA
};
auto misc = alloc->make<MiscCtx>();
misc->state = std::move(state); // Extend lifetime to match the pipeline's.
- misc->paint_color = SkColor4f_from_SkColor(paint.getColor(), dstCS);
+ misc->paint_color = SkColor4f_from_SkColor(rec.fPaint.getColor(), rec.fDstCS);
p->append_matrix(alloc, matrix);
auto gather = alloc->make<SkJumper_MemoryCtx>();
@@ -343,7 +344,7 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dstCS, SkA
case kRGBA_F16_SkColorType: p->append(SkRasterPipeline::gather_f16, gather); break;
default: SkASSERT(false);
}
- if (dstCS && (!info.colorSpace() || info.gammaCloseToSRGB())) {
+ if (rec.fDstCS && (!info.colorSpace() || info.gammaCloseToSRGB())) {
p->append_from_srgb(info.alphaType());
}
};
@@ -409,6 +410,6 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dstCS, SkA
p->append(SkRasterPipeline::clamp_0);
p->append(SkRasterPipeline::clamp_a);
}
- append_gamut_transform(p, alloc, info.colorSpace(), dstCS, kPremul_SkAlphaType);
+ append_gamut_transform(p, alloc, info.colorSpace(), rec.fDstCS, kPremul_SkAlphaType);
return true;
}