Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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 + ".");
            }
        }
Esempio n. 3
0
        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 + ".");
            }
        }