diff --git a/vendor/wgpu/sdl3glue/glue.odin b/vendor/wgpu/sdl3glue/glue.odin new file mode 100644 index 00000000000..7d4975fb0a3 --- /dev/null +++ b/vendor/wgpu/sdl3glue/glue.odin @@ -0,0 +1,6 @@ +#+build !linux +#+build !windows +#+build !darwin +package wgpu_sdl3_glue + +#panic("package wgpu/sdl3glue is not supported on the current target") diff --git a/vendor/wgpu/sdl3glue/glue_darwin.odin b/vendor/wgpu/sdl3glue/glue_darwin.odin new file mode 100644 index 00000000000..4de39b3e39b --- /dev/null +++ b/vendor/wgpu/sdl3glue/glue_darwin.odin @@ -0,0 +1,18 @@ +package wgpu_sdl3_glue + +import "vendor:sdl3" +import "vendor:wgpu" + +GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { + view := sdl3.Metal_CreateView(window) + metal_layer := sdl3.Metal_GetLayer(view) + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor { + nextInChain = &wgpu.SurfaceDescriptorFromMetalLayer { + chain = wgpu.ChainedStruct{sType = .SurfaceDescriptorFromMetalLayer}, + layer = metal_layer, + }, + }, + ) +} diff --git a/vendor/wgpu/sdl3glue/glue_linux.odin b/vendor/wgpu/sdl3glue/glue_linux.odin new file mode 100644 index 00000000000..a8dc6f180cc --- /dev/null +++ b/vendor/wgpu/sdl3glue/glue_linux.odin @@ -0,0 +1,54 @@ +package wgpu_sdl3_glue + +import "vendor:sdl3" +import "vendor:wgpu" + + +GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { + switch sdl3.GetCurrentVideoDriver() { + case "x11": + display := sdl3.GetPointerProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_X11_DISPLAY_POINTER, + nil, + ) + x_window := sdl3.GetNumberProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_X11_WINDOW_NUMBER, + 0, + ) + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor { + nextInChain = &wgpu.SurfaceDescriptorFromXlibWindow { + chain = {sType = .SurfaceDescriptorFromXlibWindow}, + display = display, + window = u64(x_window), + }, + }, + ) + case "wayland": + display := sdl3.GetPointerProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_WAYLAND_DISPLAY_POINTER, + nil, + ) + w_surface := sdl3.GetPointerProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_WAYLAND_SURFACE_POINTER, + nil, + ) + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor { + nextInChain = &wgpu.SurfaceDescriptorFromWaylandSurface { + chain = {sType = .SurfaceDescriptorFromWaylandSurface}, + display = display, + surface = w_surface, + }, + }, + ) + case: + panic("wgpu sdl3 glue: unsupported platform, expected Wayland or X11") + } +} diff --git a/vendor/wgpu/sdl3glue/glue_windows.odin b/vendor/wgpu/sdl3glue/glue_windows.odin new file mode 100644 index 00000000000..c114789f0c2 --- /dev/null +++ b/vendor/wgpu/sdl3glue/glue_windows.odin @@ -0,0 +1,29 @@ +package wgpu_sdl3_glue + +import win "core:sys/windows" + +import "vendor:sdl3" +import "vendor:wgpu" + +GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { + hwnd := sdl3.GetPointerProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_WIN32_HWND_POINTER, + nil, + ) + hinstance := sdl3.GetPointerProperty( + sdl3.GetWindowProperties(window), + sdl3.PROP_WINDOW_WIN32_INSTANCE_POINTER, + nil, + ) + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor { + nextInChain = &wgpu.SurfaceDescriptorFromWindowsHWND { + chain = wgpu.ChainedStruct{sType = .SurfaceDescriptorFromWindowsHWND}, + hinstance = hinstance, + hwnd = hwnd, + }, + }, + ) +}