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

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:

绘制视图的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值