예제 #1
0
 /// <summary>
 /// Create the diplay Form.  can be overriden.
 /// </summary>
 /// <param name="config"></param>
 /// <returns></returns>
 protected virtual Form CreateForm(DisplayWindowConfiguration config)
 {
     return(new RenderForm(config.WindowTitle)
     {
         ClientSize = new System.Drawing.Size(config.Width, config.Height)
     });
 }
예제 #2
0
        protected override void Initialize(DisplayWindowConfiguration displayWindowConfiguration)
        {
            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(displayWindowConfiguration.Width,
                                        displayWindowConfiguration.Height,
                                        new Rational(60, 1),
                                        Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = DisplayHandle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            // Create Device and SwapChain
            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, new [] { FeatureLevel.Level_10_0 }, desc, out _device, out _swapChain);

            // Ignore all windows events
            Factory factory = _swapChain.GetParent <Factory>();

            factory.MakeWindowAssociation(DisplayHandle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            _backBuffer = Texture2D.FromSwapChain <Texture2D>(_swapChain, 0);

            _backBufferView = new RenderTargetView(_device, _backBuffer);
        }
예제 #3
0
        protected override void Initialize(DisplayWindowConfiguration displayWindowConfiguration)
        {
            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(displayWindowConfiguration.Width,
                                        displayWindowConfiguration.Height,
                                        new Rational(60, 1),
                                        Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = DisplayHandle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            // Create Device and SwapChain
            // Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.BgraSupport, new [] { FeatureLevel.Level_10_0 }, desc, out _device, out _swapChain);
            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, desc, out _device, out _swapChain);
            // Ignore all windows events
            Factory factory = _swapChain.GetParent <Factory>();

            factory.MakeWindowAssociation(DisplayHandle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            _backBuffer = Texture2D.FromSwapChain <Texture2D>(_swapChain, 0);

            _backBufferView = new RenderTargetView(_device, _backBuffer);


            _depthBuffer = new Texture2D(Device, new Texture2DDescription()
            {
                Format            = Format.D32_Float_S8X24_UInt,
                ArraySize         = 1,
                MipLevels         = 1,
                Width             = _form.ClientSize.Width,
                Height            = _form.ClientSize.Height,
                SampleDescription = new SampleDescription(1, 0),
                Usage             = ResourceUsage.Default,
                BindFlags         = BindFlags.DepthStencil,
                CpuAccessFlags    = CpuAccessFlags.None,
                OptionFlags       = ResourceOptionFlags.None
            });

            // Create the depth buffer view
            _depthView = new DepthStencilView(Device, _depthBuffer);
        }
예제 #4
0
        protected override void Initialize(DisplayWindowConfiguration displayWindowConfiguration)
        {
            base.Initialize(displayWindowConfiguration);
            Factory2D      = new SharpDX.Direct2D1.Factory();
            _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);
        }
예제 #5
0
        protected override void Initialize(DisplayWindowConfiguration displayWindowConfiguration)
        {
            Factory2D     = new SharpDX.Direct2D1.Factory();
            FactoryDWrite = new SharpDX.DirectWrite.Factory();

            HwndRenderTargetProperties properties = new HwndRenderTargetProperties();

            properties.Hwnd           = DisplayHandle;
            properties.PixelSize      = new SharpDX.Size2(displayWindowConfiguration.Width, displayWindowConfiguration.Height);
            properties.PresentOptions = PresentOptions.None;

            RenderTarget2D = new WindowRenderTarget(Factory2D, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)), properties);

            RenderTarget2D.AntialiasMode = AntialiasMode.PerPrimitive;


            SceneColorBrush = new SolidColorBrush(RenderTarget2D, Color.White);
        }
예제 #6
0
        /// <summary>
        /// Runs the demo.
        /// </summary>
        public void Run(DisplayWindowConfiguration displayWindowConfiguration)
        {
            _displayWindowConfiguration = displayWindowConfiguration ?? new DisplayWindowConfiguration();
            _form = CreateForm(_displayWindowConfiguration);
            Initialize(_displayWindowConfiguration);

            bool isFormClosed   = false;
            bool formIsResizing = false;

            _form.MouseMove  += HandleMouseMove;
            _form.MouseClick += HandleMouseClick;
            _form.MouseDown  += HandleMouseDown;
            _form.MouseUp    += HandleMouseUp;

            _form.KeyDown += HandleKeyDown;
            _form.KeyUp   += HandleKeyUp;



            _form.ResizeBegin += (o, e) => {
                _displayWindowConfiguration.Height = ((Form)o).Height;
                _displayWindowConfiguration.Width  = ((Form)o).Width;
                _isResizing = true;
            };
            _form.ResizeEnd += (o, e) =>
            {
                formIsResizing = false;
                HandleResize(o, e);
            };

            _form.SizeChanged += HandleResize;

            _form.Resize += (o, args) =>
            {
                if (_form.WindowState != _currentFormWindowState)
                {
                    HandleResize(o, args);
                }

                _currentFormWindowState = _form.WindowState;
            };

            _form.ResizeBegin += (o, args) => { formIsResizing = true; };
            _form.ResizeEnd   += (o, args) =>
            {
                formIsResizing = false;
                HandleResize(o, args);
            };

            _form.Closed += (o, args) => { isFormClosed = true; };

            LoadContent();

            clock.Start();
            BeginRun();
            RenderLoop.Run(_form, () =>
            {
                if (isFormClosed)
                {
                    return;
                }

                Update();
                if (!formIsResizing)
                {
                    Render();
                }
            });

            UnloadContent();
            EndRun();

            // Dispose explicity
            Dispose();
        }
예제 #7
0
 /// <summary>
 ///   In a derived class, implements logic to initialize the sample.
 /// </summary>
 protected abstract void Initialize(DisplayWindowConfiguration displayWindowConfiguration);