From ea84fb80da347a990d4c354a7c2dc8bc71af0724 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Mon, 19 Aug 2019 13:01:11 -0700 Subject: [PATCH] Update metal layer drawable size on relayout. (flutter/engine#11224) This makes it so that the texture obtained by the next frame has the same dimensions as the frame being renderered. Fixes https://github.com/flutter/flutter/issues/38754 --- .../darwin/ios/framework/Source/FlutterView.mm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm index 0d53b44b70d..06e73d1538d 100644 --- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm +++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterView.mm @@ -66,9 +66,15 @@ id _delegate; #if FLUTTER_SHELL_ENABLE_METAL if ([self.layer isKindOfClass:[CAMetalLayer class]]) { - CGFloat screenScale = [UIScreen mainScreen].scale; - self.layer.contentsScale = screenScale; - self.layer.rasterizationScale = screenScale; + const CGFloat screenScale = [UIScreen mainScreen].scale; + + auto metal_layer = reinterpret_cast(self.layer); + metal_layer.contentsScale = screenScale; + metal_layer.rasterizationScale = screenScale; + + const auto layer_size = self.bounds.size; + metal_layer.drawableSize = + CGSizeMake(layer_size.width * screenScale, layer_size.height * screenScale); } #endif // FLUTTER_SHELL_ENABLE_METAL