14 UIView* overlay_view_wrapper,
15 std::unique_ptr<IOSSurface> ios_surface,
16 std::unique_ptr<Surface> surface)
17 : overlay_view(overlay_view),
18 overlay_view_wrapper(overlay_view_wrapper),
19 ios_surface(std::move(ios_surface)),
20 surface(std::move(surface)){};
26 auto screenScale = ((
FlutterView*)flutter_view).screen.scale;
30 rect.width() / screenScale, rect.height() / screenScale);
33 [NSString stringWithFormat:
@"platform_view[%lld].overlay[%lld]", view_id, overlay_id];
40 [NSString stringWithFormat:
@"platform_view[%lld].overlay_view[%lld]", view_id, overlay_id];
47 std::shared_ptr<OverlayLayer> result;
48 if (available_layer_index_ < layers_.size()) {
49 result = layers_[available_layer_index_];
50 available_layer_index_++;
57 MTLPixelFormat pixel_format,
58 CGFloat screenScale) {
59 FML_DCHECK([[NSThread currentThread] isMainThread]);
60 std::shared_ptr<OverlayLayer> layer;
62 UIView* overlay_view_wrapper;
65 pixelFormat:pixel_format];
67 pixelFormat:pixel_format];
69 CALayer* ca_layer = overlay_view.layer;
71 std::unique_ptr<Surface> surface = ios_surface->CreateGPUSurface();
73 layer = std::make_shared<OverlayLayer>(overlay_view, overlay_view_wrapper, std::move(ios_surface),
89 layer->overlay_view_wrapper.clipsToBounds = YES;
90 [layer->overlay_view_wrapper addSubview:layer->overlay_view];
92 layers_.push_back(layer);
96 available_layer_index_ = 0;
100 std::vector<std::shared_ptr<OverlayLayer>> results;
101 for (
size_t i = available_layer_index_; i < layers_.size(); i++) {
102 results.push_back(layers_[i]);
108 static constexpr
size_t kLeakLayerCount = 1;
109 size_t erase_offset = std::max(available_layer_index_, kLeakLayerCount);
110 if (erase_offset < layers_.size()) {
111 layers_.erase(layers_.begin() + erase_offset, layers_.end());
117 return layers_.size();