iOS 开发者的 Metal 养成计划「2」 —— 块命令和渲染命令

发布于:2018-01-13 18:12,阅读数:399,点赞数:0


> 本文为小专栏[《Graphics Dance》](https://xiaozhuanlan.com/graphics_dance)特供文章,仅提供预览,欢迎订阅。 # 目录 - 引言 - Metal Command System - Blit Command - Render Command - 小结 # 引言 看了上一篇文章以后相信读者对 Metal 有了一定的了解但是还完全不知道它是怎么用起来的。 那么看完本文以后就会了解绘制操作在 Metal 层是如何工作的。如果要真正使用起来,真正要画出东西,光靠 Metal 层的 API 是不够的,还会涉及到着色器编程的内容。只有整个流程从头到尾都走通以后,才能在屏幕上看到绘制的东西。 本文会介绍四种绘制命令中最常用的两种:块命令和渲染命令。 # Metal Command System Metal 中使用了一套和`Cocos2d-x`的渲染系统非常像的命令系统。 这个命令的思想在 OpenGL 中其实也是存在的,只是没有被单独拎出来做抽象。 Metal 的命令共有四种: - `Blit Command`:块命令,用于在`MTLBuffer`和`MTLTexture`之间拷贝数据。 - `Render Command`:渲染命令,用于绘图。 - `Parallel Render Command`:并行渲染命令。 - `Compute Command`:计算命令,可用于高并发数据处理。 本文会介绍这四种命令中的前两种,也是最常用的两种。 ### Blit Command > Describes how to copy data between textures and buffers. 使用`MTLBlitCommand`可以快速在`MTLBuffer`和`MTLTexture`之间复制内容。 ![](//cdn.blog.yuusann.com/img/corpus/18005_1.png) `MTLBlitCommand`的使用应该是这最简单的一个,使用方法大致为: - 由`MTLCommandQueue`构造`MTLCommandBuffer`命令。 - 由`MTLCommandBuffer`构造`MTLBlitCommandEncoder`编码器。 - 编码器进行复制操作。 - 结束编码。 - 将命令提交并等待执行。 实现为: ```swift // 从队列中构造一个 MTLCommandBuffer guard let commandBuffer = commandQueue.makeCommandBuffer() else { // error } // 构造 MTLBlitCommandEncoder guard let commandEncoder = commandBuffer.makeBlitCommandEncoder() else { // error } ..... ``` --- # 预览结束,查看全文请订阅小专栏[《Graphics Dance》](https://xiaozhuanlan.com/topic/5637029184)


评论:0条


返回列表

返回主页