This is an extension for the great SDL3 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 SDL_GetWGPUSurface(WGPUInstance instance, SDL_Window* window);
Given an SDL window, SDL_GetWGPUSurface
returns a WebGPU surface that corresponds to the window's backend. This is a process that is highly platform-specific, which is why I believe it belongs to SDL.
Your project must link to an implementation of WebGPU (providing webgpu.h
) and of course to SDL. Then:
Option A If you use CMake, you can simply include this project as a subdirectory with add_subdirectory(sdl3webgpu)
(see the content of CMakeLists.txt
).
Option B Just copy sdl3webgpu.h
and sdl3webgpu.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
. For iOS, do similarly but use -framework UIKit
instead of -framework Cocoa
.
Thanks to this extension it is possible to simply write a fully cross-platform WebGPU hello world:
#define SDL_MAIN_HANDLED
#include "sdl3webgpu.h"
#include <SDL3/SDL.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 SDL
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("Learn WebGPU", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
// Here we create our WebGPU surface from the window!
WGPUSurface surface = SDL_GetWGPUSurface(instance, window);
printf("surface = %p", surface);
// Wait for close
SDL_Event event;
while (1)
while (SDL_PollEvent(&event))
if (event.type == SDL_QUIT)
break;
// Terminate SDL
SDL_DestroyWindow(window);
SDL_Quit();
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.