Exemplo n.º 1
0
        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);
Exemplo n.º 2
0
        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
            }
Exemplo n.º 3
0
 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));
 }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
 public HRESULT SetFullscreenState(BOOL Fullscreen, IDXGIOutput *pTarget)
 {
     return(((delegate * unmanaged <IDXGISwapChain4 *, BOOL, IDXGIOutput *, int>)(lpVtbl[10]))((IDXGISwapChain4 *)Unsafe.AsPointer(ref this), Fullscreen, pTarget));
 }
Exemplo n.º 6
0
 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));
 }
Exemplo n.º 12
0
 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));
 }