美文网首页
MTKView & MTLCommandBuffer

MTKView & MTLCommandBuffer

作者: tp夕阳武士 | 来源:发表于2020-05-25 16:47 被阅读0次
1.库名: MetalKit

MetalKit 基于metal 封装,极少代码可以完成Metal需求;

2. MTKView

MTKView:继承UIView用于展示图形,有一个代理:

@property (nonatomic, weak, nullable) id <MTKViewDelegate> delegate;

Metal中,图形渲染的工作交给MTKView代理来完成.

苹果管官方建议:
渲染工作可以分装在一个独立的文件中完成,例如可以分装一个独立的工具类遵循协议:MTKViewDelegate,把工具类作为MTKView的代理,在工具类中重写MTKViewDelegate的协议方法和关联Metal文件的操作.

3.命令缓冲区:MTLCommandBuffer

Metal中,创建一个类型几乎都是使用id的形式

mtlView.device = MTLCreateSystemDefaultDevice();
//device => id <MTLDevice> device;

id<MTLCommandQueue> _commandQueue = [_device newCommandQueue];
id<MTLCommandBuffer> commandBuffer = [_commandQueue commandBuffer];

//4.从视图绘制中,获得渲染描述符
MTLRenderPassDescriptor *renderPassDescriptor = view.currentRenderPassDescriptor;
    
//5.判断renderPassDescriptor 渲染描述符是否创建成功,否则则跳过任何渲染.
    if(renderPassDescriptor != nil)
    {
        //6.通过渲染描述符renderPassDescriptor创建MTLRenderCommandEncoder 对象
        id<MTLRenderCommandEncoder> renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];
        renderEncoder.label = @"MyRenderEncoder";
        
        //7.我们可以使用MTLRenderCommandEncoder 来绘制对象,但是这个demo我们仅仅创建编码器就可以了,我们并没有让Metal去执行我们绘制的东西,这个时候表示我们的任务已经完成.
        //即可结束MTLRenderCommandEncoder 工作
        [renderEncoder endEncoding];
        
        /*
         当编码器结束之后,命令缓存区就会接受到2个命令.
         1) present
         2) commit
         因为GPU是不会直接绘制到屏幕上,因此你不给出去指令.是不会有任何内容渲染到屏幕上.
        */
        //8.添加一个最后的命令来显示清除的可绘制的屏幕
        [commandBuffer presentDrawable:view.currentDrawable];
    }
    
    //9.在这里完成渲染并将命令缓冲区提交给GPU
    [commandBuffer commit];
image.png

Metal中每一条渲染指令都是通过命令缓冲区来发送到GPU,

相关文章

  • MTKView & MTLCommandBuffer

    1.库名: MetalKit MetalKit 基于metal 封装,极少代码可以完成Metal需求; 2. MT...

  • 渲染代码书写指北之Metal

    渲染代码书写指北之Metal 使用MTKView设置MTKView的deviceMTLCreateSystemDe...

  • Metal 三角形

    一,设置MTKView 将ViewController的view设置为MTKView; 获取默认的 MTLDevi...

  • Metal入门002-Metal相关API

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

  • Metal MTKView入门案例

    在OpenGL中有GLKit,苹果供我们封装好了GLKView使用,笔者在之前的文章 OpenGL ES立方体贴图...

  • Metal 1

    Metal 1 MetalKit MTKView Metal 渲染管道 1.VertexData 通过CPU也就是...

  • Metal - 命令设定- MTLCommandBuffer 缓

    一个容器,用户存储编码的命令 以供GPU执行。 宣言 概述 不要自己实现此协议,而是通过调用MTLCommandQ...

  • 二十五 Metal 颜色的渲染Demo

    主要分为两个模块 viewController:获取MTKView对象,并将渲染交由自定的渲染循环类HTRende...

  • Swift Metal渲染一个球

    首先创建一个设备检测GPU是否支持。 通过设备创建MTKView 通过Model I/O创建一个球模型,并设置数据...

  • Metal 绘制网格

    之前写过入门案例 Metal MTKView入门案例 请参考。 我们先来看下本案例的实现效果图: 首先说明一下该案...

网友评论

      本文标题:MTKView & MTLCommandBuffer

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