美文网首页
初探Metal

初探Metal

作者: lkm_0bdc | 来源:发表于2020-08-23 01:41 被阅读0次

    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也是可以实现的,我将代码一起上传,大家有兴趣可以下载了解,上面都有详细的备注。

    Github

    相关文章

      网友评论

          本文标题:初探Metal

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