美文网首页
初识Metal

初识Metal

作者: _涼城 | 来源:发表于2020-08-22 10:13 被阅读0次
Metal

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

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

Metal的特性
Metal特性.png
  • cpu低开销
  • Metal可以在苹果系统下发挥GPU最大的性能
  • 最大限度发挥 CPU/GPU 的并发性(硬件加速器)
  • 有效的资源管理
图形管线(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的使用建议
  • Separate Your Rendering Loop 分开渲染循环:不希望将渲染的处理放到VC中,希望将渲染循环封装在一个单独的类中
  • Respond to View Events 响应视图的事件,即MTKViewDelegate协议,也需要放在自定义的渲染循环中
  • Metal Command Objects 创建一个命令对象,即创建执行命令的GPU、与GPU交互的MTLCommandQueue对象以及MTCommandBuffer渲染缓存区。
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
  • 编码绘制指令的MTLRenderCommandEncoderMTLRenderCommandEncoder在创建的时候,会隐式的调用一次clear的命令。

    获取MTLRenderCommandEncoder

    - (nullable id <MTLRenderCommandEncoder>)renderCommandEncoderWithDescriptor:(MTLRenderPassDescriptor *)renderPassDescriptor;
    

    结束编码

    - (void)endEncoding;
    

    添加绘制

    - (void)presentDrawable:(id <MTLDrawable>)drawable;
    

    提交

    - (void)commit;
    
  • 编码计算指令的MTLComputeCommandEncoder

  • 编码缓存纹理拷贝指令的MTLBlitCommandEncoder

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;

相关文章

  • Metal -- 初识Metal

    Metal 在 WWDC 2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 3D ...

  • Metal初识

    Metal Metal 是一个和 OpenGL ES 类似的面向底层的图形编程接口,通过使用相关的 api 可以直...

  • 初识Metal

    Metal Metal 是一个和 OpenGL ES类似的面向底层的图形编程接口,可以直接操作GPU;并在iOS,...

  • Metal入门002-Metal相关API

    Metal入门001-初识Metal 1. MTKView MTKView官方文档 在MetalKit中提供了一个...

  • Metal-01-初识Metal

    一、Metal简介 1、Metal 早在2014年的WWDC大会上,Apple为游戏开发者推出了新的平台技术 Me...

  • Metal入门003-案例:渲染背景色

    Metal入门001-初识MetalMetal入门002-Metal相关API 本文通过渲染背景色这个小案例,展现...

  • iOS Metal初识

    一.Metal 简介 在WWDC2014 上,Apple为游戏开发者推出了新的平台技术 Metal,该技术能够为 ...

  • Metal入门001-初识Metal

    前言 Metal是苹果在2018年推出用于取代在苹果端的业务的图形编程接口,在2018年之前使用的是基于OpenG...

  • 02-iOS 平台下 Metal 框架

    什么是Metal?Metal 与 OpenGL ES 区别?CPU/GPU 迭代 Metal 的表现 Metal ...

  • 四:Metal示例

    Metal示例demo Metal加载多顶点文件 主要代码: Metal加载多tga文件 主要代码: Metal加...

网友评论

      本文标题:初识Metal

      本文链接:https://www.haomeiwen.com/subject/pbamjktx.html