Metal-cpp 入门
Metal-cpp 是适用于 Metal 的低开销 C++ 接口,可帮助你将 Metal 功能添加到以 C++ 语言编写的图形类 App、游戏和游戏引擎中。
使用 C++ 接口替代 Metal 的 Objective-C 头文件。
直接映射所有 Metal Objective-C 类、常量和枚举到 C++ 的 MTL 名字空间中。
由于使用了 C++ 内联函数调用,因此相较于使用 Metal 的 Objective-C 头文件,无显著开销。
没有使用需要额外内存分配的封装容器类。
为 iOS、iPadOS、macOS 和 Apple tvOS 提供完全相同的头文件和函数/常量/枚举。
向后兼容:所有
bool MTL::Device::supports...()
函数都会检查其所需的 Selector 是否存在;如果不存在,则自动返回
false
。
字符串
(ErrorDomain)
常量为弱链接,在不可用时会自动设置为
nullptr
。
1. 准备好 Mac。
在你的 Mac 上打开
Xcode
。需要支持 C++17 的
Xcode 9.3
或更高版本;由于
NS::Object
中使用了
constexpr
,因此 C++17 是
Metal-cpp
的最低要求。
下载以下 ZIP 文件并提取其中的内容。
metal-cpp_macOS12_iOS15.zip
metal-cpp_macOS13_iOS16.zip
metal-cpp_macOS13.3_iOS16.4.zip
metal-cpp_macOS14_iOS17-beta.zip
2. 将
metal-cpp
文件夹添加到构建版本系统的头文件搜索路径中。
在 Xcode 中:
点按“Project Navigator”(项目导航器)。
点按所需项目。
点按“Build Settings”(构建版本设置)。
搜索“Header Search Paths”(头文件搜索路径)。
将路径添加到已解压的文件夹:
metal-cpp/
。
metal-cpp
是一个只包含头文件的开发库。要生成实现代码,请在你的
任意一个
.cpp 文件中添加以下代码:
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>
注:也可以将
metal-cpp
头文件放在引号中。
4. 使用
metal-cpp。
在任何需要引用
metal-cpp
对象或类型的文件中,只需包含头文件即可让那些符号可见。
#include <Foundation/Foundation.hpp>
#include <Metal/Metal.hpp>
#include <QuartzCore/QuartzCore.hpp>
重要信息:
NS_PRIVATE_IMPLEMENTATION、
MTL_PRIVATE_IMPLEMENTATION
和
CA_PRIVATE_IMPLEMENTATION
宏只能定义一次。
单个头文件的
Metal-cpp
为方便操作,你还可以在项目中以单个头文件的形式来包含
metal-cpp。
在提取 ZIP 文件内容后,请从终端运行以下命令以生成单个用来包含的头文件。
./SingleHeader/MakeSingleHeader.py Foundation/Foundation.hpp QuartzCore/QuartzCore.hpp Metal/Metal.hpp
运行完成后,这个命令会生成单个头文件:
./SingleHeader/Metal.hpp。
这个文件中包含你在项目中使用
metal-cpp
所需的一切。
请记得在一个 CPP 文件中生成实现代码。
#define NS_PRIVATE_IMPLEMENTATION
#define CA_PRIVATE_IMPLEMENTATION
#define MTL_PRIVATE_IMPLEMENTATION
#include <Metal/Metal.hpp>
内存管理注意事项
Metal-cpp
遵循 Cocoa 和
Cocoa Touch
的对象分配策略。了解这些规则对于使用
metal-cpp
尤其重要,因为 C++ 对象不符合自动引用计数 (ARC) 的条件。有关更多信息,请参考
metal-cpp
下载项中的 README 文件。
Apple Developer Program
Apple Developer Enterprise Program
App Store Small Business Program
MFi Program (英文)
News Partner Program (英文)
Video Partner Program (英文)
安全赏金计划 (英文)
Security Research Device Program (英文)