初识Metal

2020-08-22  本文已影响0人  _涼城
Metal

  Metal 是一个和 OpenGL ES类似的面向底层的图形编程接口,可以直接操作GPU;并在iOS,macOS和tvOS上提供图形渲染和通用计算能力;

Metal不支持模拟器,仅支持真机,切仅支持A7处理器之上的设备。

Metal的特性
Metal特性.png
图形管线(Graphics pipeline)

 Metal把输入、处理、输出的管道看成是对指定数据的渲染指令,比如输入顶点数据,输出渲染后纹理。
 MTLRenderPipelineState 表示渲染管道,最主要的三个过程:顶点处理、光栅化、片元处理。

常见得渲染管线.png
Metal命令对象(Metal Command Objects)
Cmd-Model.png
  1. 命令缓存区command buffer是从命令队列(command queue) 创建的
  2. 命令编码器(command encoders) 将命令编码到命令缓冲区
  3. 提交命令缓存区将其发送到GPU
  4. GPU执行命令将结果呈现为可绘制
Cmd-Object-Relation.png
Metal的使用建议
MTLDevice

MTLDevice是一个协议,用于表示GPU,通常使用MTLCreateSystemDefaultDevice获取默认的GPU。

一个遵循MTLDevice协议的对象,

MTLCreateSystemDefaultDevice();
MTLCommandQueue

 所有应用程序需要与GPU交互的第一个对象,通常使用MTLDevice创建

 使用MTLCommandQueue 去创建对象,并且加入MTLCommandBuffer对象中.确保它们能够按照正确顺序发送到GPU.对于每一帧,一个新的MTLCommandBuffer 对象创建并且填满了由GPU执行的命令.

- (id<MTLCommandQueue>)newCommandQueue;
MTLCommandBuffer

  MTLCommandBuffer会提供一些encoder,对于一个commandBuffer,只有调用encoder的结束操作,才能进行下一个encoder的创建,同时可以设置执行完指令的回调。在MTLCommandEncoder把指令进行封装后,MTLCommandBuffer再做聚合到一次提交里。

- (nullable id <MTLCommandBuffer>)commandBuffer;
MTLCommandEncoder
MTLRenderPassDescriptor

 MTLRenderPassDescriptor 是一个轻量级的临时对象,里面存放较多属性配置,供MTLCommandBuffer创建MTLRenderCommandEncoder对象用,一般通过MTKView获取,并且在每帧刷新时都会提供新的MTLRenderPassDescriptor

@property (nonatomic, readonly, nullable) MTLRenderPassDescriptor *currentRenderPassDescriptor;
MetalKit
MTKView

MTKView用于处理metal绘制并显示到屏幕过程,默认MTKView会通过Draw loop一直刷新屏幕显示,如果设置paused为true,它就会暂停。

MTKViewDelegate

视口调整回调重绘

- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size;

绘制视图内容

- (void)drawInMTKView:(MTKView *)view;
上一篇 下一篇

猜你喜欢

热点阅读