/* * Copyright 2023 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSurfaceMetal_DEFINED #define SkSurfaceMetal_DEFINED #include "include/core/SkRefCnt.h" #include "include/core/SkSurface.h" #include "include/gpu/ganesh/GrTypes.h" #include "include/gpu/ganesh/SkSurfaceGanesh.h" #include "include/gpu/ganesh/mtl/GrMtlTypes.h" namespace SkSurfaces { /** Creates SkSurface from CAMetalLayer. Returned SkSurface takes a reference on the CAMetalLayer. The ref on the layer will be released when the SkSurface is destroyed. Only available when Metal API is enabled. Will grab the current drawable from the layer and use its texture as a backendRT to create a renderable surface. @param context GPU context @param layer GrMTLHandle (expected to be a CAMetalLayer*) @param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing @param colorSpace range of colors; may be nullptr @param surfaceProps LCD striping orientation and setting for device independent fonts; may be nullptr @param drawable Pointer to drawable to be filled in when this surface is instantiated; may not be nullptr @return created SkSurface, or nullptr */ SK_API sk_sp WrapCAMetalLayer(GrRecordingContext* context, GrMTLHandle layer, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp colorSpace, const SkSurfaceProps* surfaceProps, GrMTLHandle* drawable) SK_API_AVAILABLE_CA_METAL_LAYER; /** Creates SkSurface from MTKView. Returned SkSurface takes a reference on the MTKView. The ref on the layer will be released when the SkSurface is destroyed. Only available when Metal API is enabled. Will grab the current drawable from the layer and use its texture as a backendRT to create a renderable surface. @param context GPU context @param layer GrMTLHandle (expected to be a MTKView*) @param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing @param colorSpace range of colors; may be nullptr @param surfaceProps LCD striping orientation and setting for device independent fonts; may be nullptr @return created SkSurface, or nullptr */ SK_API sk_sp WrapMTKView(GrRecordingContext* context, GrMTLHandle mtkView, GrSurfaceOrigin origin, int sampleCnt, SkColorType colorType, sk_sp colorSpace, const SkSurfaceProps* surfaceProps) SK_API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)); } // namespace SkSurfaces #endif