aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image/SkImageShader.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2016-11-29 15:33:39 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-29 21:36:32 +0000
commit7a14734d2cf20e99a24949e9513d823fdfa03b8d (patch)
treec9ea1280ca64907ddb8adbf06d326b9c7c1d38ac /src/image/SkImageShader.cpp
parent5b1a7c21006175d313aad09ef40f9453a21480e2 (diff)
support a8
Most of this is plumbing through the full paint to shaders instead of just the filter quality. CQ_INCLUDE_TRYBOTS=skia.primary:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD Change-Id: I6afde07566afa3a4391c24dca7017a9a4f5ec700 Reviewed-on: https://skia-review.googlesource.com/5317 Commit-Queue: Mike Klein <mtklein@chromium.org> Reviewed-by: Mike Reed <reed@google.com>
Diffstat (limited to 'src/image/SkImageShader.cpp')
-rw-r--r--src/image/SkImageShader.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/image/SkImageShader.cpp b/src/image/SkImageShader.cpp
index 3def5ec345..4415521164 100644
--- a/src/image/SkImageShader.cpp
+++ b/src/image/SkImageShader.cpp
@@ -273,7 +273,7 @@ SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFallbackAlloc* scratch,
- const SkMatrix& ctm, SkFilterQuality quality) const {
+ const SkMatrix& ctm, const SkPaint& paint) const {
SkPixmap pm;
if (!fImage->peekPixels(&pm)) {
return false;
@@ -286,12 +286,7 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal
return false;
}
- // TODO: all formats
- switch (info.colorType()) {
- case kAlpha_8_SkColorType:
- return false;
- default: break;
- }
+ auto quality = paint.getFilterQuality();
// When the matrix is just an integer translate, bilerp == nearest neighbor.
if (matrix.getType() <= SkMatrix::kTranslate_Mask &&
@@ -318,11 +313,12 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal
}
auto ctx = scratch->make<SkImageShaderContext>();
- ctx->pixels = pm.addr();
- ctx->ctable = pm.ctable();
- ctx->stride = pm.rowBytesAsPixels();
- ctx->width = pm.width();
- ctx->height = pm.height();
+ ctx->pixels = pm.addr();
+ ctx->ctable = pm.ctable();
+ ctx->color4f = SkColor4f_from_SkColor(paint.getColor(), dst);
+ ctx->stride = pm.rowBytesAsPixels();
+ ctx->width = pm.width();
+ ctx->height = pm.height();
if (matrix.asAffine(ctx->matrix)) {
p->append(SkRasterPipeline::matrix_2x3, ctx->matrix);
} else {
@@ -342,6 +338,7 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal
case kRepeat_TileMode: p->append(SkRasterPipeline::repeat_y, &ctx->height); break;
}
switch (info.colorType()) {
+ case kAlpha_8_SkColorType: p->append(SkRasterPipeline::gather_a8, ctx); break;
case kIndex_8_SkColorType: p->append(SkRasterPipeline::gather_i8, ctx); break;
case kGray_8_SkColorType: p->append(SkRasterPipeline::gather_g8, ctx); break;
case kRGB_565_SkColorType: p->append(SkRasterPipeline::gather_565, ctx); break;
@@ -386,7 +383,10 @@ bool SkImageShader::onAppendStages(SkRasterPipeline* p, SkColorSpace* dst, SkFal
if (effective_color_type(info.colorType()) == kBGRA_8888_SkColorType) {
p->append(SkRasterPipeline::swap_rb);
}
- if (info.alphaType() == kUnpremul_SkAlphaType) {
+ if (info.colorType() == kAlpha_8_SkColorType) {
+ p->append(SkRasterPipeline::set_rgb, &ctx->color4f);
+ }
+ if (info.colorType() == kAlpha_8_SkColorType || info.alphaType() == kUnpremul_SkAlphaType) {
p->append(SkRasterPipeline::premul);
}
return append_gamut_transform(p, scratch, info.colorSpace(), dst);