MetalKit_1

一、什么是Metal,它到底是干什么的?

MetalKit官方文档:

Build Metal apps quicker and easier, using far less code. Render graphics in a standard Metal view, load textures from many sources, and work efficiently with models provided by Model I/O.

创建的Metalapp能够更快并且简单,代码量也会更少。在一个标准的MetalView下渲染几何图形。而且加载的资源和工作效率会更高。

在iOS里面,有个专门的Metal File文件进行渲染操作而且是C++编写的,很想openGL。因为直接是和GPU进行交互,所以工作效率会更快。

二、下面是对官方文档的解读。

View Management:MTKView

A specialized view that creates, configures, and displays Metal objects.

一个特殊的视图,用来创建、配置和描绘Metal 对象。

MTKView绘制需要获取一下三个:

  • device,也就是GPU
  • 命令的队列 ,也就是我们的编辑的代码,因为是直接和GPU打交道,所以需要命令的队列
  • Render。渲染 

举例:

目标:我们需要画一个红色的三角形。

操作

  1. 获取GPU。
  2. 设置顶点的坐标(命令,并且加入队列)。
  3. 渲染三角形的颜色

大概是这样的一个过程。

 

转载于:https://www.cnblogs.com/yuhui-snail/p/8550142.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SwiftUI是苹果公司推出的一款全新的UI框架,可以用于开发iOS、iPadOS、macOS、watchOS等操作系统上的应用程序。在SwiftUI中,开发者可以使用简单易懂的语法和组件来构建应用程序的UI界面,同时也可以方便地实现各种交互效果和动画效果。 对于视频播放器的开发,SwiftUI也提供了相关的组件和API,可以轻松实现视频的播放和控制。同时,SwiftUI也提供了对核心图像的实时处理支持,开发者可以使用Metal等技术对视频图像进行实时处理,实现各种特效和滤镜效果。 在SwiftUI中,实现视频播放器可以使用`AVPlayer`和`AVPlayerLayer`等组件,同时也可以使用`VideoPlayer`组件快速构建一个基本的视频播放器。对于实时处理核心图像,可以使用`MTKView`组件和`MetalPerformanceShaders`框架来实现。 下面是一个示例代码,演示如何使用SwiftUI实现一个简单的视频播放器,并对视频进行实时处理: ```swift import SwiftUI import AVKit import MetalKit import MetalPerformanceShaders struct VideoPlayerView: UIViewRepresentable { let player: AVPlayer let filter: MPSImageGaussianBlur func makeUIView(context: Context) -> some UIView { let playerLayer = AVPlayerLayer(player: player) playerLayer.videoGravity = .resizeAspectFill playerLayer.frame = UIScreen.main.bounds let metalView = MTKView(frame: UIScreen.main.bounds) metalView.device = MTLCreateSystemDefaultDevice() metalView.colorPixelFormat = .bgra8Unorm let commandQueue = metalView.device?.makeCommandQueue() let textureDescriptor = MTLTextureDescriptor.texture2DDescriptor( pixelFormat: .bgra8Unorm, width: Int(metalView.frame.width), height: Int(metalView.frame.height), mipmapped: false) let texture = metalView.device?.makeTexture(descriptor: textureDescriptor) filter.encode(commandBuffer: commandQueue!.makeCommandBuffer()!, sourceTexture: texture!, destinationTexture: texture!) metalView.texture = texture let stackView = UIStackView(frame: UIScreen.main.bounds) stackView.axis = .vertical stackView.distribution = .fillEqually stackView.addArrangedSubview(playerLayer) stackView.addArrangedSubview(metalView) return stackView } func updateUIView(_ uiView: UIViewType, context: Context) { } } struct ContentView: View { let player: AVPlayer var body: some View { VideoPlayerView(player: player, filter: MPSImageGaussianBlur(device: MTLCreateSystemDefaultDevice()!, sigma: 10.0)) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView(player: AVPlayer(url: URL(string: "https://example.com/video.mp4")!)) } } ``` 在上面的示例代码中,`VideoPlayerView`是一个UIViewRepresentable,用于将AVPlayer和实时处理的MetalView结合起来。在`makeUIView`方法中,首先创建一个AVPlayerLayer和一个MTKView,并将它们添加到一个UIStackView中。然后,创建一个MPSImageGaussianBlur实例,并使用MetalPerformanceShaders框架对视频图像进行高斯模糊处理,最后将处理结果渲染到MTKView中。 在`ContentView`中,创建AVPlayer实例并将其传递给VideoPlayerView。通过这种方式,可以轻松实现一个支持实时处理核心图像的视频播放器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值