Beispiel #1
0
        public Backbuffer(D3D11Device device, Window window)
        {
            m_swapchain  = device.CreateSwapchain(window.WindowHandle);
            m_backbuffer = m_swapchain.CreateBitmap();

            m_dispatcher.RegisterInterface(typeof(IDrawProcessor), m_backbuffer);
        }
Beispiel #2
0
        public void Initialize()
        {
            SwapChainDescription scdesc = new SwapChainDescription()
            {
                BufferCount = 1, IsWindowed = true, Flags = SwapChainFlags.None, ModeDescription = new ModeDescription(Width, Height, new Rational(60, 1), Format.B8G8R8A8_UNorm), OutputHandle = Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput
            };
            DeviceCreationFlags flags = DeviceCreationFlags.BgraSupport;

#if DEBUG
            flags |= DeviceCreationFlags.Debug;
#endif
            SharpDX.Direct3D11.Device.CreateWithSwapChain(SharpDX.Direct3D.DriverType.Hardware, flags, scdesc, out SharpDX.Direct3D11.Device device, out SwapChain sc);
            DXGISwapChain = sc;
            D3DDevice     = device;
            D3DContext    = D3DDevice.ImmediateContext;

            Backbuffer    = DXGISwapChain.GetBackBuffer <Texture2D>(0);
            BackbufferRTV = new RenderTargetView(D3DDevice, Backbuffer);
            D3DContext.OutputMerger.SetRenderTargets(BackbufferRTV);

            Screen.OnCreate();

            D3DContext.Rasterizer.SetViewport(new Viewport(0, 0, Width, Height));
            Screen.OnCreateBuffers();

            watch = new System.Diagnostics.Stopwatch();
            watch.Start();

            Application.Idle += OnTick;
        }
Beispiel #3
0
        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);

            if (D3DContext == null)
            {
                return;
            }

            if (Width == 0 || Height == 0)
            {
                return;
            }

            D3DContext.OutputMerger.SetRenderTargets((RenderTargetView)null);
            BackbufferRTV.Dispose();
            Backbuffer.Dispose();
            Screen.OnDisposeBuffers();

            D3DContext.Rasterizer.SetViewport(new Viewport(0, 0, Width, Height));
            DXGISwapChain.ResizeBuffers(1, Width, Height, Format.Unknown, SwapChainFlags.None);
            Screen.OnResizeBuffers();

            Backbuffer    = DXGISwapChain.GetBackBuffer <Texture2D>(0);
            BackbufferRTV = new RenderTargetView(D3DDevice, Backbuffer);
            D3DContext.OutputMerger.SetRenderTargets(BackbufferRTV);
            Screen.OnCreateBuffers();
        }
Beispiel #4
0
        public void Destroy()
        {
            Application.Idle -= OnTick;

            Screen.OnDisposeBuffers();

            Screen.OnDispose();

            BackbufferRTV.Dispose();

            D3DDevice.Dispose();
            DXGISwapChain.Dispose();
        }
Beispiel #5
0
        public void Dispose()
        {
            if (m_backbuffer != null)
            {
                m_backbuffer.Dispose();
                m_backbuffer = null;
            }

            if (m_swapchain != null)
            {
                m_swapchain.Dispose();
                m_swapchain = null;
            }
        }