aboutsummaryrefslogtreecommitdiff
path: root/vendor/wgpu/sdl2glue/glue_linux.odin
blob: 689d162491b483aa048dfa04874a59b44df94c49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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.VERSION(&window_info.version)
	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.SurfaceSourceWaylandSurface{
					chain = {
						sType = .SurfaceSourceWaylandSurface,
					},
					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.SurfaceSourceXlibWindow{
					chain = {
						sType = .SurfaceSourceXlibWindow,
					},
					display = display,
					window  = u64(window),
				},
			},
		)
	} else {
		panic("wgpu sdl2 glue: unsupported platform, expected Wayland or X11")
	}
}