static public void D2dRelease(Direct2DInformationW info) { info._bufferBack?.Dispose(); info.View?.Dispose(); info.ImagingFacy?.Dispose(); info.d2DDevice?.Dispose(); info.D2DFacy?.Dispose(); info.dxgiDevice?.Dispose(); info.d3DDevice?.Dispose(); info.backbuffer.Dispose(); info.swapChain.Dispose(); }
static public Direct2DInformationW D2dInit(Size size, IntPtr handle, bool isfullwindow) { Direct2DInformationW result = new Direct2DInformationW(); result.d3DDevice = new SharpDX.Direct3D11.Device(DriverType.Hardware, DeviceCreationFlags.BgraSupport); var __dxgiDevice = result.d3DDevice.QueryInterface <Device>(); result.dxgiDevice = __dxgiDevice.QueryInterface <SharpDX.DXGI.Device2>(); __dxgiDevice.Dispose(); result.D2DFacy = new D2DFactory(); result.d2DDevice = new SharpDX.Direct2D1.Device(result.D2DFacy, result.dxgiDevice); result.View = new DeviceContext(result.d2DDevice, DeviceContextOptions.EnableMultithreadedOptimizations); result.ImagingFacy = new ImagingFactory(); result.swapChainDesc = new SwapChainDescription1(); result.swapChainDesc.Width = size.Width; // use automatic sizing result.swapChainDesc.Height = size.Height; result.swapChainDesc.Format = Format.B8G8R8A8_UNorm; // this is the most common swapchain format result.swapChainDesc.Stereo = false; result.swapChainDesc.SampleDescription = new SampleDescription() { Count = 1, Quality = 0 }; result.swapChainDesc.Usage = Usage.RenderTargetOutput; result.swapChainDesc.BufferCount = 2; // use double buffering to enable flip result.swapChainDesc.Scaling = Scaling.None; result.swapChainDesc.SwapEffect = SwapEffect.FlipSequential; // all apps must use this SwapEffect result.swapChainDesc.Flags = SwapChainFlags.AllowModeSwitch; var vb_ns = result.dxgiDevice.GetParent <Adapter>().GetParent <SharpDX.DXGI.Factory2>(); result.swapChain = new SwapChain1(vb_ns, result.d3DDevice, handle, ref result.swapChainDesc); RawBool isFulls; Output opt; result.swapChain.GetFullscreenState(out isFulls, out opt); if (!isfullwindow && !isFulls) { ModeDescription res = new ModeDescription(); res.Format = Format.B8G8R8A8_UNorm; res.Height = size.Height; res.Width = size.Width; res.Scaling = DisplayModeScaling.Stretched; res.RefreshRate = Rational.Empty; res.ScanlineOrdering = DisplayModeScanlineOrder.LowerFieldFirst; result.swapChain.ResizeTarget(ref res); result.swapChain.SetFullscreenState(!isfullwindow, opt); result.swapChain.ResizeBuffers(2, size.Width, size.Height, Format.B8G8R8A8_UNorm, SwapChainFlags.AllowModeSwitch); } result.backbuffer = Surface.FromSwapChain(result.swapChain, 0); result._bufferBack = new D2DBitmap(result.View, result.backbuffer); result.View.Target = result._bufferBack; result.View.AntialiasMode = AntialiasMode.Aliased; vb_ns.Dispose(); return(result); }