7 #include "flutter/impeller/renderer/backend/metal/formats_mtl.h"
8 #include "flutter/impeller/renderer/context.h"
9 #include "flutter/shell/gpu/gpu_surface_metal_impeller.h"
10 #include "impeller/display_list/aiks_context.h"
11 #include "impeller/typographer/backends/skia/typographer_context_skia.h"
12 #include "impeller/typographer/typographer_context.h"
19 const std::shared_ptr<IOSContext>& context)
21 GPUSurfaceMetalDelegate(MTLRenderTargetType::kCAMetalLayer),
23 impeller_context_(context ? context->GetImpellerContext() : nullptr),
24 aiks_context_(context ? context->GetAiksContext() : nullptr) {
25 if (!impeller_context_ || !aiks_context_) {
35 bool IOSSurfaceMetalImpeller::IsValid()
const {
40 void IOSSurfaceMetalImpeller::UpdateStorageSizeIfNecessary() {
45 std::unique_ptr<Surface> IOSSurfaceMetalImpeller::CreateGPUSurface(GrDirectContext*) {
46 impeller_context_->UpdateOffscreenLayerPixelFormat(
47 impeller::FromMTLPixelFormat(layer_.pixelFormat));
48 return std::make_unique<GPUSurfaceMetalImpeller>(
this,
54 GPUCAMetalLayerHandle IOSSurfaceMetalImpeller::GetCAMetalLayer(
const SkISize& 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;
62 layer_.framebufferOnly = NO;
64 return (__bridge GPUCAMetalLayerHandle)layer_;
68 bool IOSSurfaceMetalImpeller::PresentDrawable(GrMTLHandle drawable)
const {
74 GPUMTLTextureInfo IOSSurfaceMetalImpeller::GetMTLTexture(
const SkISize& frame_info)
const {
76 return GPUMTLTextureInfo{
83 bool IOSSurfaceMetalImpeller::PresentTexture(GPUMTLTextureInfo texture)
const {
89 bool IOSSurfaceMetalImpeller::AllowsDrawingWhenGpuDisabled()
const {