Browse Source

Add `sdl2glue/glue_linux.odin`

Emir 1 year ago
parent
commit
f9ef951b22
2 changed files with 43 additions and 0 deletions
  1. 1 0
      vendor/wgpu/sdl2glue/glue.odin
  2. 42 0
      vendor/wgpu/sdl2glue/glue_linux.odin

+ 1 - 0
vendor/wgpu/sdl2glue/glue.odin

@@ -1,3 +1,4 @@
+//+build !linux
 //+build !windows
 //+build !windows
 //+build !darwin
 //+build !darwin
 package wgpu_sdl2_glue
 package wgpu_sdl2_glue

+ 42 - 0
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")
+    }
+}