相关文章推荐

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 文件。

  •  
    推荐文章