public Swapchain CreateSwapchain() { Swapchain swapchain; if (Widget.Backend == GraphicsBackend.OpenGL) { swapchain = Widget.GraphicsDevice.MainSwapchain; } else { // To embed Veldrid in an Eto control, these platform-specific // versions of CreateSwapchain use the technique outlined here: // // https://github.com/mellinoe/veldrid/issues/155 // var source = SwapchainSource.CreateXlib( X11Interop.gdk_x11_display_get_xdisplay(Control.Display.Handle), X11Interop.gdk_x11_window_get_xid(Control.Window.Handle)); var renderSize = RenderSize; swapchain = Widget.GraphicsDevice.ResourceFactory.CreateSwapchain( new SwapchainDescription( source, (uint)renderSize.Width, (uint)renderSize.Height, Widget.GraphicsDeviceOptions.SwapchainDepthFormat, Widget.GraphicsDeviceOptions.SyncToVerticalBlank, Widget.GraphicsDeviceOptions.SwapchainSrgbFormat)); } return(swapchain); }
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 + "."); } }