Metal 总体介绍

话题

必需品

基本任务和概念

通过一系列示例代码项目熟悉Metal。

将开放式GL代码迁移到金属

用Metal替换应用程序已弃用的OpenGL代码。

将您的金属代码移植到Apple Silicon

创建可以在Apple芯片和基于Intel的Mac计算机上运行的Metal应用程序的版本。

GPU

在运行时访问GPU设备。GPU构成了Metal开发的基础。

获取默认GPU

选择要在其上运行金属代码的系统的默认GPU设备。

Mac OS中的GPU选择

考虑到GPU的功能,功率或性能特征,选择一个或多个在其上运行您的Metal代码的GPU。

protocol MTLDevice

用于绘制图形或进行并行计算的GPU的Metal接口。

GPU功能

查找特定GPU系列的功能信息。

命令设定

设置基础架构以在GPU上执行您的自定义代码。

设置命令结构

探索Metal如何在GPU上执行命令。

准备您的Metal应用以在后台运行

通过暂停将来使用GPU并确保计划先前的工作,使您的应用准备好进入后台。

protocol MTLCommandQueue

用于组织命令缓冲区以供GPU执行的队列。

protocol MTLCommandBuffer

一个容器,用于存储编码的命令以供GPU执行。

protocol MTLCommandEncoder

将GPU命令写入命令缓冲区的编码器。

反采样

通过测量应用程序中的GPU统计信息来提高性能。

并行计算

在GPU上并行处理任意计算

在计算函数中处理纹理

通过将数据置于纹理中,对结构化数据执行并行计算。

创建线程和线程组

了解Metal如何组织计算处理工作负载。

计算线程组和网格大小

分派计算处理工作负荷时,计算线程组和网格的最佳大小。

class MTLComputePipelineDescriptor

一个用于自定义如何编译新的计算管道状态对象的对象。

protocol MTLComputePipelineState

包含已编译的计算管道的对象。

class MTLComputePassDescriptor

计算过程的配置,用于创建计算命令编码器。

protocol MTLComputeCommandEncoder

用于对计算过程中的命令进行编码的对象。

光线跟踪

使用金属加速光线追踪

使用基于GPU的并行处理实现光线跟踪渲染。

protocol MTLAccelerationStructure

模型数据的集合,组织起来以允许GPU加速光线与模型的相交。

class MTLAccelerationStructureDescriptor

定义新加速结构配置的类的基类。

class MTLAccelerationStructureGeometryDescriptor

描述符的基类,该描述符包含要转换为光线跟踪加速结构的几何数据。

class MTLAccelerationStructureBoundingBoxGeometryDescriptor

对要变成加速结构的边界框列表的描述。

class MTLAccelerationStructureTriangleGeometryDescriptor

对要转化为加速结构的三角形图元列表的描述。

class MTLPrimitiveAccelerationStructureDescriptor

包含几何图元的加速结构的描述。

class MTLInstanceAccelerationStructureDescriptor

从原始加速结构实例构建的加速结构的描述。

struct MTLAccelerationStructureInstanceDescriptor

实例化几何加速结构中实例的描述。

protocol MTLIntersectionFunctionTable

Metal用来执行光线跟踪相交测试的可见函数表。

class MTLIntersectionFunctionTableDescriptor

一种描述,描述如何创建相交函数表。

class MTLIntersectionFunctionDescriptor

对执行相交测试的可见功能的描述。

protocol MTLAccelerationStructureCommandEncoder

一个对象,用于对构建或调整加速结构的命令进行编码。

渲染图

通过发出绘图调用来渲染图形,如果要绘制到屏幕上,则选择一个演示对象。

{} 使用渲染管道渲染基元

渲染一个简单的2D三角形。

{} 创建和采样纹理

将图像数据加载到纹理中并将其应用于四边形。

{} 使用深度测试计算原始可见性

通过使用深度纹理来确定场景中哪些像素可见。

{} 自定义渲染过程设置

通过创建自定义渲染通道,渲染为屏幕外纹理。

从一个输入流生成多个输出顶点流

有效地渲染到多个图层或视口。

渲染管道

指定应如何渲染图形基元。

class MTLRenderPassDescriptor

一组渲染目标,用于保存渲染过程的结果。

protocol MTLRenderCommandEncoder

用于对渲染过程的命令进行编码的对象。

protocol MTLParallelRenderCommandEncoder

一个对象,它分割单个渲染通道,以便可以同时从多个线程对其进行编码。

型号I / O

在与图形处理相关的纹理中指定精确位置。

介绍

在屏幕上显示金属纹理。

可绘制对象

从可绘制对象中获取要绘制的纹理。

着色器

着色器创作

Metal Shading Language编写您的GPU代码。

图书馆

将着色器组织到库中。

功能

检索有关渲染和计算功能的信息。

资源

创建对象以保存GPU数据。

设置资源存储模式

设置定义内存位置和资源访问权限的存储模式。

将数据复制到私有资源

使用blit命令编码器将缓冲区或纹理数据复制到专用资源。

同步托管资源

同步CPU或GPU的托管资源的内容。

在连接的GPU之间传输数据

在GPU之间使用高速连接来快速传输数据。

减少Metal应用程序的内存占用量

了解有关在iOS和tvOS中有效使用内存的最佳做法。

protocol MTLResource

GPU可以访问的内存分配。

protocol MTLBlitCommandEncoder

编码器,对内存复制,过滤和填充命令进行编码。

class MTLBlitPassDescriptor

blit pass的配置,用于创建blit命令编码器。

protocol MTLResourceStateCommandEncoder

编码器,其对修改资源配置的命令进行编码。

class MTLResourceStatePassDescriptor

资源状态传递的配置,用于创建资源状态命令编码器。

缓冲液

创建和操作非结构化GPU资源。

贴图

创建和操纵结构化的GPU资源。

间接命令缓冲区

通过重用命令来节省编码时间,或者通过在GPU上生成命令来创建GPU驱动的渲染管道。

创建一个内存分配,您可以从中分配资源。

同步化

管理对您应用中资源的访问,以避免数据危害。

对象大小调整和定位

设置许多金属对象的大小和位置。

struct MTLOrigin

区域左上角的坐标。

struct MTLRegion

对象元素子集的边界。

struct MTLSize

对象的尺寸。

typealias MTLCoordinate2D

视口中的坐标。

func MTLCoordinate2DMake(Float, Float) -> MTLCoordinate2D

返回具有指定坐标的新2D点。

打包的向量和矩阵

typealias MTLPackedFloat3

一种包含三个32位浮点值且无其他填充的结构。

typealias MTLPackedFloat4x3

一种结构,包含按列优先顺序排列的32位浮点值的4x4矩阵的前三行。

时间

typealias MTLTimestamp

时间戳,以马赫绝对时间表示。

工具

尽早诊断金属编程问题

使用Xcode的诊断工具识别开发期间的Metal框架和着色器编程错误。

开发在模拟器中运行的Metal应用

在Simulator中对您的Metal应用进行原型设计和测试。

{}在Metal App中支持模拟器

修改Metal Apps以在Simulator中运行。

帧捕获调试工具

在运行时分析和优化您的应用性能。

在仪器中使用Metal System Trace来分析您的应用程序

通过检查应用程序的CPU和GPU利用率问题来平滑帧速率。

使用GPU计数器仪器优化性能

在Instruments中检查您的应用程序对GPU资源的使用,并根据需要调整您的应用程序

GPU编程技术

了解各种在GPU上高效执行代码的策略,并尝试使用其随附的示例代码。

{} 使用平铺着色器使用前向加光照渲染场景

使用Apple GPU上的最新功能实现正向渲染器。

{}在Objective-C中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 在Swift中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 在C ++中使用延迟照明渲染场景

通过实现针对即时模式和基于图块的延迟渲染器GPU优化的延迟照明渲染器,避免昂贵的照明计算。

{} 使用更少的渲染过程渲染反射

使用图层选择来减少生成环境贴图所需的渲染遍数。

从通用着色器源为不同细节级别创建管道。

使用参数缓冲区动态渲染地形

使用参数缓冲区通过GPU驱动的管线实时渲染地形。

在视图中混合金属和Open GL渲染

使用可互操作的纹理在同一视图中使用Metal和OpenGL进行绘制。

金属现代渲染

使用高级金属功能(例如间接命令缓冲区,稀疏纹理和可变速率栅格化)来实现现代渲染算法。

用金属处理HDR图像

使用Apple GPU的最新功能实施后处理管道。

参考

金属结构

金属枚举

金属类型别名

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容