From f9ef951b22b582af3fc5a228525ba546695a3d78 Mon Sep 17 00:00:00 2001 From: Emir Date: Tue, 23 Jul 2024 22:39:50 +0300 Subject: [PATCH] Add `sdl2glue/glue_linux.odin` --- vendor/wgpu/sdl2glue/glue.odin | 1 + vendor/wgpu/sdl2glue/glue_linux.odin | 42 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 vendor/wgpu/sdl2glue/glue_linux.odin diff --git a/vendor/wgpu/sdl2glue/glue.odin b/vendor/wgpu/sdl2glue/glue.odin index f4deb28dc..9da9a0738 100644 --- a/vendor/wgpu/sdl2glue/glue.odin +++ b/vendor/wgpu/sdl2glue/glue.odin @@ -1,3 +1,4 @@ +//+build !linux //+build !windows //+build !darwin package wgpu_sdl2_glue diff --git a/vendor/wgpu/sdl2glue/glue_linux.odin b/vendor/wgpu/sdl2glue/glue_linux.odin new file mode 100644 index 000000000..222a4ebc7 --- /dev/null +++ b/vendor/wgpu/sdl2glue/glue_linux.odin @@ -0,0 +1,42 @@ +package wgpu_sdl2_glue + +import "vendor:sdl2" +import "vendor:wgpu" + +GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surface { + window_info: sdl2.SysWMinfo + sdl2.GetWindowWMInfo(window, &window_info) + if window_info.subsystem == .WAYLAND { + display := window_info.info.wl.display + surface := window_info.info.wl.surface + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor{ + nextInChain = &wgpu.SurfaceDescriptorFromWaylandSurface{ + chain = { + sType = .SurfaceDescriptorFromWaylandSurface, + }, + display = display, + surface = surface, + }, + }, + ) + } else if window_info.subsystem == .X11 { + display := window_info.info.x11.display + window := window_info.info.x11.window + return wgpu.InstanceCreateSurface( + instance, + &wgpu.SurfaceDescriptor{ + nextInChain = &wgpu.SurfaceDescriptorFromXlibWindow{ + chain = { + sType = .SurfaceDescriptorFromXlibWindow, + }, + display = display, + window = u64(window), + }, + }, + ) + } else { + panic("wgpu sdl2 glue: unsupported platform, expected Wayland or X11") + } +}