This is an extension for the great GLFW library for using it with WebGPU native. It was written as part of the Learn WebGPU for native C++ tutorial series.
This extension simply provides the following function:
WGPUSurface glfwCreateWindowWGPUSurface(WGPUInstance instance, GLFWwindow* window);
Given a GLFW window, glfwCreateWindowWGPUSurface
returns a WebGPU surface that corresponds to the window's back-end. This is a process that is highly platform-specific, which is why I believe it belongs to GLFW.
NB The current version of this extension is written for GLFW 3.4. Up to version 1.2.0, it was written for GLFW 3.3.8.
Your project must link to an implementation of WebGPU (providing webgpu.h
) and of course to GLFW. Then:
Option A If you use CMake, you can simply include this project as a subdirectory with add_subdirectory(glfw3webgpu)
(see the content of CMakeLists.txt
).
Option B Just copy glfw3webgpu.h
and glfw3webgpu.c
to your project's source tree. On MacOS, you must add the compile option -x objective-c
and the link libraries -framework Cocoa
, -framework CoreVideo
, -framework IOKit
, and -framework QuartzCore
.
Thanks to this extension it is possible to simply write a fully cross-platform WebGPU hello world:
#include "glfw3webgpu.h"
#define GLFW_INCLUDE_NONE
#include <GLFW/glfw3.h>
#include <webgpu/webgpu.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
// Init WebGPU
WGPUInstanceDescriptor desc;
desc.nextInChain = NULL;
WGPUInstance instance = wgpuCreateInstance(&desc);
// Init GLFW
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
GLFWwindow* window = glfwCreateWindow(640, 480, "Learn WebGPU", NULL, NULL);
// Here we create our WebGPU surface from the window!
WGPUSurface surface = glfwCreateWindowWGPUSurface(instance, window);
printf("surface = %p", surface);
// Terminate GLFW
while (!glfwWindowShouldClose(window)) glfwPollEvents();
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
NB The linking process depends on the implementation of WebGPU that you are using. You can find detailed instructions for the wgpu-native
implementation in this Hello WebGPU chapter. You may also check out examples/CMakeLists.txt
.
See LICENSE.txt.