1cb93a386Sopenharmony_ci// Copyright 2019 Google LLC. 2cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. 3cb93a386Sopenharmony_ci 4cb93a386Sopenharmony_ci#include "tools/skottie_ios_app/SkMetalViewBridge.h" 5cb93a386Sopenharmony_ci 6cb93a386Sopenharmony_ci#include "include/core/SkSurface.h" 7cb93a386Sopenharmony_ci#include "include/gpu/GrBackendSurface.h" 8cb93a386Sopenharmony_ci#include "include/gpu/GrContextOptions.h" 9cb93a386Sopenharmony_ci#include "include/gpu/GrDirectContext.h" 10cb93a386Sopenharmony_ci#include "include/gpu/mtl/GrMtlTypes.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#import <Metal/Metal.h> 13cb93a386Sopenharmony_ci#import <MetalKit/MetalKit.h> 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_cisk_sp<SkSurface> SkMtkViewToSurface(MTKView* mtkView, GrRecordingContext* rContext) { 16cb93a386Sopenharmony_ci if (!rContext || 17cb93a386Sopenharmony_ci MTLPixelFormatDepth32Float_Stencil8 != [mtkView depthStencilPixelFormat] || 18cb93a386Sopenharmony_ci MTLPixelFormatBGRA8Unorm != [mtkView colorPixelFormat]) { 19cb93a386Sopenharmony_ci return nullptr; 20cb93a386Sopenharmony_ci } 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci const SkColorType colorType = kBGRA_8888_SkColorType; // MTLPixelFormatBGRA8Unorm 23cb93a386Sopenharmony_ci sk_sp<SkColorSpace> colorSpace = nullptr; // MTLPixelFormatBGRA8Unorm 24cb93a386Sopenharmony_ci const GrSurfaceOrigin origin = kTopLeft_GrSurfaceOrigin; 25cb93a386Sopenharmony_ci const SkSurfaceProps surfaceProps; 26cb93a386Sopenharmony_ci int sampleCount = (int)[mtkView sampleCount]; 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci return SkSurface::MakeFromMTKView(rContext, (__bridge GrMTLHandle)mtkView, origin, sampleCount, 29cb93a386Sopenharmony_ci colorType, colorSpace, &surfaceProps); 30cb93a386Sopenharmony_ci} 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ciGrContextHolder SkMetalDeviceToGrContext(id<MTLDevice> device, id<MTLCommandQueue> queue) { 33cb93a386Sopenharmony_ci GrContextOptions grContextOptions; // set different options here. 34cb93a386Sopenharmony_ci return GrContextHolder(GrDirectContext::MakeMetal((__bridge void*)device, 35cb93a386Sopenharmony_ci (__bridge void*)queue, 36cb93a386Sopenharmony_ci grContextOptions).release()); 37cb93a386Sopenharmony_ci} 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_civoid SkMtkViewConfigForSkia(MTKView* mtkView) { 40cb93a386Sopenharmony_ci [mtkView setDepthStencilPixelFormat:MTLPixelFormatDepth32Float_Stencil8]; 41cb93a386Sopenharmony_ci [mtkView setColorPixelFormat:MTLPixelFormatBGRA8Unorm]; 42cb93a386Sopenharmony_ci [mtkView setSampleCount:1]; 43cb93a386Sopenharmony_ci} 44