Skip to content

An extension for the SDL3 library for using WebGPU native.

License

Notifications You must be signed in to change notification settings

eliemichel/sdl3webgpu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMake Badge

SDL3 WebGPU Extension

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.

Table of Contents

Overview

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.

Usage

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.

Example

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.

License

See LICENSE.txt.

About

An extension for the SDL3 library for using WebGPU native.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published