1. MTKView

在MetalKit中提供了一个视图类MTKView,类似于GLKit中GLKView,它是NSView(macOS中的视图类)或者UIView(iOS、tvOS中的视图类)的子类。用于处理metal绘制并显示到屏幕过程中的细节

MTKView *_mtkView = [[MTKView alloc] init];

2. MTLDevice

Metal是操作GPU的,所以需要获取GPU使用权限,即拿到GPU对象,Metal中提供了MTLDevice协议表示GPU接口,在iOS中一般是通过默认的方式获取GPU

注:运行Metal必须是真机且6s以上机型(A7以上)

_mtkView.device = MTLCreateSystemDefaultDevice();

//判断是否设置成功,因为后面有很多地方需要用到device,如果不成功就没什么意义了

if (!view.device)

{

NSLog(@"Metal is not supported on this device");

return;

}

3. MTLCommandQueue

MTLDevice创建成功,在获取了GPU之后,还需要一个渲染队列MTLCommandQueue,这个队列是与GPU交互的第一个对象,队列MTLCommandQueue中存储的是将要进行渲染的命令MTLCommandBuffer。

每个命令队列的生命周期很长,因此commandQueue可以重复使用,而不是频繁创建和销毁

//创建命令队列

_commandQueue = [_device newCommandQueue];

4. MTLCommandBuffer

命令缓冲区主要是用于存储编码的命令,其生命周期是直到缓冲区被提交到GPU执行为止,单个的命令缓冲区可以包含不同的编码命令,主要取决于用于构建它的编码器的类型和数量

//为当前渲染的每个渲染传递创建一个新的命令缓冲区

id commandBuffer = [_commandQueue commandBuffer];

//指定缓冲区名称

commandBuffer.label = @"myCommandBuffer";

MTLCommandBuffer对象的提交,是提交到MTLCommandQueue对象中的。只有在提交后开始执行,通过入队顺序执行。有两种执行方式:

enqueue : 顺序执行

commit : 插队尽快执行,如果前面有commit还是需要排队等着

5. MTLRenderCommandEncoder

命令编码器表示单个渲染过程中相关联的渲染状态和渲染命令,有以下功能:

指定图形资源,例如缓存区和纹理对象,其中包含顶点、片元、纹理图片数据

指定一个MTLRenderPipelineState对象,表示编译的渲染状态,包含顶点着色器和片元着色器的编译&链接情况

指定固定功能,包括视口、三角形填充模式、剪刀矩形、深度、模板测试以及其他值

绘制3D图元

MTLRenderCommandEncoder的创建,需要渲染描述符MTLRenderPassDescriptor

//1.从视图绘制中,获得渲染描述符

MTLRenderPassDescriptor *renderPassDescriptor = view.currentRenderPassDescriptor;

//2.判断renderPassDescriptor 渲染描述符是否创建成功,否则则跳过任何渲染.

if (renderPassDescriptor != nil)

{

//3.创建MTLRenderCommandEncoder 对象

id renderEncoder = [commandBuffer renderCommandEncoderWithDescriptor:renderPassDescriptor];

//4.给Encoder命名

renderEncoder.label = @"MyRenderEncoder";

//5.Metal文件的绘制操作

//...

//6.结束工作

[renderEncoder endEncoding];

}

6. MTKViewDelegate

响应MetalKit视图的绘图和调整大小事件的方法。

更改视图的布局: mtkView:drawableSizeWillChange:

收到布局,分辨率或大小的更改后,更新视图的内容。

绘制视图的内容:drawInMTKView:

绘制视图的内容。

android metal api,Metal入门002-Metal相关API相关推荐

  1. QLExpress 系列入门教程-07-QLExpress 相关 API 简介

    目录 目录 功能扩展API列表 function 相关 API Operator 相关 API 宏定义相关 API java class 的相关 API 语法树解析变量.函数的 API 语法解析校验 ...

  2. JDBC入门案例及相关API概述

    1 JDBC概念 问题:JDBC的本质是什么,解决了什么问题? 2.API讲解 <1> DriverManager的作用 问题:DriverManager有什么作用? 作用一:注册驱动 D ...

  3. 2D高德Android地图SDK 新手入门的com.amap.api.maps.MapView的坑

    昨天搞了一晚上,想把2D的高德地图加到自己的APP中.按着入门教程,搞了好久,代码都是从教程里面拷过来的,结果却运行不了,说是找不到com.amap.api.maps.MapView,在程序加载lay ...

  4. java基础----数据结构与算法----Java API:集合 以及 排序相关API

    概述: 基本数据结构与算法在jdk中都有相应的API 数组+java.util.Arrays java中的集合类 Collection-->List+Set-->接口的实现类 Map   ...

  5. Keras functional API快速入门

    2019独角兽企业重金招聘Python工程师标准>>> Keras functional API快速入门 The Keras functional API is the way to ...

  6. qq位置如何用启动百度地图定位服务器,腾讯位置服务API快速入门

    前言 之前项目有个需求,在网页上显示微信发送过来的位置信息,该开始想用百度地图,后来发现腾讯地图相对简单一点 快速入门 申请Key 引入js 把###替换成你申请的key 定义容器 设置好宽高度 设置 ...

  7. Mybatis-快速入门及相关API

    什么是框架? 什么是ORM? 什么是Mybatis? 原始JDBC操作的分析 原始 JDBC 的操作问题解决方案 Mybatis的概述 Mybatis的快速入门Demo MyBatis开发步骤 详细步 ...

  8. Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API

    Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API PackageManager中提供的武器,可以用"既多又杂,版本变化大"来形容. 不过,我们通过分 ...

  9. Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API

    Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API 这一节我们将学习: 如何查询系统中安装了哪些应用 如何获取一个包的信息 如何获取一个Application的信息 ...

  10. Android 音视频开发入门指南

    最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...

最新文章

  1. Windows 2000 SP4 Server 找不到网络名
  2. BroadcastReceiver的思考(3)
  3. HDOJ1269(迷宫城堡)
  4. CRC24循环冗余校验码的FPGA实现
  5. sklear多项式回归
  6. qt窗口关闭退出程序_Qt5 窗口关闭信号的响应~
  7. 22 MM配置-采购-采购信息记录-定义编码范围
  8. PyTorch 1.0 中文文档:Tensor(张量)的属性
  9. 得天独厚的生态优势_抚仙湖畔崛起一座生态城 全国党媒聚焦澄江生态文明建设...
  10. idea自动生成unit test插件
  11. php正则验证邮箱、手机号、姓名、身份证、特殊符号等
  12. 【保证能用】Ubuntu创建一个正常权限的用户
  13. Python语言程序设计(嵩天老师版)第二周代码解析
  14. 四川大学计算机学院研究生推免细则,四川大学计算机学院2012届硕士研究生推荐免试实施细则...
  15. You're currently running Fcitx with GUI 错误解决 Fcitx
  16. paypal如何支付欧元_涨姿势!Paypal怎么用?
  17. Python三维绘图——Matplotlib
  18. 如何使用计算机中的导出,微信里的文件导入电脑(如何用数据线导出微信文件)...
  19. 微信小程序云开发如何实现读取和下载excel文件导入数据到云数据库中?简单好理解
  20. mysql集群 solr_Solr单机部署和集群部署

热门文章

  1. 北京外企 外服控股:人服国企借道资产重组上市,发 力数字化谋新篇
  2. 优麒麟linux共享文件夹,循序而渐进,熟读而精思——优麒麟文件管理器篇
  3. 盈透api python封装_盈透证券 简单API 实战
  4. 【C语言】用递归编写程序计算Hermite Polynomials(厄密多项式)
  5. Explaining away
  6. Java经典300例-基础篇-001:Hello Kitty
  7. 令人惊叹的、不起眼的硅片
  8. 计算机python指什么_系统学习python-1.1什么是计算机
  9. 如何爬虫同花顺概念数据?pyppeteer
  10. GPS导航仪价格到底还要降多少?