mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
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:
parent
bb72862d4e
commit
4a8d1fcafb
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user