Example #1
0
        private void Resize(ResizeParameters args)
        {
            Utilities.Dispose(ref _renderView1);
            Utilities.Dispose(ref _depthStencilView);

            _d3DDeviceContext.ClearState();

            _swapChain4.ResizeBuffers(
                args.BufferCount, args.Width, args.Height, Format.Unknown, args.SwapChainFlags);

            using (Texture2D backBuffer = _swapChain4.GetBackBuffer <Texture2D>(0))
                using (RenderTargetView renderView = new RenderTargetView(_d3DDevice5, backBuffer))
                {
                    _renderView1 = renderView.QueryInterface <RenderTargetView1>();
                }

            using (Texture2D depthBuffer = new Texture2D(
                       _d3DDevice5,
                       new Texture2DDescription
            {
                Format = Format.D24_UNorm_S8_UInt,
                ArraySize = 1,
                MipLevels = 1,
                Width = args.Width,
                Height = args.Height,
                SampleDescription = _swapChain4.Description.SampleDescription,
                BindFlags = BindFlags.DepthStencil,
                CpuAccessFlags = CpuAccessFlags.None,
                OptionFlags = ResourceOptionFlags.None,
                Usage = ResourceUsage.Default
            }))
            {
                _depthStencilView = new DepthStencilView(
                    _d3DDevice5, depthBuffer, new DepthStencilViewDescription
                {
                    Dimension = _swapChain4.Description.SampleDescription.Count > 1 ||
                                _swapChain4.Description.SampleDescription.Quality > 0
                            ? DepthStencilViewDimension.Texture2DMultisampled
                            : DepthStencilViewDimension.Texture2D
                });
            }

            _d3DDeviceContext.Rasterizer.SetViewport(Viewport = new Viewport(0, 0, args.Width, args.Height));

            SetRenderTarget(null);

            ResizeFinished?.Invoke(Viewport);
        }