public void Initialize(D3D11RenderBackend backend)
        {
            RenderBackend = backend;
            if (RT2D == null)
            {
                return;
            }

            m_HistoryColorBrush = ToDispose(new SolidColorBrush(RT2D, Color.White));
            m_ErrorColorBrush   = ToDispose(new SolidColorBrush(RT2D, Color.Red));
            m_CommandColorBrush = ToDispose(new SolidColorBrush(RT2D, Color.Yellow));

            m_TextFormat = ToDispose(new TextFormat(FactoryDWrite, "Roboto", 15)
            {
                TextAlignment = TextAlignment.Leading, ParagraphAlignment = ParagraphAlignment.Near
            });
            m_FPSTextFormat = ToDispose(new TextFormat(FactoryDWrite, "Roboto", 20)
            {
                TextAlignment = TextAlignment.Trailing, ParagraphAlignment = ParagraphAlignment.Near
            });

            m_RectangleGeometry = ToDispose(new RoundedRectangleGeometry(RenderBackend.DisplayRef.Factory2D, new RoundedRectangle()
            {
                RadiusX = 0,
                RadiusY = 0,
                Rect    = new RectangleF(0, 0, 500, 1200)
            }));

            m_TextLayout        = ToDispose(new TextLayout(FactoryDWrite, "", m_TextFormat, 500, 20));
            m_HistoryTextLayout = ToDispose(new TextLayout(FactoryDWrite, "", m_TextFormat, 500, 200));
            m_CaretTextLayout   = ToDispose(new TextLayout(FactoryDWrite, "", m_TextFormat, 500, 20));

            m_SolidColorBrush = ToDispose(new SolidColorBrush(RT2D, new Color(new Vector4(0.7f, 0.7f, 0.7f, 0.6f))));
            m_FPSTextLayout   = ToDispose(new TextLayout(FactoryDWrite, "", m_FPSTextFormat, 100, 100));
        }
        public override bool HitTest(Point2F point)
        {
            RoundedRectangleGeometry g = d2DFactory.CreateRoundedRectangleGeometry(rect);
            bool ret = g.FillContainsPoint(point, 1);

            g.Dispose();
            return(ret);
        }
Exemple #3
0
        public void Initialize(Presenter presenter)
        {
            // https://msdn.microsoft.com/en-us/library/windows/desktop/mt186590(v=vs.85).aspx
            Presenter  = presenter;
            Device3D11 = Device3D11.CreateFromDirect3D12(
                Device.NativeDevice,
                DeviceCreationFlags.BgraSupport,// | DeviceCreationFlags.Debug,
                null,
                null,
                presenter.NativeCommandQueue);

            DeviceContext3D = Device3D11.ImmediateContext;
            Device3D        = Device3D11.QueryInterface <Device3D>();

            // create d2d/directwrite
            using (var factory = new Factory(FactoryType.SingleThreaded))
            {
                Factory = factory.QueryInterface <Factory1>();
            }


            RoundedRectangleGeometry = new RoundedRectangleGeometry(
                Factory,
                new RoundedRectangle()
            {
                RadiusX = 32,
                RadiusY = 32,
                Rect    = new RectangleF(128, 128, 500 - 128 * 2, 500 - 128 * 2)
            });


            // direct write
            FactoryDW      = new FactoryDW(SharpDX.DirectWrite.FactoryType.Shared);
            FontLoader     = new ResourceFontLoader(FactoryDW, @"Fonts");
            FontCollection = new FontCollection(FactoryDW, FontLoader, FontLoader.Key);

            TextFormat = new TextFormat(
                FactoryDW,
                "Material-Design-Iconic-Font",
                FontCollection,
                SharpDX.DirectWrite.FontWeight.Normal,
                FontStyle.Normal,
                FontStretch.Normal,
                30);
            TextFormat.TextAlignment      = TextAlignment.Leading;
            TextFormat.ParagraphAlignment = ParagraphAlignment.Near;

            DeviceContextOptions deviceOptions = DeviceContextOptions.None;

            using (var deviceGI = Device3D.QueryInterface <DeviceGI>())
            {
                Device2D      = new Device(Factory, deviceGI);
                DeviceContext = new DeviceContext(Device2D, deviceOptions);
            }

            DesktopDpi = Factory.DesktopDpi;
            InitializePresentable(Device);
        }
Exemple #4
0
        private static void Main()
        {
            var wicFactory = new ImagingFactory();
            var d2dFactory = new SharpDX.Direct2D1.Factory();

            string    filename = "output.jpg";
            const int width    = 512;
            const int height   = 512;

            var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory, new RoundedRectangle()
            {
                RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128 * 2, height - 128 * 2)
            });

            var wicBitmap = new Bitmap(wicFactory, width, height, SharpDX.WIC.PixelFormat.Format32bppBGR, BitmapCreateCacheOption.CacheOnLoad);

            var renderTargetProperties = new RenderTargetProperties(RenderTargetType.Default, new PixelFormat(Format.Unknown, AlphaMode.Unknown), 0, 0, RenderTargetUsage.None, FeatureLevel.Level_DEFAULT);

            var d2dRenderTarget = new WicRenderTarget(d2dFactory, wicBitmap, renderTargetProperties);

            var solidColorBrush = new SolidColorBrush(d2dRenderTarget, Color.White);

            d2dRenderTarget.BeginDraw();
            d2dRenderTarget.Clear(Color.Black);
            d2dRenderTarget.FillGeometry(rectangleGeometry, solidColorBrush, null);
            d2dRenderTarget.EndDraw();

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            var stream = new WICStream(wicFactory, filename, NativeFileAccess.Write);
            // Initialize a Jpeg encoder with this stream
            var encoder = new JpegBitmapEncoder(wicFactory);

            encoder.Initialize(stream);

            // Create a Frame encoder
            var bitmapFrameEncode = new BitmapFrameEncode(encoder);

            bitmapFrameEncode.Initialize();
            bitmapFrameEncode.SetSize(width, height);
            var pixelFormatGuid = SharpDX.WIC.PixelFormat.FormatDontCare;

            bitmapFrameEncode.SetPixelFormat(ref pixelFormatGuid);
            bitmapFrameEncode.WriteSource(wicBitmap);

            bitmapFrameEncode.Commit();
            encoder.Commit();

            bitmapFrameEncode.Dispose();
            encoder.Dispose();
            stream.Dispose();

            System.Diagnostics.Process.Start(Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, filename)));
        }
Exemple #5
0
        public void MoveMoveHandler(object sender, MouseEventArgs e)
        {
            Point2F         location   = Tools.PointToPoint2F(e.Location);
            PolarCoordinate coordinate = displayer.coordinateSystem.PointToCoordinate(location);

            azString  = "方位:" + coordinate.Az.ToString("0.0") + "°";
            disString = "距离:" + coordinate.ProjectedDis.ToString("0.0") + "m";
            RectF rect = new RectF(location.X + 10, location.Y + 30, location.X + 60, location.Y + 80);

            coordinateBoard?.Dispose();
            coordinateBoard = displayer.Factory.CreateRoundedRectangleGeometry(new RoundedRect(rect, 5, 5));
        }
Exemple #6
0
        public Rectangle(float x, float y, float w, float h, float xRadius = 0, float yRadius = 0)
            : base()
        {
            RectangleF rect = new RectangleF(x, y, w, h);

            rectGeometry = new RectangleGeometry(factory, rect);
            if (xRadius > 0 || yRadius > 0)
            {
                roundRectGeometry = new RoundedRectangleGeometry(factory, new RoundedRectangle()
                {
                    Rect = rect, RadiusX = xRadius, RadiusY = yRadius
                });
            }
        }
        protected virtual void Render(RenderTarget rt)
        {
            RenderTarget2D.Clear(SceneColorBrush.Color);
            var   width  = ClientSize.Width;
            var   height = ClientSize.Height;
            float indent = ImagePadding;
            float rcRad  = indent * 1.5f;

            using (var rcG = new RoundedRectangleGeometry(Factory2D, new RoundedRectangle()
            {
                RadiusX = rcRad, RadiusY = rcRad, Rect = new RectangleF(indent, indent, width - indent * 2, height - indent * 2)
            }))
                using (var sBr = new SolidColorBrush(RenderTarget2D, Color.Black))
                    RenderTarget2D.FillGeometry(rcG, sBr, null);
        }
        public void RoundedRectangle(Rectangle rectangle, double cornerRadius)
        {
            endOpenFigure();

            using (var geometry = new RoundedRectangleGeometry(_factory,
                                                               new RoundedRect
            {
                RadiusX = cornerRadius.import(),
                RadiusY = cornerRadius.import(),
                Rect = Import.Rectangle(rectangle)
            }))
            {
                geometry.Simplify(SimplificationOption, _sink);
            }
        }
        protected override RoundedRectangleGeometry BuildIdTag()
        {
            RectF rect = new RectF();

            rect.Left   = projectivePosition.X + 5;
            rect.Bottom = projectivePosition.Y - 10;
            rect.Right  = rect.Left + idTagWidth;
            rect.Top    = rect.Bottom - idTagHeigth;

            idTextRect       = rect;
            idTextRect.Left += 12;
            RoundedRectangleGeometry idTag = View.Factory.CreateRoundedRectangleGeometry(new RoundedRect(rect, 3, 3));

            return(idTag);
        }
        protected override RoundedRectangleGeometry BuildIdTag()
        {
            RectF rect = new RectF
            {
                Left = View.Position.X - 20,
                Top  = View.Position.Y - 35
            };

            rect.Right  = rect.Left + idTagWidth;
            rect.Bottom = rect.Top + idTagHeigth;

            idTextRect       = rect;
            idTextRect.Left += 12;
            RoundedRectangleGeometry idTag = View.Factory.CreateRoundedRectangleGeometry(new RoundedRect(rect, 3, 3));

            return(idTag);
        }
Exemple #11
0
        protected override Geometry CreateHitGeometryByD2D(D2DGraphics g)
        {
            RawRectangleF rect = new RawRectangleF(
                0, 0,
                Width - 1,
                Height - 1);

            RoundedRectangle roundedRect = new RoundedRectangle()
            {
                RadiusX = this.RadiusX,
                RadiusY = this.RadiusY,
                Rect    = rect
            };

            RoundedRectangleGeometry roundedRectGeo = new RoundedRectangleGeometry(D2DGraphics.d2dFactory, roundedRect);

            return(roundedRectGeo);
        }
Exemple #12
0
    public RenderTarget CreateRenderTarget(RenderForm form)
    {
        var desc = new SwapChainDescription()
        {
            BufferCount     = 1,
            ModeDescription =
                new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                    new Rational(60, 1), Format.R8G8B8A8_UNorm),
            IsWindowed        = true,
            OutputHandle      = form.Handle,
            SampleDescription = new SampleDescription(2, 0),
            SwapEffect        = SwapEffect.Discard,
            Usage             = Usage.RenderTargetOutput
        };


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

        var d2dFactory = new SharpDX.Direct2D1.Factory();

        int width  = form.ClientSize.Width;
        int height = form.ClientSize.Height;

        var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory, new RoundedRectangle()
        {
            RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128 * 2, height - 128 * 2)
        });

        factory = swapChain.GetParent <Factory>();
        factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

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

        Surface surface = backBuffer.QueryInterface <Surface>();

        RenderTarget d2dRenderTarget = new RenderTarget(d2dFactory, surface, new RenderTargetProperties(new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

        return(d2dRenderTarget);
    }
        private static void Main()
        {
            var form = new RenderForm("SharpDX - MiniTri Direct2D - Direct3D 10 Sample");

            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

            // Create Device and SwapChain
            Device1   device;
            SwapChain swapChain;

            Device1.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug | DeviceCreationFlags.BgraSupport, desc, FeatureLevel.Level_10_0, out device, out swapChain);

            var d2dFactory = new SharpDX.Direct2D1.Factory();

            int width  = form.ClientSize.Width;
            int height = form.ClientSize.Height;

            var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory, new RoundedRect()
            {
                RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128, height - 128)
            });

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

            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var       renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();


            var d2dRenderTarget = new RenderTarget(d2dFactory, surface,
                                                   new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            var solidColorBrush = new SolidColorBrush(d2dRenderTarget, new Color4(1, 1, 1, 1));

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            // Main loop
            RenderLoop.Run(form, () =>
            {
                d2dRenderTarget.BeginDraw();
                d2dRenderTarget.Clear(new Color4(1.0f, 0.0f, 0.0f, 0.0f));
                solidColorBrush.Color = new Color4((float)Math.Abs(Math.Cos(stopwatch.ElapsedMilliseconds * .001)), 1, 1, 1);
                d2dRenderTarget.FillGeometry(rectangleGeometry, solidColorBrush, null);
                d2dRenderTarget.EndDraw();

                swapChain.Present(0, PresentFlags.None);
            });

            // Release all resources
            renderView.Release();
            backBuffer.Release();
            device.ClearState();
            device.Flush();
            device.Release();
            device.Release();
            swapChain.Release();
            factory.Release();
        }
Exemple #14
0
        protected void Initialize()
        {
            apple = new Apple()
            {
                x = 3, y = 3
            };
            snake = new Snake()
            {
                x = 10, y = 10, dy = 1
            };

            rng = new Random();

            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                        new Rational(Constants.FRAMES_PER_SECOND, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

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

            d2dFactory = new SharpDX.Direct2D1.Factory();

            int width  = form.ClientSize.Width;
            int height = form.ClientSize.Height;

            // Ignore all windows events
            factory = swapChain.GetParent <Factory>();
            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();

            d2dRenderTarget = new RenderTarget(d2dFactory, surface, new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));

            var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory, new RoundedRectangle()
            {
                RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128 * 2, height - 128 * 2)
            });
            var solidColorBrush = new SolidColorBrush(d2dRenderTarget, Color.White);

            var directInput = new DirectInput();

            keyboard = new Keyboard(directInput);
            keyboard.Acquire();

            apple.Initialize(d2dRenderTarget, Color.Red);
            snake.Initialize(d2dRenderTarget, Color.Green);
        }
Exemple #15
0
        public static void Run(WorldBase world, int wndWidth = 1280, int wndHeight = 720, string windowTitle = "Ants", int targetFamerate = 60)
        {
            var form = new RenderForm(windowTitle)
            {
                ClientSize = new System.Drawing.Size(wndWidth, wndHeight)
            };
            // SwapChain description
            var desc = new SwapChainDescription()
            {
                BufferCount     = 1,
                ModeDescription =
                    new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                        new Rational(60, 1), Format.R8G8B8A8_UNorm),
                IsWindowed        = true,
                OutputHandle      = form.Handle,
                SampleDescription = new SampleDescription(1, 0),
                SwapEffect        = SwapEffect.Discard,
                Usage             = Usage.RenderTargetOutput
            };

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

            var d2dFactory = new SharpDX.Direct2D1.Factory();

            int width  = form.ClientSize.Width;
            int height = form.ClientSize.Height;

            var rectangleGeometry = new RoundedRectangleGeometry(d2dFactory,
                                                                 new RoundedRectangle()
            {
                RadiusX = 32, RadiusY = 32, Rect = new RectangleF(128, 128, width - 128 * 2, height - 128 * 2)
            });

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

            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);

            // New RenderTargetView from the backbuffer
            Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0);
            var       renderView = new RenderTargetView(device, backBuffer);

            Surface surface = backBuffer.QueryInterface <Surface>();


            var d2dRenderTarget = new RenderTarget(d2dFactory, surface,
                                                   new RenderTargetProperties(new PixelFormat(Format.Unknown, AlphaMode.Premultiplied)));


            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            // Main loop
            RenderLoop.Run(form, () =>
            {
                d2dRenderTarget.BeginDraw();
                d2dRenderTarget.Clear(Color.Aqua);
                world.RenderLoop(stopwatch, d2dRenderTarget);
                d2dRenderTarget.EndDraw();
                swapChain.Present(0, PresentFlags.None);
            });

            // Release all resources
            renderView.Dispose();
            backBuffer.Dispose();
            device.ImmediateContext.ClearState();
            device.ImmediateContext.Flush();
            device.Dispose();
            device.Dispose();
            swapChain.Dispose();
            factory.Dispose();
        }
        public void FillRoundedRectangle([NotNull] Brush brush, RoundedRectangle roundedRectangle)
        {
            var roundedRectGeo = new RoundedRectangleGeometry(roundedRectangle);

            FillGeometry(brush, roundedRectGeo);
        }
Exemple #17
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // TODO: use this.Content to load your game content here
            _drawingContext = new DrawingContext(GraphicsDevice, GraphicsBackend.OpenGL);

            _brush1 = new SolidColorBrush(_drawingContext, Color.Black);
            _brush2 = new SolidColorBrush(_drawingContext, Color.Red);
            _brush3 = new SolidColorBrush(_drawingContext, Color.Yellow);
            _brush4 = new SolidColorBrush(_drawingContext, Color.Purple);
            _brush5 = new SolidColorBrush(_drawingContext, Color.Blue);

            _brush6 = new LinearGradientBrush(_drawingContext,
                                              new LinearGradientBrushProperties {
                StartPoint = new Vector2(305, 305),
                EndPoint   = new Vector2(405, 405)
            }, new GradientStopCollection(new[] {
                new GradientStop {
                    Color = Color.Red, Position = 0.0f
                },
                new GradientStop {
                    Color = Color.Yellow, Position = 0.4f
                },
                new GradientStop {
                    Color = Color.Blue, Position = 0.8f
                },
                new GradientStop {
                    Color = Color.Cyan, Position = 1.0f
                }
            }, Gamma.Linear, ExtendMode.Mirror));

            var pathGeometry = new PathGeometry();

            _pathGeometry1 = pathGeometry;

            var sink = pathGeometry.Open();

            sink.BeginFigure(Vector2.Zero);
            sink.AddLine(new Vector2(100, 100));
            sink.AddLine(new Vector2(0, 100));
            sink.EndFigure(FigureEnd.Closed);
            sink.Close();

            pathGeometry   = new PathGeometry();
            _pathGeometry2 = pathGeometry;

            sink = pathGeometry.Open();
            sink.BeginFigure(Vector2.Zero);
            sink.AddBezier(new BezierSegment {
                Point1 = new Vector2(100, 0),
                Point2 = new Vector2(0, 100),
                Point3 = new Vector2(100, 100)
            });
            sink.AddLine(new Vector2(100, 0));
            sink.EndFigure(FigureEnd.Closed);
            sink.Close();

            pathGeometry   = new PathGeometry();
            _pathGeometry3 = pathGeometry;

            sink = pathGeometry.Open();
            sink.BeginFigure(new Vector2(200, 200));
            sink.AddArc(new ArcSegment {
                Size           = new Vector2(50, 50),
                ArcSize        = ArcSize.Large,
                Point          = new Vector2(300, 300),
                RotationAngle  = 0,
                SweepDirection = SweepDirection.Clockwise
            });
            sink.AddArc(new ArcSegment {
                Size           = new Vector2(100, 100),
                ArcSize        = ArcSize.Large,
                Point          = new Vector2(100, 200),
                RotationAngle  = 0,
                SweepDirection = SweepDirection.Clockwise
            });
            sink.EndFigure(FigureEnd.Closed);
            sink.Close();

            _ellipseGeometry4 = new EllipseGeometry(new Ellipse {
                Point   = new Vector2(400, 50),
                RadiusX = 50,
                RadiusY = 10
            });

            _roundedRectangleGeometry5 = new RoundedRectangleGeometry(new RoundedRectangle {
                RadiusX   = 30,
                RadiusY   = 20,
                Rectangle = new RectangleF(0, 300, 100, 100)
            });

            _ellipseGeometry6 = new EllipseGeometry(new Ellipse {
                Point   = new Vector2(350, 300),
                RadiusX = 160,
                RadiusY = 120
            });

            _fontPathGeometry7 = PathGeometry.CreateFromString(_font, "Press space to start");
        }
        public void DrawRoundedRectangle([NotNull] Pen pen, RoundedRectangle roundedRectangle)
        {
            var roundedRectGeo = new RoundedRectangleGeometry(roundedRectangle);

            DrawGeometry(pen, roundedRectGeo);
        }