一文详解Mac搭建Vulkan开发环境
本文为
Vukan系列的第二篇文章
,上一篇
文章对Vulkan进行了简单介绍
,并对其与OpenGL的优劣势进行了比较
,为应用开发人员在选择图形API方面提供了建议
。下边开始本文的主要内容,详细介绍在Mac操作系统中,如何搭建Vulkan开发环境
。
Vulkan是一种基于命令缓冲区的底层图形API接口
,能够更好地利用现代GPU的强大计算能力
,从而获得更高的渲染性能和更低的CPU开销
。与OpenGL相比,Vulkan提供了更详细的硬件控制
、更高效的内存管理
、更灵活的管线状态管理
和多线程支持
等优势。
同时,Vulkan也存在一些挑战,包括学习曲线较陡峭
、编程难度较大
等。在应用开发时,开发人员需要根据实际需求和平台支持情况来选择合适的图形API接口。
一、下载Vulkan SDK
到 Vulkan 官方下载对应平台的 Vulkan SDK:
// Vulkan官网下载对应平台的sdk
https://vulkan.lunarg.com/sdk/home
安装Vulkan SDK后,可以跑一下VulkanSDK/1.3.250.0/Applications
目录下的vkcube
,如果显示如下运行界面,说明你的电脑是支持Vulkan的。
二、安装GLFW与GLM
Vulkan是平台无关的应用程序图形API接口,创建本地窗口的能力依赖GLFW与GLM的支持。
GLFW (Graphics Library Framework)
:
最初用于创建OpenGL窗口和上下文的开源库,它提供了一套跨平台的API,能够方便地创建OpenGL窗口、处理输入事件、处理窗口事件等。
GLFW为Vulkan提供了一组扩展,使得开发人员能够更轻松地创建Vulkan窗口和上下文,并处理窗口和输入事件等。GLM (OpenGL Mathematics)
:
GLM是一个用于数学计算的开源库,它提供了一组类和函数,用于实现矩阵变换、向量计算、投影等数学操作。
GLM与Vulkan密切相关,在进行Vulkan开发时时,GLM为开发人员提供矩阵变换、向量计算等数学操作来控制渲染管线使得开发人员能够更方便地进行三维图形编程。
// 通过homebrew进行glfw与glm
brew install glfw3
brew install glm
三、配置 Xcode
现在依赖项已经安装完毕,下边可以开始配置一个基本的 Xcode Vulkan 项目。
3.1 新建Xcode项目
启动 Xcode 并新建项目,选择 Application > Command Line Tool
项目类型:
选择 C++ 作为项目使用的语言:
3.2 配置头文件与库文件
打开 Build Settings
标签页,配置Vulkan、glfw和glm的头文件
和lib文件
的search path
- 将
/usr/local/include
加入 Header Search Paths,这是 Homebrew 安装头文件的路径,我们安装的 glm 和 glfw3 的头文件都在该文件夹下。 - 将
vulkansdk/macOS/include
加入 Header Search Paths,这是Vulkan SDK安装目录头文件路径。
- 将
/usr/local/lib
加入 Library Search Paths,这是 Homebrew 安装库文件的路径,我们安装的 glm 和 glfw3 的库文件都在该文件夹下。 - 将
vulkansdk/macOS/lib
加入 Library Search Paths,这是 Vulkan SDK安装目录库文件路径。
3.3 添加动态库
点击 Build Phases
标签页,添加 glfw3 和 vulkan 框架动态库。
- 对于 glfw,打开
/usr/local/lib
目录,可以找到类似libglfw.3.x.dylib
形式的文件。将这个文件拖拽
到Linked Frameworks and Libraries
标签下; - 对于 Vulkan,打开
vulkansdk/macOS/lib
目录,拖拽
libvulkan.1.dylib
和libvulkan.1.x.xx.dylib
到 Linked Frameworks and Libraries 标签下;
完成上面的操作后,更改Copy Files
标签:
- 将Destination 设置为 Frameworks;
- 清空 Subpath 文本框;
- 不要勾选 Copy only when installing;
- 然后点击 + 号,将所有三个动态库添加进去。
3.4 配置环境变量
在 Xcode 的工具栏上通过 Product>Scheme>Edit Scheme...
打开 Arguments
标签页,添加下面的环境变量:
VK_LAYER_PATH = /Users/xiaxl/VulkanSDK/1.3.250.0/macOS/share/vulkan/explicit_layer.d
VK_ICD_FILENAMES = /Users/xiaxl/VulkanSDK/1.3.250.0/macOS/share/vulkan/icd.d/MoltenVK_icd.json
四、测试
至此为止,已经完成了全部配置。可以通过运行如下代码测试环境配置是否正常。
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>
#include <iostream>
int main() {
// 初始化GLFW库
glfwInit();
// GLFW最早是为OpenGL设计
// 所以此处需要显式的设置GLFW阻止自动创建OpenGL上下文
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
// 创建窗口
GLFWwindow* window = glfwCreateWindow(800, 600, "Vulkan window", nullptr, nullptr);
// 查询本机支持的扩展属性
uint32_t extensionCount = 0;
vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
std::cout << extensionCount << " extensions supportedn";
// 测试glm
glm::mat4 matrix;
glm::vec4 vec;
auto test = matrix * vec;
// 未主动close时持续消费点击event
while(!glfwWindowShouldClose(window)) {
glfwPollEvents();
}
// 销毁window
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
运行效果如下:
参考
Vulkan SDK下载:
https://vulkan.lunarg.com/sdk/home
vulkan官方:
https://registry.khronos.org/vulkan/
vulkan官方文档:
https://registry.khronos.org/vulkan/specs/1.3-extensions/pdf/vkspec.pdf
= THE END =
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。