/// <summary> /// Rebuilds the swap chain and render targets. /// </summary> protected void UpdatePresenter() { PresenterReady = false; // release our buffers since we are updating the swap chain RenderTarget2D.Dispose(); DxgiSurface.Dispose(); RenderTargetView.Dispose(); _backBuffer.Dispose(); // resize swapchain _swapChain.ResizeBuffers(1, Size.Width, Size.Height, Format.R8G8B8A8_UNorm, SwapChainFlags.None); // recreate the buffers _backBuffer = Resource.FromSwapChain <Texture2D>(_swapChain, 0); RenderTargetView = new RenderTargetView(_device, _backBuffer); DxgiSurface = _backBuffer.QueryInterface <Surface>(); RenderTarget2D = new RenderTarget(Factory2D, DxgiSurface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied))); RenderTarget2D.AntialiasMode = AntialiasMode; PresenterReady = true; Brushes.Cleanup(); Fonts.Cleanup(); IsDirty = true; foreach (IRenderComponent component in Layers) { component.PresenterReset(); } }
public D2D1RenderTarget CreateDxgiSurfaceRenderTarget(DxgiSurface dxgiSurface, D2D1RenderTargetProperties renderTargetProperties) { if (dxgiSurface == null) { throw new ArgumentNullException("dxgiSurface"); } ID2D1RenderTarget renderTarget; this.factory.CreateDxgiSurfaceRenderTarget((IDxgiSurface)dxgiSurface.Handle, ref renderTargetProperties, out renderTarget); return(new D2D1RenderTargetBase(renderTarget)); }