image_from_yuv_textures GM recreates YUVA image before each draw.
Otherwise if any draw flattens the image all subsequent draws of
the image use the flattened texture.
Change-Id: Id1aa58e33f2ec5a13cf1ff75d15f6137aafd556e
Bug: skia:9570
Change-Id: I3a45c4e2b9fead3a5a2500bf5f738ab5d1fbfc17
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/281336
Commit-Queue: Brian Salomon <bsalomon@google.com>
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp
index 65fed5c..77f4220 100644
--- a/gm/imagefromyuvtextures.cpp
+++ b/gm/imagefromyuvtextures.cpp
@@ -169,12 +169,17 @@
{3, SkColorChannel::kR},
};
this->createYUVTextures(fYUVABmps, context, yuvaTextures);
- auto image1 = SkImage::MakeFromYUVATextures(context,
- kJPEG_SkYUVColorSpace,
- yuvaTextures,
- kIndices,
- fRGBABmp.dimensions(),
- kTopLeft_GrSurfaceOrigin);
+
+ // We remake this image before each draw because if any draw flattens it to RGBA then
+ // all subsequent draws use the RGBA texture.
+ auto makeImage1 = [&]() {
+ return SkImage::MakeFromYUVATextures(context,
+ kJPEG_SkYUVColorSpace,
+ yuvaTextures,
+ kIndices,
+ fRGBABmp.dimensions(),
+ kTopLeft_GrSurfaceOrigin);
+ };
GrBackendTexture resultTexture;
this->createResultTexture(context, fRGBABmp.dimensions(), &resultTexture);
@@ -233,7 +238,7 @@
kMedium_SkFilterQuality, kHigh_SkFilterQuality}) {
canvas->save();
canvas->scale(scale, scale);
- auto s1 = draw(image1.get(), fq);
+ auto s1 = draw(makeImage1().get(), fq);
canvas->restore();
canvas->translate(kPad + SkScalarCeilToScalar(scale*s1.width()), 0);
canvas->save();