Metal 简介 与 Metal 编程语言语法。
1、Metal 简介
1.1 Metal 是 Apple 为了解决 3D 渲染而推出的框架。
游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。
Metal 的2个目的:1图形渲染; 2高并发计算。
苹果文档给出的 Metal 优化:CPU 低消耗、GPU 高利用、连续处理器并行、有效的资源利用
1.2 图形管道 graphic pipeline
2、Metal Shading Language - Metal 编程语言与规范
2.1 Metal 语言特点
2.1.1 Metal 着色器语言
用来编写3D 图形渲染逻辑和并行计算核心逻辑(高并发) 的一门编程语言。当我们需要使用 Metal 框架来完成 APP 的开发时(或 需要使用 Metal 的高并发计算能力时),就要使用 Metal 编程语言进行编程。
2.1.2 Metal 编程语言 使用 clang 和 LLVM 进行编译处理
Metal的语言规则,是基于 C++ 11.0 标椎设计的,并在此基础上进行了一定的扩展和限制。
而我们的实际业务开发场景中所需要做的工作就是: 编写 在GPU 上执行的图像渲染逻辑代码 以及 通用的并行计算逻辑 代码。
2.1.3 Metal 与 C++ 11.0
1)Metal 限制(不支持):
Lambda 表达式
递归函数调用
动态转换操作符
类型识别
对象创建 new 和 销毁 delete 操作符
操作符 noexcept
goto 跳转
变量存储修饰符 register 和 thread_local
虚函数修饰符
派生类
异常处理
C++ 标准函数库 在 Metal 中不支持,不能使用
2)Metal 中指针的使用限制
Metal 图形和并行计算函数用到的参数,如果是指针 必须使用地址空间修饰符(devide / threadgroup / constant)
不支持函数指针
函数名不能出现 main
3)Metal 像素坐标系
Metal 中纹理/帧缓冲区 attachment 的像素使用的坐标系的原点是在 左上角。--> 苹果的坐标原点
2.2 Metal 的数据类型
2.1)标量类型
2.2)向量与矩阵 数据类型
2.2.1 向量
booln
charn
shortn
intn
ucharn / ushortn / uintn
halfn
floatn
n --> 向量中的 n 表示维度,最大为4
代码示例:
bool2 b = [1, 2];
float4 f4 = float4(1.0, 2.0, 3.0, 4.0);
float f = f4[0];// x = 1.0 --> 类似数组
// int4 --> 4个变量组成的4维向量
// xyzw rgba
int4 test = int4(0, 1, 2, 3);
int x = test.x;// x = 0
int y = text.y;// y = 1
int x1 = test.r;// x1 = 0
// 多个分量的访问
float4 c = float4(0,0,0,0);
c.xyzw =