Metal 开发教程(一)
原文链接: https://developer.apple.com/documentation/metalkit/mtkview?language=objc
MTKView 用于创建,配置,显示metal对象。MTKView提供了一个MTLRenderPassDescriptor对象,该对象指向一个纹理来渲染内容。MTKView 使用CAMetalLayer来管理drawable对象。MTKView 需要一个MTLDevice对象来管理Metal对象。在绘制之前必须设置device相关属性。
MTKView 提供了3种绘制模式:
- Timed updates: view内容的重绘依赖内部的计时器。此时paused 和 enableSetNeedsDisplay 为NO。该模式用于定期更新的游戏和其他动画内容。
- Draw notifications: 当内容无效时view会进行重绘操作。一般由于调用了setNeedsDisplay方法或其他相关的view行为。paused 和 enableSetNeedsDisplay为YES。该模式用于传统的工作流程序,当数据更改时会进行更新。
- Explicit drawing: 当显式调用draw方法时view会进行重绘操作。paused=YES, enableSetNeedsDisplay=NO。该模式用于创建自定义的工作流程。
无论哪种绘图模式,当view需要更新内容时会调用子类的drawRect:方法或者delegate的drawInMTKView:方法。你需要实现MTKView的子类或提供delegate,无需2种都提供。在你的绘制方法中你可以根据view的descriptor获取rander进行绘制。
每个MTKView都有一个CAMetalLayer;通过实现MTKViewDelegate 来和MTKView的交互。调用MTKView的属性currentRenderPassDescriptor配置render.
MTLRenderPassDescriptor* onscreenDescriptor = view.currentRenderPassDescriptor;
读取此属性时,Core Animation隐式获取当前帧的drawable并将其存储在currentDrawable属性中,配置要绘制的render包括必要的 depth, stencil 和 antialiasing textures。你可以在创建MTLRenderCommandEncoder之前调整descriptor功能。建议尽可能晚的获取drawable,最好在渲染之前立即获取。
当内容渲染完成后,您必须呈现drawable以更新view的内容。呈现内容最方便的方法是在命令缓冲区上调用presentDrawable:方法,然后调用commit方法将命令提交给GPU。
// If there's a valid render pass descriptor, use it to render to the current drawable.
if(onscreenDescriptor != nil) {
id<MTLRenderCommandEncoder> onscreenCommandEncoder = [onscreenCommandBuffer renderCommandEncoderWithDescriptor:onscreenDescriptor];
/* Set render state and resources.
...
*/
/* Issue draw calls.
...
*/
[onscreenCommandEncoder endEncoding];
// END encoding your onscreen render pass.
// Register the drawable's presentation.
[onscreenCommandBuffer presentDrawable:view.currentDrawable];
}
// Finalize your onscreen CPU work and commit the command buffer to a GPU.
[onscreenCommandBuffer commit];
当命令队列计划执行命令缓冲区时,drawable将跟踪该命令缓冲区中自身的所有呈现或写入请求。在命令完成执行之前,操作系统不会在屏幕上显示drawable。通过请求命令缓冲区显示drawable,可以确保在命令队列调度了此命令缓冲区之后显示。在注册drawable的之前,无需等待命令缓冲区完成执行。
为了追求更好的性能,当你准备好要渲染内容的时候来获取render的descriptor,并且尽可能减少控制drawable对象。命令一旦完成应立即释放drawable。
Metal 开发教程(一)的更多相关文章
- ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
前言: 抓紧勤奋,再接再励,预计共10篇来结束这个系列. 上一篇介绍:ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑 本篇介绍主键操作区相关内容. 1:什么时候有默认的 ...
- ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑
前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...
- ASP.NET Aries 入门开发教程4:查询区的下拉配置
背景: 今天去深圳溜达了一天,刚回来,看到首页都是微软大法好,看来离.NET的春天就差3个月了~~ 回到正题,这篇的教程讲解下拉配置. 查询区的下拉配置: 1:查询框怎么配置成下拉? 在配置表头:格式 ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十八):Web代理功能
在Senparc.Weixin.dll v4.5.7版本开始,我们提供了Web代理功能,以方便在受限制的局域网内的应用可以顺利调用接口. 有关的修改都在Senparc.Weixin/Utilities ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(十七):个性化菜单接口说明
前不久微信上线了个性化菜单接口,Senparc.Weixin SDK也已经同步更新. 本次更新升级Senparc.Weixin.MP版本到v13.5.2,依赖Senparc.Weixin版本4.5.4 ...
- 微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引
Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到比较稳定的版本,这个过程中我觉得有必要整理一些思路和经验,和大家一起分享. ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证
要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(四):Hello World
============= 以下写于2013-07-20 ============= 这一篇文章其实可以写在很前面,不过我还是希望开发者们尽多地了解清楚原理之后再下手. 通过上一篇Senparc.W ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK
Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...
随机推荐
- NET Core 多身份校验与策略模式
背景需求: 系统需要对接到XXX官方的API,但因此官方对接以及管理都十分严格.而本人部门的系统中包含诸多子系统,系统间为了稳定,程序间多数固定Token+特殊验证进行调用,且后期还要提供给其他兄 ...
- 浅谈下javascript的proxy和reflect
近日喜欢上了uniapp和vue,但看到相关程序代码中频繁出现了proxy和reflect的使用,于是进行了一番学习,现总结如下. Proxy和Reflect是ES6(ECMAScript 2015) ...
- 【工具分享】红队重点资产指纹识别 -- P1finger -0.02(最新版本)
工具介绍: P1finger 红队行动下的重点资产指纹识别工具.P1finger 是一个重点资产指纹识别的工具,旨在通过HTTP请求特征来识别目标系统.其主要特点包括: 语言和实现: 语言:使用Go语 ...
- windows server 2008 和 win10 双系统安装 ,bios引导 uefi引导总结(可能只适应于我的品牌的笔记本电脑,仅做记录给自己方便下次装系统)
之前电脑是装好了这两个系统并且正常开机的,bios引导的,也就是开机的时候出现黑框框,上下两个系统选项的那种. 后来在windows server2008里面不小心把win10的盘符给删了一些文件.. ...
- AI构建新质生产力,合合信息Embedding模型助力专业知识应用
一.合合信息acge模型获MTEB中文榜单第一 现阶段,大语言模型的飞速发展吸引着社会各界的目光,背后支撑大型语言模型应用落地的Embedding模型也成为业内关注的焦点.近期,合合信息发布了文本 ...
- SQL Server – 我常用语句
前言 旧没用又忘记了, 又没有 intellisense, 记入这里吧. Reset Auto Increment DBCC CHECKIDENT ('TableName'); -- check cu ...
- mongodb 中rs.stauts()命令参数解析
转载请注明出处: rs.status()命令用于获取MongoDB副本集的状态信息.它提供了关于副本集中各个节点的详细信息,包括节点的健康状况.角色.选举状态等. 以下是查看一个mongo集群状态返回 ...
- 浅谈舞蹈链(DLX)
名字: \(DL\),\(Dancing\space Link\),舞蹈链,是由\(Donald\space Knuth\)提出的数据结构,用来优化 \(X\) 算法,所以叫\(DLX\) \(X\) ...
- namenode rpc 请求队列调优
当 datanode 上新写完一个块,默认会立即汇报给 namenode.在一个大规模 Hadoop 集群上,每时每刻都在写数据,datanode 上随时都会有写完数据块然后汇报给 namenode ...
- 音视频入门-2-ffmpeg-Linux下编译浅析,推流拉流快速体验
下载ffmpeg http://ffmpeg.org/download.html 1 .2 两种方式可以下载, 皆可. 编译ffmpeg ./configure -prefix=/usr/loca ...