探索iOS之Metal编程指南

iOS推出Metal渲染库为了取代OpenGL。Metal有自己的Shader语言,渲染效率比OpenGL高。在这里我们一起探索:Metal使用C++限制、预处理定义、动态链接配置、GPU编译配置、设备坐标系、视口坐标系、纹理坐标系、矢量类型、矩阵类型、采样器状态、矩阵相乘。

1、使用C++限制

C++14的一些特性无法在Metal使用,具体如下:

  • lambda表达式
  • dynamic_cast操作
  • 类型检测
  • new和delete操作
  • noexcept操作
  • goto跳转
  • register、thread_local关键字
  • virtual虚函数
  • 派生类
  • 异常处理

另外,不要在Metal代码使用C++标准库。函数指针在Metal2.3才支持。

2、预处理定义

预处理定义包括:Metal版本、在macOS或iOS平台编译。如下所示:

__METAL_VERSION__ // Set to the Metal language revision
__METAL_MACOS__   // Set if compiled with the macOS Metal language
__METAL_IOS__     // Set if compiled with the iOS Metal language
__METAL__         // Set if compiled with the unified Metal language

还有一些TARGET_OS的预定义:

TARGET_OS_MAC          // run on MacOS
TARGET_OS_OSX          // run on OSX
TARGET_OS_IPHONE       // run on devices or simulator
TARGET_OS_IOS          // run on iOS
TARGET_OS_TV           // run on Apple TV OS
TARGET_OS_MACCATALYST  // run on MacOS
TARGET_OS_SIMULATOR    // run on simulator

3、动态链接配置

Metal动态链接包括指定动态库/静态库、安装路径,如下所示:

  • -dynamiclib:指定为动态库
  • -install_name:动态库安装路径

4、GPU编译配置

在iOS16或macOS13以后,支持配置GPU编译,具体配置选项如下:

-arch       // 指定系统架构
-gpu-family // MTLGPUFamily架构
-N          // 描述Metal脚本格式,后缀.mtlp-json

5、设备坐标系

Normalized Device Coordinate归一化设备坐标系,简称NDC。由xyz三维空间构成,其中z坐标点在0.0和1.0之间。如下图所示:

 

6、视口坐标系

光栅化阶段把设备坐标系转换为视口坐标系,测量单位为pixel像素,原点(0, 0)在左上角,往右下角增大。如下图所示:

 

7、纹理坐标系

纹理坐标系与视口坐标系类似,只是纹理坐标已被归一化,范围从0.0到1.0,中心点为(0.5, 0.5),如下图所示:

 

8、矢量类型

矢量类型包括:bool、char、short、int、long、half、float等,同时后面跟着数值(2、3、4)。值得注意的是,这里有内存对齐,为2的n次方。这里以float展开,其他类型只列举数值2,如下表所示:

typesizealignment
float288
float31616
float41616
bool222
char222
short244
half244
int288
long21616

9、矩阵类型

矩阵类型包括half和float,而mxn阵列包括2x2、2x3、2x4、3x2、3x3、3x4、4x2、4x3、4x4,如下图所示:

 

10、采样器状态

Sampler采样器的状态枚举值,如下表所示:

变量数值描述
coord

normalized(默认)

pixel

指定纹理坐标为归一化或像素
address

repeat

mirrored_repeat

clamp_to_edge

clamp_to_zero

clamp_to_border

纹理坐标的地址模式
border_color

transparent_black(默认)

opaque_black

opaque_white

边界颜色
filter

nearest(默认)

linear

magnification和minification

过滤模式

mag_filter

nearest(默认)

linear

magnification过滤模式
mig_filter

nearest(默认)

linear

minification过滤模式
mip_filter

nearest(默认)

linear

mipmap过滤模式
compare_func

never(默认)

less / less_equal

greater / greater_equal

equal / not_equal

always

设置比较函数

11、矩阵相乘

矩阵相乘有左乘与右乘的区别,类型包括:scalar乘以matrix、matrix乘以scalar、vector乘以matrix、matrix乘以vector、matrix乘以matrix。

参考链接:Metal-Shading-Language-Specification

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Metal编程指南》是一本介绍如何使用Metal框架进行图形引擎开发的编程指南Metal是苹果公司为iOS设备和Mac电脑上的图形处理器(GPU)提供的底层编程接口。这本书将带领读者从基础概念到实际应用,全面深入地了解Metal编程Metal编程的核心思想是利用GPU的强大计算能力进行高性能的并行计算和图形渲染。对于那些想要开发高性能图形应用、游戏引擎或者渲染引擎的开发者来说,这本《Metal编程指南》将是一本宝贵的参考资料。 《Metal编程指南》的内容包括Metal框架的基本概念,如如何创建和配置Metal设备、渲染管道、纹理和缓冲等资源。同时,该书还介绍了Metal Shader Language(MSL),这是一种类似于C语言的语言,开发者可以使用它编写GPU的计算和渲染代码。 此外,该指南还深入讨论了Metal的基础原理和内部机制,包括如何利用并行计算进行高效的图形渲染、光照和阴影计算、粒子系统实现等。此外,还介绍了如何利用Metal进行机器学习、图像处理和数据计算等任务。这些内容能够帮助开发者更好地利用Metal提供的底层接口进行高性能计算和图形渲染。 总之,《Metal编程指南》是一本详尽而全面的关于Metal编程指南,可以帮助开发者理解Metal框架的基本原理和内部机制,掌握Metal编程的技巧和方法。无论是开发图形应用、游戏引擎还是进行高性能计算,这本书都是一本不可多得的参考资料。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值