Metal简介
Metal和OpenGL ES类似的面向底层的图形编程接口,是渲染高级3D图形和执行数据计算使用图形处理器,可以使用相关的API直接操作GPU.
Metal是IOS平台独有的,意味着它不能像OpenGL ES跨平台使用,但是它能最大的挖掘苹果移动设备的GPU能力,进行复杂的运算。
Metal具有特点:
1.渲染复杂3D环境的游戏
2.视频处理应用程序,比如Final Cut Pro
3.数据处理应用程序,比如那些用于进行科学研究的应用程序
图形管道
图形管道结构.png图形管道将顶点通过多个阶段,在此期间顶点的坐标在各个空间之间转换。在本教程的后面,您将同时编写顶点着色器和片段着色器。 对于所有非可编程流水线阶段,例如Vertex Fetch,Primitive Assembly和Rasterization,GPU都有专门设计的硬件单元来为这些阶段提供服务。
MTLDevice | 图形处理器的金属接口,用于绘制图形或进行并行计算 |
---|---|
MTLCommandQueue | 将命令缓冲区组织起来由GPU执行的队列 |
MTLCommandBuffer | 为GPU存储要执行的编码命令的容器 |
MTLCommandEncoder | 将GPU命令写入命令缓冲区的编码器。 |
Metal 命令对象之间的关系
1.命令缓冲区(command buffer)是从命令队列(command queue)创建的
2.命令编码器(command encoders)将命令编码到命令缓冲区中
3.提交命令缓冲区并将其发送到GPU
4.GPU执行命令并将结果呈现为可绘制
Metal 命令对象之间的关系.png
分开你的渲染循环:
在我们开发Metal 程序时,将渲染循环分为自己创建的类,是非常有用的一种方式,使用单独的类,我们可以更好管理初始化Metal,以及Metal视图委托.
在MTKViewDelegate 协议中有2个方法.
- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size;
1.每当窗口大小变化或者重新布局(设备方向更改)时,视图就会调用此方法.
2.视图可以根据视图属性上设置View.preferredFramesPerSecond帧速率(指定时间来调用drawInMTKView方法),
- (void)drawInMTKView:(nonnull MTKView *)view;
以上的方法,每当视图需要渲染时调用
【主要:Metal只能在真机上运行,需要6s或者以上的设备】
接下来,我们先练手一个简单的案例,通过Metal设置背景色
学习目的
1.理解Metal应用程序
2.如何向GPU发送基本的渲染命令
3.如何获取Metal设备
4.如何配置MetalKit视图
5.如何创建并执行GPU指令
6.显示渲染的内容
案例1流程
这是简单的实现效果的案例,没有涉及到Metal文件,
同时Metal的渲染内容单独封装出来,可以在viewController调用,可以降低复杂性。实现过程比较简单理解,demo我将会放到最下方,不明白的地方,可以下载看看。
案例二-绘制三角形
绘制三角形流程图本案例中涉及到Metal文件的加载,同时为了确保oc语言和Metal语言共用资源,而单独创建CCShaderTypes.h文件。
在绘制三角形的时候依然使用到图元装配,之前学习的OpenGL ES的图源装配有9种形式,但是在Metal中只有5种形式
Metal
1.MTLPrimitiveTypePoint |点
2.MTLPrimitiveTypeLine |线段
3.MTLPrimitiveTypeLineStrip |线环
4.MTLPrimitiveTypeTriangle | 三角形
5.MTLPrimitiveTypeTriangleStrip |三角型扇
当然绘制三角形在OpenGL ES A也是可以实现的,我将代码一起上传,大家有兴趣可以下载了解,上面都有详细的备注。
网友评论