Flutter Engine
 
Loading...
Searching...
No Matches
ios_surface_metal_impeller.mm
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
13
15
16namespace flutter {
17
19 const std::shared_ptr<IOSContext>& context)
20 : IOSSurface(context),
22 layer_(layer),
23 impeller_context_(context ? context->GetImpellerContext() : nullptr),
24 aiks_context_(context ? context->GetAiksContext() : nullptr) {
25 if (!impeller_context_ || !aiks_context_) {
26 return;
27 }
28 is_valid_ = true;
29}
30
31// |IOSSurface|
33
34// |IOSSurface|
35bool IOSSurfaceMetalImpeller::IsValid() const {
36 return is_valid_;
37}
38
39// |IOSSurface|
40void IOSSurfaceMetalImpeller::UpdateStorageSizeIfNecessary() {
41 // Nothing to do.
42}
43
44// |IOSSurface|
45std::unique_ptr<Surface> IOSSurfaceMetalImpeller::CreateGPUSurface() {
46 impeller_context_->UpdateOffscreenLayerPixelFormat(
47 impeller::FromMTLPixelFormat(layer_.pixelFormat));
48 return std::make_unique<GPUSurfaceMetalImpeller>(this, //
49 aiks_context_ //
50 );
51}
52
53// |GPUSurfaceMetalDelegate|
54GPUCAMetalLayerHandle IOSSurfaceMetalImpeller::GetCAMetalLayer(const DlISize& frame_info) const {
55 const auto drawable_size = CGSizeMake(frame_info.width, frame_info.height);
56 if (!CGSizeEqualToSize(drawable_size, layer_.drawableSize)) {
57 layer_.drawableSize = drawable_size;
58 }
59
60 // Flutter needs to read from the color attachment in cases where there are effects such as
61 // backdrop filters. Flutter plugins that create platform views may also read from the layer.
62 layer_.framebufferOnly = NO;
63
64 return (__bridge GPUCAMetalLayerHandle)layer_;
65}
66
67// |GPUSurfaceMetalDelegate|
68bool IOSSurfaceMetalImpeller::PresentDrawable(GrMTLHandle drawable) const {
69 FML_DCHECK(false);
70 return false;
71}
72
73// |GPUSurfaceMetalDelegate|
74GPUMTLTextureInfo IOSSurfaceMetalImpeller::GetMTLTexture(const DlISize& frame_info) const {
75 FML_CHECK(false);
76 return GPUMTLTextureInfo{
77 .texture_id = -1, //
78 .texture = nullptr //
79 };
80}
81
82// |GPUSurfaceMetalDelegate|
83bool IOSSurfaceMetalImpeller::PresentTexture(GPUMTLTextureInfo texture) const {
84 FML_CHECK(false);
85 return false;
86}
87
88// |GPUSurfaceMetalDelegate|
89bool IOSSurfaceMetalImpeller::AllowsDrawingWhenGpuDisabled() const {
90 return false;
91}
92
93} // namespace flutter
Interface implemented by all platform surfaces that can present a metal backing store to the "screen"...
IOSSurfaceMetalImpeller(CAMetalLayer *layer, const std::shared_ptr< IOSContext > &context)
#define FML_CHECK(condition)
Definition logging.h:104
#define FML_DCHECK(condition)
Definition logging.h:122
FlTexture * texture
impeller::ISize32 DlISize
constexpr PixelFormat FromMTLPixelFormat(MTLPixelFormat format)
Definition formats_mtl.h:22