Convert lazy SkImages to raster images when extracting pixel data (flutter/engine#5713)

Fixes https://github.com/flutter/flutter/issues/19214
This commit is contained in:
Jason Simmons 2018-07-11 12:33:36 -07:00 committed by GitHub
parent bb72862d4e
commit 4a8d1fcafb

View File

@ -57,12 +57,23 @@ void InvokeDataCallback(std::unique_ptr<DartPersistentValue> callback,
sk_sp<SkImage> ConvertToRasterImageIfNecessary(sk_sp<SkImage> image,
GrContext* context) {
if (context == nullptr) {
// The context was null (software rendering contexts) so the image is likely
// already a raster image. Nothing more to do.
SkPixmap pixmap;
if (image->peekPixels(&pixmap)) {
// This is already a raster image.
return image;
}
if (sk_sp<SkImage> raster_image = image->makeRasterImage()) {
// The image can be converted to a raster image.
return raster_image;
}
// Cross-context images do not support makeRasterImage. Convert these images
// by drawing them into a surface.
if (context == nullptr) {
return nullptr;
}
TRACE_EVENT0("flutter", __FUNCTION__);
// Create a GPU surface with the context and then do a device to host copy of