Index: gm/composeshader.cpp |
diff --git a/gm/composeshader.cpp b/gm/composeshader.cpp |
index efcfe79afe5abd97dfeae770507e54444aa40972..c029c9855959f0d2949c03212a76a7964d2aceab 100644 |
--- a/gm/composeshader.cpp |
+++ b/gm/composeshader.cpp |
@@ -221,6 +221,44 @@ private: |
typedef GM INHERITED; |
}; |
+DEF_SIMPLE_GM(composeshader_bitmap2, canvas, 200, 200) { |
+ int width = 255; |
+ int height = 255; |
+ SkTDArray<uint8_t> dst8Storage; |
+ dst8Storage.setCount(width * height); |
+ SkTDArray<uint32_t> dst32Storage; |
+ dst32Storage.setCount(width * height * sizeof(int32_t)); |
+ for (int y = 0; y < height; ++y) { |
+ for (int x = 0; x < width; ++x) { |
+ dst8Storage[y * width + x] = (y + x) / 2; |
+ dst32Storage[y * width + x] = SkPackARGB32(0xFF, x, y, 0); |
+ } |
+ } |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setColor(SK_ColorBLUE); |
+ SkRect r = {0, 0, SkIntToScalar(width), SkIntToScalar(height)}; |
+ canvas->drawRect(r, paint); |
+ SkBitmap skBitmap, skMask; |
+ SkImageInfo imageInfo = SkImageInfo::Make(width, height, |
+ SkColorType::kN32_SkColorType, kPremul_SkAlphaType); |
+ skBitmap.installPixels(imageInfo, dst32Storage.begin(), width * sizeof(int32_t), |
+ nullptr, nullptr, nullptr); |
+ imageInfo = SkImageInfo::Make(width, height, |
+ SkColorType::kAlpha_8_SkColorType, kPremul_SkAlphaType); |
+ skMask.installPixels(imageInfo, dst8Storage.begin(), width, nullptr, nullptr, nullptr); |
+ sk_sp<SkImage> skSrc = SkImage::MakeFromBitmap(skBitmap); |
+ sk_sp<SkShader> skSrcShader = |
+ skSrc->makeShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); |
+ sk_sp<SkImage> skMaskImage = SkImage::MakeFromBitmap(skMask); |
+ sk_sp<SkShader> skMaskShader = skMaskImage->makeShader( |
+ SkShader::kClamp_TileMode, SkShader::kClamp_TileMode); |
+ sk_sp<SkXfermode> dstInMode = SkXfermode::Make(SkXfermode::kSrcIn_Mode); |
+ paint.setShader( |
+ SkShader::MakeComposeShader(skMaskShader, skSrcShader, dstInMode)); |
+ canvas->drawRect(r, paint); |
+} |
+ |
////////////////////////////////////////////////////////////////////////////// |
DEF_GM( return new ComposeShaderGM; ) |