From 372c0c95478cfcd7f03a747ad5b3566f13dbabd1 Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Mon, 19 Aug 2019 11:59:12 -0700 Subject: [PATCH] Update metal layer drawable size on relayout. 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/shell/platform/darwin/ios/framework/Source/FlutterView.mm b/shell/platform/darwin/ios/framework/Source/FlutterView.mm index 0d53b44b70d31..06e73d1538d71 100644 --- a/shell/platform/darwin/ios/framework/Source/FlutterView.mm +++ b/shell/platform/darwin/ios/framework/Source/FlutterView.mm @@ -66,9 +66,15 @@ - (void)layoutSubviews { #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