在 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_LIBRARY
和 VULKAN_INCLUDE_DIR
手动制定到 MoltenVK SDK 中对应的位置。
在 Xcode 中新建 Command Line 项目,把 build/src
下的 libglfw.a
连同 MoltenVK.framework
添加到项目中,在项目中设定好头文件搜索位置。
写个 Demo
代码则请参考 黑桃花 的 Vulkan 系列文章。需要注意的是,MoltenVK 并不支持文中所使用的 VK_LAYER_LUNARG_standard_validaction
层,这个步骤跳过即可。
对于 GLSL 编译为 SPIR-V 的步骤,GLSL 转换为 SPIR-V 的工具 MoltenVK 也有提供,在文件夹中的 MoltenShaderConverter/Tools/MoltenShaderConverter
,使用 MoltenShaderConverter -gi shader.frag -so frag.spv
和 MoltenShaderConverter -gi shader.vert -so vert.spv
也可以达成同样效果。
最后 ⌘R 运行即可看到效果。
如果只是想看个结果,请从这里下载经过一定修改后的代码。
这段代码是完全标准的,你可以在Windows和Linux上不需要改动一行就可以运行。祝你们好运吧。