先编译 GLFW
GLFW,你看这个名字也能看出来,这是一个为 OpenGL 服务的库。 GLFW 将 MacOS,Windows,Linux 等不同平台上的窗口创建和 OpenGL Context 的创建封装了起来。 如果你写的是 OpenGL 的程序,你不必了解每个平台上的具体实现,直接调用 GLFW 就可以创建出来一个 OpenGL 环境。
那和我们的 WebGPU 有什么关系?
答案是,我们虽然不需要 GLFW 为我们创建 OpenGL Context, 但是我们可以使用 GLFW 为我们创建一个窗口。
GLFW 封装了 MacOS,Windows,Linux 各个平台创建窗口的接口, 我们只需要调用 GLFW,就可以用一套代码在不同平台上创建出来窗口。
#include <GLFW/glfw3.h>
int main() {
GLFWwindow * window = nullptr;
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
window = glfwCreateWindow(1920, 1080, "EyerGPU", nullptr, nullptr);
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
比较关键的是这一行代码:
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
必须加上这一行代码,要不 GLFW 会给你创建一个 OpenGL Context 出来,特别烦人。
有关 OpenGL Context 还有一些要说的。 如果大家对 OpenGL 比较熟悉的话,就一定知道:要使用 OpenGL,你先要创建一个所谓的 OpenGL 上下文,也就是我在文中所说的 OpenGL Context。 但是,在 OpenGL 的标准里面,并没有规定这个 OpenGL Context 应该如何创建, 所以,各个平台的创建方法都不一样。 Linux 上面有 EGL,Windows 平台上有 WGL,Mac 平台上有 EAGL,相当麻烦。这也是 GLFW 要对创建 OpenGL Context 进行封装的原因。
但是,WebGPU 改变了这一点,WebGPU 中,创建 WebGPU 实例也包含在了 WebGPU 标准里面。 所以,你可以用相同的代码,在不同的平台上创建 WebGPU 实例。具体怎么做,我们下一章开始讲解。