public static unsafe SwapchainSource GetSwapchainSource(Sdl2Window window) { IntPtr sdlHandle = window.SdlWindowHandle; SDL_SysWMinfo sysWmInfo; Sdl2Native.SDL_GetVersion(&sysWmInfo.version); Sdl2Native.SDL_GetWMWindowInfo(sdlHandle, &sysWmInfo); switch (sysWmInfo.subsystem) { case SysWMType.Windows: Win32WindowInfo w32Info = Unsafe.Read <Win32WindowInfo>(&sysWmInfo.info); return(SwapchainSource.CreateWin32(w32Info.Sdl2Window, w32Info.hinstance)); case SysWMType.X11: X11WindowInfo x11Info = Unsafe.Read <X11WindowInfo>(&sysWmInfo.info); return(SwapchainSource.CreateXlib( x11Info.display, x11Info.Sdl2Window)); case SysWMType.Cocoa: CocoaWindowInfo cocoaInfo = Unsafe.Read <CocoaWindowInfo>(&sysWmInfo.info); IntPtr nsWindow = cocoaInfo.Window; return(SwapchainSource.CreateNSWindow(nsWindow)); default: throw new PlatformNotSupportedException("Cannot create a SwapchainSource for " + sysWmInfo.subsystem + "."); } }
private static SwapchainSource GetSwapchainSource(IntPtr window) { SDL.SDL_SysWMinfo sysWmInfo = new SDL.SDL_SysWMinfo(); SDL.SDL_GetVersion(out sysWmInfo.version); SDL.SDL_GetWindowWMInfo(window, ref sysWmInfo); switch (sysWmInfo.subsystem) { case SDL.SDL_SYSWM_TYPE.SDL_SYSWM_WINDOWS: ref var w32Info = ref sysWmInfo.info.win; return(SwapchainSource.CreateWin32(w32Info.window, w32Info.hdc)); case SDL.SDL_SYSWM_TYPE.SDL_SYSWM_X11: ref var x11Info = ref sysWmInfo.info.x11; return(SwapchainSource.CreateXlib( x11Info.display, x11Info.window)); case SDL.SDL_SYSWM_TYPE.SDL_SYSWM_COCOA: ref var cocoaInfo = ref sysWmInfo.info.cocoa; var nsWindow = cocoaInfo.window; return(SwapchainSource.CreateNSWindow(nsWindow)); default: throw new PlatformNotSupportedException("Cannot create a SwapchainSource for " + sysWmInfo.subsystem + "."); } }