在 macOS 上开发 Vulkan 程序

Vulkan 作为新的标准图形显示 API 已经发布已久,Windows 和 Linux 上早已由各主流显卡厂商所适配,唯独 macOS 上苹果对 Vulkan 反应迟钝,距 Vulkan 1.0 标准正式发布已经过去了近两年,macOS 仍旧没有提供 Vulkan 的支持。当然苹果没提供官方层面的支持并不代表在 macOS 上就不能开发和“运行”使用 Vulkan API 开发的程序了,MoltenVK 项目提供了一个使用 Metal API 实现的 Vulkan API 兼容的框架,并且提供了一个 GLSL、SPIR-V 与 MSL 三种着色器程序代码离线状态相互转换的工具,这使得在 macOS 上开发 Vulkan 程序成为了可能。

运行环境

  • macOS 10.11 El Capitan 或更新
  • iOS 9 或更新,仅支持 64 位设备,暂不支持模拟器运行

开发环境

  • macOS 10.12 Sierra 或更新
  • Xcode 9 或更新

环境搭建

在 MoltenVK 官方网站上点击 Free Trial(免费试用)便可下载得到专用 SDK。
为了确保代码的可移植性,我们用 GLFW 与操作系统交互,不过需要注意的是,最新的稳定版并不支持 MoltenVK,git 中的版本则可以做到这一点。
GLFW 官网不提供 macOS 二进制下载,需要自行下载代码编译。编译仅需依赖 CMake,利用第三方包管理或者从 CMake 官网 下载皆可。
在终端中进入到 GLFW 的目录,在其中执行

mkdir build
pushd build
cmake ../ -DVULKAN_LIBRARY=/path/to/libMoltenVK.dylib -DVULKAN_INCLUDE_DIR=/path/to/MoltenVK/include
popd
make --build ./build

需要把 VULKAN_LIBRARYVULKAN_INCLUDE_DIR 手动制定到 MoltenVK SDK 中对应的位置。
在 Xcode 中新建 Command Line 项目,把 build/src 下的 libglfw.a 连同 MoltenVK.framework 添加到项目中,在项目中设定好头文件搜索位置。

image.png

写个 Demo

代码则请参考 黑桃花 的 Vulkan 系列文章。需要注意的是,MoltenVK 并不支持文中所使用的 VK_LAYER_LUNARG_standard_validaction 层,这个步骤跳过即可。
对于 GLSL 编译为 SPIR-V 的步骤,GLSL 转换为 SPIR-V 的工具 MoltenVK 也有提供,在文件夹中的 MoltenShaderConverter/Tools/MoltenShaderConverter,使用 MoltenShaderConverter -gi shader.frag -so frag.spvMoltenShaderConverter -gi shader.vert -so vert.spv 也可以达成同样效果。
最后 ⌘R 运行即可看到效果。

image.png

如果只是想看个结果,请从这里下载经过一定修改后的代码。
这段代码是完全标准的,你可以在Windows和Linux上不需要改动一行就可以运行。祝你们好运吧。

你可能感兴趣的:(在 macOS 上开发 Vulkan 程序)