1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2023 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef SkSurfaceMetal_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define SkSurfaceMetal_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSurface.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrTypes.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/SkSurfaceGanesh.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/mtl/GrMtlTypes.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker namespace SkSurfaces { 18*c8dee2aaSAndroid Build Coastguard Worker /** Creates SkSurface from CAMetalLayer. 19*c8dee2aaSAndroid Build Coastguard Worker Returned SkSurface takes a reference on the CAMetalLayer. The ref on the layer will be 20*c8dee2aaSAndroid Build Coastguard Worker released when the SkSurface is destroyed. 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker Only available when Metal API is enabled. 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker Will grab the current drawable from the layer and use its texture as a backendRT to 25*c8dee2aaSAndroid Build Coastguard Worker create a renderable surface. 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker @param context GPU context 28*c8dee2aaSAndroid Build Coastguard Worker @param layer GrMTLHandle (expected to be a CAMetalLayer*) 29*c8dee2aaSAndroid Build Coastguard Worker @param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing 30*c8dee2aaSAndroid Build Coastguard Worker @param colorSpace range of colors; may be nullptr 31*c8dee2aaSAndroid Build Coastguard Worker @param surfaceProps LCD striping orientation and setting for device independent 32*c8dee2aaSAndroid Build Coastguard Worker fonts; may be nullptr 33*c8dee2aaSAndroid Build Coastguard Worker @param drawable Pointer to drawable to be filled in when this surface is 34*c8dee2aaSAndroid Build Coastguard Worker instantiated; may not be nullptr 35*c8dee2aaSAndroid Build Coastguard Worker @return created SkSurface, or nullptr 36*c8dee2aaSAndroid Build Coastguard Worker */ 37*c8dee2aaSAndroid Build Coastguard Worker SK_API sk_sp<SkSurface> WrapCAMetalLayer(GrRecordingContext* context, 38*c8dee2aaSAndroid Build Coastguard Worker GrMTLHandle layer, 39*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceOrigin origin, 40*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 41*c8dee2aaSAndroid Build Coastguard Worker SkColorType colorType, 42*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> colorSpace, 43*c8dee2aaSAndroid Build Coastguard Worker const SkSurfaceProps* surfaceProps, 44*c8dee2aaSAndroid Build Coastguard Worker GrMTLHandle* drawable) SK_API_AVAILABLE_CA_METAL_LAYER; 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker /** Creates SkSurface from MTKView. 47*c8dee2aaSAndroid Build Coastguard Worker Returned SkSurface takes a reference on the MTKView. The ref on the layer will be 48*c8dee2aaSAndroid Build Coastguard Worker released when the SkSurface is destroyed. 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker Only available when Metal API is enabled. 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker Will grab the current drawable from the layer and use its texture as a backendRT to 53*c8dee2aaSAndroid Build Coastguard Worker create a renderable surface. 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker @param context GPU context 56*c8dee2aaSAndroid Build Coastguard Worker @param layer GrMTLHandle (expected to be a MTKView*) 57*c8dee2aaSAndroid Build Coastguard Worker @param sampleCnt samples per pixel, or 0 to disable full scene anti-aliasing 58*c8dee2aaSAndroid Build Coastguard Worker @param colorSpace range of colors; may be nullptr 59*c8dee2aaSAndroid Build Coastguard Worker @param surfaceProps LCD striping orientation and setting for device independent 60*c8dee2aaSAndroid Build Coastguard Worker fonts; may be nullptr 61*c8dee2aaSAndroid Build Coastguard Worker @return created SkSurface, or nullptr 62*c8dee2aaSAndroid Build Coastguard Worker */ 63*c8dee2aaSAndroid Build Coastguard Worker SK_API sk_sp<SkSurface> WrapMTKView(GrRecordingContext* context, 64*c8dee2aaSAndroid Build Coastguard Worker GrMTLHandle mtkView, 65*c8dee2aaSAndroid Build Coastguard Worker GrSurfaceOrigin origin, 66*c8dee2aaSAndroid Build Coastguard Worker int sampleCnt, 67*c8dee2aaSAndroid Build Coastguard Worker SkColorType colorType, 68*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> colorSpace, 69*c8dee2aaSAndroid Build Coastguard Worker const SkSurfaceProps* surfaceProps) 70*c8dee2aaSAndroid Build Coastguard Worker SK_API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)); 71*c8dee2aaSAndroid Build Coastguard Worker } // namespace SkSurfaces 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker #endif 74