Ejemplo n.º 1
0
        protected virtual void Initialize(Configuration config)
        {
            var desc = new SwapChainDescription()
            {
                BufferCount       = 1,
                ModeDescription   = new ModeDescription(config.Width, config.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = DisplayHandle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            SharpDX.Direct3D11.Device.CreateWithSwapChain(
                DriverType.Hardware, DeviceCreationFlags.BgraSupport,
                new[] { SharpDX.Direct3D.FeatureLevel.Level_10_0 }, desc, out device, out swapChain);

            SharpDX.DXGI.Factory factory = swapChain.GetParent <SharpDX.DXGI.Factory>();
            factory.MakeWindowAssociation(DisplayHandle, WindowAssociationFlags.IgnoreAll);

            backBuffer     = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            backBufferView = new RenderTargetView(device, backBuffer);



            Factory2D = new SharpDX.Direct2D1.Factory();
            using (var surface = BackBuffer.QueryInterface <Surface>()) {
                RenderTarget2D = new RenderTarget(Factory2D, surface,
                                                  new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            }
            RenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;

            FactoryDWrite   = new SharpDX.DirectWrite.Factory();
            SceneColorBrush = new SolidColorBrush(RenderTarget2D, SharpDX.Color.White);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        private void ResizeBuffers()
        {
            // Dispose
            if (mBackBuffer != null)
            {
                mBackBuffer.Dispose();
            }
            if (mBackBufferView != null)
            {
                mBackBufferView.Dispose();
            }
            if (mRenderTarget2D != null)
            {
                mRenderTarget2D.Dispose();
            }

            // Resize swap chain
            mSwapChain.ResizeBuffers(mSwapChain.Description.BufferCount, mScreenWidth, mScreenHeight, mSwapChain.Description.ModeDescription.Format, mSwapChain.Description.Flags);

            // Re-create
            mBackBuffer     = Texture2D.FromSwapChain <Texture2D>(mSwapChain, 0);
            mBackBufferView = new RenderTargetView(mDevice, mBackBuffer);
            using (var surface = BackBuffer.QueryInterface <DXGI.Surface>())
            {
                mRenderTarget2D = new RenderTarget(mFactory2D, surface, new RenderTargetProperties(new PixelFormat(DXGI.Format.Unknown, AlphaMode.Premultiplied)));
            }
            mRenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Handles resizing the display Window
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void HandleResize(object sender, EventArgs e)
        {
            if (_form.WindowState == FormWindowState.Minimized)
            {
                return;
            }
            //var form = (Form) sender;
            //unbinds everything
            _device.ImmediateContext.ClearState();

            UnloadContent();

            RenderTarget2D.Dispose();
            _backBufferView?.Dispose();
            _backBuffer.Dispose();
            _surface.Dispose();

            _swapChain.ResizeBuffers(1,
                                     _form.ClientSize.Width,
                                     _form.ClientSize.Height,
                                     Format.Unknown,
                                     SwapChainFlags.AllowModeSwitch);

            _backBuffer     = Texture2D.FromSwapChain <Texture2D>(_swapChain, 0);
            _backBufferView = new RenderTargetView(_device, _backBuffer);

            _surface       = BackBuffer.QueryInterface <Surface>();
            RenderTarget2D = new RenderTarget(Factory2D,
                                              _surface,
                                              new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));


            LoadContent();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 类初始化函数
        /// </summary>
        /// <param name="formName"></param>
        public Direct2D(string formName = "Default")
        {
            _keybord = new Keyboard(new DirectInput());
            _keybord.Acquire();

            RenderQuene = new List <RenderQuene_2D>();
            Resources   = new List <Resource_2D>();

            Mainform = new DrawFrom(formName);        //创建一个渲染窗口
            Mainform.AllowUserResizing = false;       //设置不可调整大小
            Mainform.KeyCallBackSet(KeyBordCallBack); //设置键盘回调
            Mainform.MouseCallBackSet(MouseCallBack); //设置鼠标回调


            CreateSwapChain(CreateDesc(Mainform));                                                //创建设备和交换链
            D2dFactory    = new SharpDX.Direct2D1.Factory();                                      //Direct2D1.Factory 是D2D渲染工厂
            FactoryDWrite = new SharpDX.DirectWrite.Factory();                                    //RW工厂
            DXGIFactory   = SwapChain.GetParent <SharpDX.DXGI.Factory>();                         //DXGI.Factory 是基础渲染工厂
            DXGIFactory.MakeWindowAssociation(Mainform.Handle, WindowAssociationFlags.IgnoreAll); //关联窗口 并忽略所有事件

            // 从backbuffer新建renderTargetView
            BackBuffer     = Texture2D.FromSwapChain <Texture2D>(SwapChain, 0);
            BackBufferView = new RenderTargetView(D2Ddevice, BackBuffer);
            using (Surface surface = BackBuffer.QueryInterface <Surface>())
            {
                D2dRenderTarget = new RenderTarget(D2dFactory, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            }

            DefaultBrush = new SolidColorBrush(D2dRenderTarget, Color.White);
        }
Ejemplo n.º 5
0
        public D2DFigure()
        {
            Factory2D = new SharpDX.Direct2D1.Factory();

            using (var surface = BackBuffer.QueryInterface <Surface>())
            {
                RenderTarget2D = new RenderTarget(Factory2D, surface,
                                                  new RenderTargetProperties(new PixelFormat(Format.Unknown, SharpDX.Direct2D1.AlphaMode.Premultiplied)));
            }
            RenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;
        }
        protected override void InternalInitialize()
        {
            base.InternalInitialize();

            _factory2D     = new Factory();
            _factoryDWrite = new SharpDX.DirectWrite.Factory();

            using (var surface = BackBuffer.QueryInterface <Surface>())
            {
                _renderTarget2D = new RenderTarget(_factory2D, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            }
            _renderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;
        }
Ejemplo n.º 7
0
        protected override void Initialize(Configuration configuration)
        {
            base.Initialize(configuration);
            Factory2D = new Factory();
            using (var surface = BackBuffer.QueryInterface <Surface>())
            {
                _renderTarget2D = new RenderTarget(Factory2D, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            }
            _renderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;

            FactoryDWrite = new SharpDX.DirectWrite.Factory();

            SceneColorBrush = new SolidColorBrush(_renderTarget2D, Color.White);
        }
        protected override void Initialize(DemoConfiguration demoConfiguration)
        {
            base.Initialize(demoConfiguration);
            Factory2D = new SharpDX.Direct2D1.Factory();
            Surface surface = BackBuffer.QueryInterface <Surface>();

            RenderTarget2D = new RenderTarget(Factory2D, surface,
                                              new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            RenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;

            FactoryDWrite = new SharpDX.DirectWrite.Factory();

            surface.Release();
            SceneColorBrush = new SolidColorBrush(RenderTarget2D, new Color4(1, 1, 1, 1));
        }
Ejemplo n.º 9
0
        protected virtual void Initialize2D()
        {
#if DEBUG
            Factory2D = new SharpDX.Direct2D1.Factory(FactoryType.SingleThreaded, DebugLevel.Information);
#else
            Factory2D = new SharpDX.Direct2D1.Factory(FactoryType.SingleThreaded);
#endif
            using (var surface = BackBuffer.QueryInterface <Surface>())
            {
                RenderTarget = new RenderTarget(Factory2D, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));
            }
            RenderTarget.AntialiasMode = AntialiasMode.PerPrimitive;

            FactoryDWrite = new SharpDX.DirectWrite.Factory();

            SceneColorBrush = new SolidColorBrush(RenderTarget, Color.White);
        }
Ejemplo n.º 10
0
        /// <summary>
        ///
        /// </summary>
        private void InitializeD2D()
        {
            mFactory2D = new SharpDX.Direct2D1.Factory();
            using (var surface = BackBuffer.QueryInterface <DXGI.Surface>())
            {
                mRenderTarget2D = new RenderTarget(mFactory2D, surface, new RenderTargetProperties(new PixelFormat(DXGI.Format.Unknown, AlphaMode.Premultiplied)));
            }
            mRenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;

            mFactoryDWrite = new SharpDX.DirectWrite.Factory();

            SceneColorBrush = new SolidColorBrush(mRenderTarget2D, Color.White);

            // Initialize fonts
            foreach (eTextSize size in Enum.GetValues(typeof(eTextSize)))
            {
                mTextFormats.Add(size, new SharpDX.DirectWrite.TextFormat(mFactoryDWrite, "Arial", (int)size));
            }
        }
Ejemplo n.º 11
0
        protected override void WindowResize(int width, int height)
        {
            base.WindowResize(width, height);


            Device.ImmediateContext.ClearState();

            _renderTarget2D.Dispose();
            BackBuffer.Dispose();
            RenderView.Dispose();
            _surface?.Dispose();

            SwapChain.ResizeBuffers(1, 0, 0, Format.R8G8B8A8_UNorm, SwapChainFlags.None);

            BackBuffer      = Resource.FromSwapChain <Texture2D>(SwapChain, 0);
            RenderView      = new RenderTargetView(Device, BackBuffer);
            _surface        = BackBuffer.QueryInterface <Surface>();
            _renderTarget2D = new RenderTarget(Factory2D, _surface,
                                               new RenderTargetProperties(new PixelFormat(Format.R8G8B8A8_UNorm, AlphaMode.Premultiplied)));
        }
Ejemplo n.º 12
0
        protected virtual void CreateResource()
        {
            //***
            using (var surface = BackBuffer.QueryInterface<DXGI.Surface>())
            {

                renderTarget = new D2D.RenderTarget(DirectX.Factory2D, surface, new D2D.RenderTargetProperties()
                {
                    PixelFormat = new D2D.PixelFormat(DXGI.Format.Unknown, D2D.AlphaMode.Premultiplied),

                });

            }
            renderTarget.AntialiasMode = D2D.AntialiasMode.PerPrimitive;
            
            /***/

            /***
            using (var surface = BackBuffer.QueryInterface<DXGI.Surface>())
            {
                deviceContext = new D2D.DeviceContext(surface, new SharpDX.Direct2D1.CreationProperties()
                {
                    DebugLevel = SharpDX.Direct2D1.DebugLevel.Information,
                    Options = SharpDX.Direct2D1.DeviceContextOptions.None,
                    ThreadingMode = SharpDX.Direct2D1.ThreadingMode.SingleThreaded
                }
                );
                bitmap = new SharpDX.Direct2D1.Bitmap1(deviceContext, surface, new SharpDX.Direct2D1.BitmapProperties1()
                {
                    BitmapOptions = SharpDX.Direct2D1.BitmapOptions.Target | SharpDX.Direct2D1.BitmapOptions.CannotDraw,
                    PixelFormat = new SharpDX.Direct2D1.PixelFormat(DXGI.Format.B8G8R8A8_UNorm, SharpDX.Direct2D1.AlphaMode.Ignore),
                    DpiX = (float)Dpi,
                    DpiY = (float)Dpi
                }
                );
                deviceContext.Target = bitmap;
            }
            
            deviceContext.AntialiasMode = D2D.AntialiasMode.PerPrimitive;
            /***/
        }