LearnWebGPU
LearnWebGPU copied to clipboard
Build with GLFW Wayland
In the "Opening a window" chapter, it is provided a minimal example of opening a window with GLFW.
On Linux, GLFW uses X11 by default, but it's possible to compile the project with Wayland enabled. The following is necessary to achieve this:
- Set
GLFW_USE_WAYLANDoption when creating the build folder:cmake . -B build -D GLFW_USE_WAYLAND=1; - add
glfwMakeContextWindow(window);afterif (!window) { /* error hanling */ }; - add
glfwSwapBuffers(window);inside the main loop (while (!glfwWindowShouldClose(window)) { /* loop contents*/ }, usually it's beforeglfwPollEvents(););
That's it. The official example from the documentation is an ideal minimal code that works both in X11 and Wayland: https://www.glfw.org/documentation.html.
I felt it was important to bring this to attention because of many news on Linux ecosystem:
Could you check whether steps 2 and 3 are really needed? My understanding is that glfwMakeContextWindow and glfwSwapBuffers are OpenGL-specific functions so only setting GLFW_USE_WAYLAND should be enough.
More specifically:
glfwMakeContextWindowmanages the global hidden state of OpenGL, whereas in WebGPU we have an explicit access to the instance/device.glfwSwapBuffersplays a role similar towgpuSwapChainPresentbut again relative to the hidden state of OpenGL. We instead explicitely get the WebGPU-compatible surface at the beginning and then no longer need to rely on GLFW to swap buffers.
@eliemichel, I just tested it on https://github.com/eliemichel/LearnWebGPU-Code/tree/step005 and all the steps that I described were necessary to have the window show up, I added one by one.
Unfortunately, I could not find the discussion about this that I read when I had the same problem back in 2021 when I was learning Vulkan.
https://github.com/glfw/glfw/issues/1268