一.简介:
Metal
着色语言是一个用来编写3D图形渲染逻辑和并行计算核心逻辑的编程语言,编写Metal
框架的APP需要使用Metal
着色语言程序.
Metal
着色语言 与 Metal
框架配合使用,Metal
框架管理Metal
着色语言的运行和可选编译选项.Metal
着色器语言使用clang
和LLVM
,编译器对于在GPU上的代码执行效率有更好的控制.
1.1 Metal 语言
Metal 着色语言的使用包括图形渲染和并行运算.Metal着色语言基于C++设计,开发者可以用它来编写在GPU上执行的图形渲染逻辑代码和通用并行计算逻辑代码. 因为是基于C++设计,开发者会觉得非常的熟悉,从而更加便于使用.因为图形渲染和并行运算是都是使用Metal着色语言,所以这允许把这2种任务结合在一起完成.
1.2 如何来使用此文章
如果大家想要使用Metal框架,有必要使用并且阅读此文章.因为他们需要使用Metal着色语言编写运行在GPU上的图像渲染和并行计算逻辑.
- Metal and C++ 我们会讲Metal 与C++的异同
- Metal数据类型 Metal着色语言的数据类型,包括向量,矩阵,缓存,纹理,采样器.还有类型对齐以及类型转换
- Metal 运算符
- 方法,变量,修饰符 :如何描述方法,变量如何声明,如何使用 属性修饰符,以及限制修饰符
- Metal的标准库. 如何使用Metal内建方法的使用
二. Metal 与 C++ 11.0
Metal 这门语言是基于C++ 11.0标准设计的.它在C++基础是行多了一些拓展和限制.下面我们可以简单介绍介绍Metal着色语言与C++11.0 相比之下的修改和限制.
2.1 Overloading 重载
- Metal 语言支持重载,如果C++11.0,包括方法重载规则,可以包括参数的地址空间描述符.Metal着色语言中的标识为图形渲染入口函数或是并行计算入口函数的不可以被重载.
2.2 Templates 模块
- Metal 着色语言支持的模板如图C++11.0 一样.
2.3 Preprocessing Directives 预编译指令
Metal 和 C++11.0 一样支持预编译指令
2.4 Restrictions 限制
如下的C++11.0特性在Metal 着色语言中是不支持的;
- Lambda表达式
- 递归函数调用
- 动态转换操作符
- 类型识别
- 对象创建(
new
)和释放(delloc
)操作符 - 操作符
noexcept
-
goto
跳转 - 变量存储修饰符
register
和thread_local
- 虚函数修饰符
- 派生类
- 异常处理
C++ 的标准库不可以在Metal 着色语言中使用, Metal 着色语言使用自己的标准库.这个后期课程会详细讲解.
- Metal着色语言是有对于指针的使用限制
- Metal图形和并行计算函数用到的入参如果是指针必须使用地址空间修饰符(
device
,threadgroup
,constant
) - 不支持函数指针
- Metal函数名不能命名为
main
函数
2.5 Metal Pixel Coordinate System Metal 像素坐标系统
在Metal中,纹理,帧缓存中的像素使用的坐标系统的原点定义在左上角.
持续更新!
网友评论