public static unsafe int CreateDxgiSwapchain ( this INativeWindow window, IDXGIFactory2 *factory, IUnknown *pDevice, SwapChainDesc1 *pDesc, SwapChainFullscreenDesc *pFullscreenDesc, IDXGIOutput *pRestrictToOutput, IDXGISwapChain1 **ppSwapChain ) { if (window.Win32.HasValue) { return(factory->CreateSwapChainForHwnd (pDevice, window.Win32.Value.Hwnd, pDesc, pFullscreenDesc, pRestrictToOutput, ppSwapChain)); } if (window.WinRT.HasValue) { return(factory->CreateSwapChainForCoreWindow (pDevice, (IUnknown *)window.WinRT.Value, pDesc, pRestrictToOutput, ppSwapChain)); } Throw(); return(-1);
internal SwapChainOutput(GraphicsDevice device, Size size, IOutputOwner owner, OutputConfiguration desc) : base(device, desc) { _device = device; var swapChainDesc = CreateDesc(desc, size); if (UseSeperatePresentQueue()) { _presentQueue = new CommandQueue(device, ExecutionContext.Graphics, enableTdr: true); _presentQueueIsSeperate = true; } else { _presentQueue = device.GraphicsQueue; } using var factory = CreateFactory(); using UniqueComPtr <IDXGISwapChain1> swapChain = default; var pQueue = (IUnknown *)_presentQueue.GetQueue(); var ppChain = (IDXGISwapChain1 **)&swapChain; IDXGIOutput *pRestrict = null; Guard.ThrowIfFailed( owner.Type switch { OutputType.Hwnd => factory.Ptr->CreateSwapChainForHwnd( pQueue, owner.GetOutput(), &swapChainDesc, null, pRestrict, ppChain ), OutputType.ICoreWindow => factory.Ptr->CreateSwapChainForCoreWindow( pQueue, (IUnknown *)owner.GetOutput(), &swapChainDesc, pRestrict, ppChain ), OutputType.SwapChainPanel => factory.Ptr->CreateSwapChainForComposition( pQueue, &swapChainDesc, pRestrict, ppChain ), _ => E_INVALIDARG, // this way we fail if weird enum arg provided }
public int CreateSwapChainForComposition([NativeTypeName("IUnknown *")] IUnknown *pDevice, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pRestrictToOutput, [NativeTypeName("IDXGISwapChain1 **")] IDXGISwapChain1 **ppSwapChain) { return(((delegate * unmanaged <IDXGIFactory2 *, IUnknown *, DXGI_SWAP_CHAIN_DESC1 *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[24]))((IDXGIFactory2 *)Unsafe.AsPointer(ref this), pDevice, pDesc, pRestrictToOutput, ppSwapChain)); }
public int CreateSwapChainForHwnd([NativeTypeName("IUnknown *")] IUnknown *pDevice, [NativeTypeName("HWND")] IntPtr hWnd, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, [NativeTypeName("const DXGI_SWAP_CHAIN_FULLSCREEN_DESC *")] DXGI_SWAP_CHAIN_FULLSCREEN_DESC *pFullscreenDesc, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pRestrictToOutput, [NativeTypeName("IDXGISwapChain1 **")] IDXGISwapChain1 **ppSwapChain) { return(((delegate * unmanaged <IDXGIFactory2 *, IUnknown *, IntPtr, DXGI_SWAP_CHAIN_DESC1 *, DXGI_SWAP_CHAIN_FULLSCREEN_DESC *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[15]))((IDXGIFactory2 *)Unsafe.AsPointer(ref this), pDevice, hWnd, pDesc, pFullscreenDesc, pRestrictToOutput, ppSwapChain)); }
public HRESULT SetFullscreenState(BOOL Fullscreen, IDXGIOutput *pTarget) { return(((delegate * unmanaged <IDXGISwapChain4 *, BOOL, IDXGIOutput *, int>)(lpVtbl[10]))((IDXGISwapChain4 *)Unsafe.AsPointer(ref this), Fullscreen, pTarget)); }
public int SetFullscreenState([NativeTypeName("BOOL")] int Fullscreen, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pTarget) { return(((delegate * stdcall <IDXGISwapChain4 *, int, IDXGIOutput *, int>)(lpVtbl[10]))((IDXGISwapChain4 *)Unsafe.AsPointer(ref this), Fullscreen, pTarget)); }
public HRESULT CreateSwapChainForCoreWindow(IUnknown *pDevice, IUnknown *pWindow, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, IDXGIOutput *pRestrictToOutput, IDXGISwapChain1 **ppSwapChain) { return(((delegate * unmanaged <IDXGIFactory4 *, IUnknown *, IUnknown *, DXGI_SWAP_CHAIN_DESC1 *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[16]))((IDXGIFactory4 *)Unsafe.AsPointer(ref this), pDevice, pWindow, pDesc, pRestrictToOutput, ppSwapChain)); }
public HRESULT CreateDecodeSwapChainForCompositionSurfaceHandle(IUnknown *pDevice, HANDLE hSurface, DXGI_DECODE_SWAP_CHAIN_DESC *pDesc, IDXGIResource *pYuvDecodeBuffers, IDXGIOutput *pRestrictToOutput, IDXGIDecodeSwapChain **ppSwapChain) { return(((delegate * unmanaged <IDXGIFactoryMedia *, IUnknown *, HANDLE, DXGI_DECODE_SWAP_CHAIN_DESC *, IDXGIResource *, IDXGIOutput *, IDXGIDecodeSwapChain **, int>)(lpVtbl[4]))((IDXGIFactoryMedia *)Unsafe.AsPointer(ref this), pDevice, hSurface, pDesc, pYuvDecodeBuffers, pRestrictToOutput, ppSwapChain)); }
public HRESULT CreateSwapChainForCompositionSurfaceHandle(IUnknown *pDevice, HANDLE hSurface, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, IDXGIOutput *pRestrictToOutput, IDXGISwapChain1 **ppSwapChain) { return(((delegate * unmanaged <IDXGIFactoryMedia *, IUnknown *, HANDLE, DXGI_SWAP_CHAIN_DESC1 *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[3]))((IDXGIFactoryMedia *)Unsafe.AsPointer(ref this), pDevice, hSurface, pDesc, pRestrictToOutput, ppSwapChain)); }
public int CreateDecodeSwapChainForCompositionSurfaceHandle([NativeTypeName("IUnknown *")] IUnknown *pDevice, [NativeTypeName("HANDLE")] IntPtr hSurface, [NativeTypeName("DXGI_DECODE_SWAP_CHAIN_DESC *")] DXGI_DECODE_SWAP_CHAIN_DESC *pDesc, [NativeTypeName("IDXGIResource *")] IDXGIResource *pYuvDecodeBuffers, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pRestrictToOutput, [NativeTypeName("IDXGIDecodeSwapChain **")] IDXGIDecodeSwapChain **ppSwapChain) { return(((delegate * stdcall <IDXGIFactoryMedia *, IUnknown *, IntPtr, DXGI_DECODE_SWAP_CHAIN_DESC *, IDXGIResource *, IDXGIOutput *, IDXGIDecodeSwapChain **, int>)(lpVtbl[4]))((IDXGIFactoryMedia *)Unsafe.AsPointer(ref this), pDevice, hSurface, pDesc, pYuvDecodeBuffers, pRestrictToOutput, ppSwapChain)); }
public int CreateSwapChainForCompositionSurfaceHandle([NativeTypeName("IUnknown *")] IUnknown *pDevice, [NativeTypeName("HANDLE")] IntPtr hSurface, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pRestrictToOutput, [NativeTypeName("IDXGISwapChain1 **")] IDXGISwapChain1 **ppSwapChain) { return(((delegate * stdcall <IDXGIFactoryMedia *, IUnknown *, IntPtr, DXGI_SWAP_CHAIN_DESC1 *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[3]))((IDXGIFactoryMedia *)Unsafe.AsPointer(ref this), pDevice, hSurface, pDesc, pRestrictToOutput, ppSwapChain)); }
public int CreateSwapChainForCoreWindow([NativeTypeName("IUnknown *")] IUnknown *pDevice, [NativeTypeName("IUnknown *")] IUnknown *pWindow, [NativeTypeName("const DXGI_SWAP_CHAIN_DESC1 *")] DXGI_SWAP_CHAIN_DESC1 *pDesc, [NativeTypeName("IDXGIOutput *")] IDXGIOutput *pRestrictToOutput, [NativeTypeName("IDXGISwapChain1 **")] IDXGISwapChain1 **ppSwapChain) { return(((delegate * stdcall <IDXGIFactory3 *, IUnknown *, IUnknown *, DXGI_SWAP_CHAIN_DESC1 *, IDXGIOutput *, IDXGISwapChain1 **, int>)(lpVtbl[16]))((IDXGIFactory3 *)Unsafe.AsPointer(ref this), pDevice, pWindow, pDesc, pRestrictToOutput, ppSwapChain)); }