protected void ResizeSwapChain() { Device.PrintLiveObjects(); Debug.WriteLine("===="); foreach (var resource in Device.PresenterResources) { resource.Dispose(); } for (int i = 0; i < BackBufferCount; i++) { BackBuffers[i].Dispose(); } BackBuffer.Dispose(); Device.PrintLiveObjects(); NativeSwapChain.ResizeBuffers( BackBufferCount, Description.Width, Description.Height, Format.B8G8R8A8_UNorm, SwapChainFlags.None); BackBuffer.Initialize(NativeSwapChain.GetBackBuffer <Resource>(BackBufferIndex)); for (int i = 0; i < BackBufferCount; i++) { BackBuffers[i].Initialize(NativeSwapChain.GetBackBuffer <Resource>(i)); } foreach (var resource in Device.PresenterResources) { resource.Recreate(); } }
public void Present() { NativeSwapChain.Present(0, PresentFlags.None); BackBufferIndex = NativeSwapChain.CurrentBackBufferIndex; BackBuffer.Resource.Dispose(); BackBuffer.Initialize(NativeSwapChain.GetBackBuffer <Resource>(BackBufferIndex)); compiledCommandLists.ForEach(c => c.Release()); compiledCommandLists.Clear(); }
public void Initialize() { // Lets create a present command queue var queueDesc = new CommandQueueDescription(CommandListType.Direct); NativeCommandQueue = Device.NativeDevice.CreateCommandQueue(queueDesc); // Descirbe and create the swap chain using (var factory = new Factory4()) { var width = Description.Width; var height = Description.Height; var swapChainDescription = new SwapChainDescription { BufferCount = BackBufferCount, ModeDescription = new ModeDescription(width, height, new Rational(60, 1), Format.B8G8R8A8_UNorm), Usage = Usage.RenderTargetOutput, SwapEffect = SwapEffect.FlipDiscard, OutputHandle = Description.WindowHandle, Flags = SwapChainFlags.None, SampleDescription = new SampleDescription(1, 0), IsWindowed = true }; using (var tempSwapChain = new SharpDX.DXGI.SwapChain(factory, NativeCommandQueue, swapChainDescription)) { NativeSwapChain = tempSwapChain.QueryInterface <SwapChain3>(); BackBufferIndex = NativeSwapChain.CurrentBackBufferIndex; } } // We need now to retrieve the back buffers: // 1) We need a heap to store the views BackBuffers = new Texture[BackBufferCount]; for (int i = 0; i < BackBufferCount; i++) { BackBuffers[i] = new Texture(Device); BackBuffers[i].Initialize(NativeSwapChain.GetBackBuffer <Resource>(i)); } BackBuffer = new Texture(Device); BackBuffer.Initialize(NativeSwapChain.GetBackBuffer <Resource>(BackBufferIndex)); CreateDepthStencilBuffer(); Device.PrintLiveObjects(); }