LearnWebGPU icon indicating copy to clipboard operation
LearnWebGPU copied to clipboard

Build with GLFW Wayland

Open ghost opened this issue 2 years ago • 2 comments

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:

  1. Set GLFW_USE_WAYLAND option when creating the build folder: cmake . -B build -D GLFW_USE_WAYLAND=1;
  2. add glfwMakeContextWindow(window); after if (!window) { /* error hanling */ };
  3. add glfwSwapBuffers(window); inside the main loop (while (!glfwWindowShouldClose(window)) { /* loop contents*/ }, usually it's before glfwPollEvents(););

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:

ghost avatar Oct 18 '23 14:10 ghost

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:

  • glfwMakeContextWindow manages the global hidden state of OpenGL, whereas in WebGPU we have an explicit access to the instance/device.
  • glfwSwapBuffers plays a role similar to wgpuSwapChainPresent but 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 avatar Oct 19 '23 06:10 eliemichel

@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

ghost avatar Oct 19 '23 12:10 ghost