예제 #1
0
        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();
            }
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }