/// <summary>
 ///     Creates a container for the given render target.
 /// </summary>
 /// <param name="renderTarget">The render target.</param>
 /// <param name="setter">The setter.</param>
 /// <returns></returns>
 /// <exception cref="System.ArgumentNullException"></exception>
 public static RenderTargetContainer CreateContainer(
     [NotNull] RenderTarget renderTarget,
     out Reference<RenderTarget> setter)
 {
     if (renderTarget == null) throw new ArgumentNullException(nameof(renderTarget));
     RenderTargetContainer container = new RenderTargetContainer(renderTarget);
     setter = new Reference<RenderTarget>(() => container.RenderTarget, rt => container.RenderTarget = rt);
     return container;
 }
Beispiel #2
0
        /// <summary>
        ///     Creates a container for the given render target.
        /// </summary>
        /// <param name="renderTarget">The render target.</param>
        /// <param name="setter">The setter.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentNullException"></exception>
        public static RenderTargetContainer CreateContainer(
            [NotNull] RenderTarget renderTarget,
            out Reference <RenderTarget> setter)
        {
            if (renderTarget == null)
            {
                throw new ArgumentNullException(nameof(renderTarget));
            }
            RenderTargetContainer container = new RenderTargetContainer(renderTarget);

            setter = new Reference <RenderTarget>(() => container.RenderTarget, rt => container.RenderTarget = rt);
            return(container);
        }
Beispiel #3
0
        public static void Main()
        {
#if DEBUG
            SharpDX.Configuration.EnableObjectTracking = true;
#endif
            DependencyManger.ForResourceManagerUse(
                sm =>
            {
                RenderTargetContainer renderTargetContainer = DependencyManger.Get <RenderTargetContainer>();
                Debug.Assert(renderTargetContainer != null, "renderTargetContainer != null");
                DirectXResourceManager manager             = new DirectXResourceManager(renderTargetContainer.RenderTarget, sm);
                renderTargetContainer.RenderTargetChanged += rt => manager.RenderTarget = rt;
                return(manager);
            },
                DependencyCacheFlags.CachePerArgs | DependencyCacheFlags.DisposeOnRelease);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new Main());
        }
Beispiel #4
0
        /// <summary>
        ///     Initializes the graphics.
        /// </summary>
        private void InitializeGraphics()
        {
            DependencyManger.ForTypeUse(() => _renderControl.RenderTargetContainer, DependencyCacheFlags.CacheGlobal);

            _miskResourceManager = DependencyManger.GetResourceManager();
            _miskResourceManager.Add(_whiteStyle);
            _miskResourceManager.Add(_grayStyle);
            _miskResourceManager.Add(_blackStyle);

            RenderTargetContainer renderTargetContainer = _renderControl.RenderTargetContainer;
            DirectXGraphics       graphics = new DirectXGraphics(
                renderTargetContainer.RenderTarget,
                _miskResourceManager,
                _whiteStyle,
                _blackStyle,
                1f);

            renderTargetContainer.RenderTargetChanged += rt => graphics.RenderTarget = rt;

            _directXGraphics = graphics;
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="RenderControl" /> class.
        /// </summary>
        public RenderControl()
        {
            SwapChainDescription swapCHainDesc = new SwapChainDescription
            {
                BufferCount = 2,
                Usage = Usage.RenderTargetOutput,
                OutputHandle = Handle,
                IsWindowed = true,
                ModeDescription =
                    new ModeDescription(
                        Width,
                        Height,
                        new Rational(60, 1),
                        Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags = SwapChainFlags.AllowModeSwitch,
                SwapEffect = SwapEffect.Discard
            };

            Device.CreateWithSwapChain(
                DriverType.Hardware,
                DeviceCreationFlags.BgraSupport,
                swapCHainDesc,
                out _device,
                out _swapChain);

            Debug.Assert(_swapChain != null, "_swapChain != null");

            // ReSharper disable once AssignNullToNotNullAttribute
            _backBuffer = Surface.FromSwapChain(_swapChain, 0);
            Debug.Assert(_backBuffer != null, "_backBuffer != null");

            Size2F dpi = DirectXResourceManager.FactoryD2D.DesktopDpi;

            RenderTarget renderTarget = new RenderTarget(
                DirectXResourceManager.FactoryD2D,
                _backBuffer,
                new RenderTargetProperties
                {
                    DpiX = dpi.Width,
                    DpiY = dpi.Height,
                    MinLevel = SharpDX.Direct2D1.FeatureLevel.Level_DEFAULT,
                    PixelFormat = new PixelFormat(Format.Unknown, AlphaMode.Ignore),
                    Type = RenderTargetType.Default,
                    Usage = RenderTargetUsage.None
                });
            _renderTargetContainer = RenderTargetContainer.CreateContainer(renderTarget, out _renderTargetRef);

            using (FactoryDXGI factory = _swapChain.GetParent<FactoryDXGI>())
            {
                Debug.Assert(factory != null, "factory != null");
                factory.MakeWindowAssociation(Handle, WindowAssociationFlags.IgnoreAltEnter);
            }

            _renderThread = new Thread(RenderLoop)
            {
                Name = "Render Thread",
                IsBackground = true
            };
        }
Beispiel #6
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="RenderControl" /> class.
        /// </summary>
        public RenderControl()
        {
            SwapChainDescription swapCHainDesc = new SwapChainDescription
            {
                BufferCount     = 2,
                Usage           = Usage.RenderTargetOutput,
                OutputHandle    = Handle,
                IsWindowed      = true,
                ModeDescription =
                    new ModeDescription(
                        Width,
                        Height,
                        new Rational(60, 1),
                        Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags             = SwapChainFlags.AllowModeSwitch,
                SwapEffect        = SwapEffect.Discard
            };

            Device.CreateWithSwapChain(
                DriverType.Hardware,
                DeviceCreationFlags.BgraSupport,
                swapCHainDesc,
                out _device,
                out _swapChain);

            Debug.Assert(_swapChain != null, "_swapChain != null");

            // ReSharper disable once AssignNullToNotNullAttribute
            _backBuffer = Surface.FromSwapChain(_swapChain, 0);
            Debug.Assert(_backBuffer != null, "_backBuffer != null");

            Size2F dpi = DirectXResourceManager.FactoryD2D.DesktopDpi;

            RenderTarget renderTarget = new RenderTarget(
                DirectXResourceManager.FactoryD2D,
                _backBuffer,
                new RenderTargetProperties
            {
                DpiX        = dpi.Width,
                DpiY        = dpi.Height,
                MinLevel    = SharpDX.Direct2D1.FeatureLevel.Level_DEFAULT,
                PixelFormat = new PixelFormat(Format.Unknown, AlphaMode.Ignore),
                Type        = RenderTargetType.Default,
                Usage       = RenderTargetUsage.None
            });

            _renderTargetContainer = RenderTargetContainer.CreateContainer(renderTarget, out _renderTargetRef);

            using (FactoryDXGI factory = _swapChain.GetParent <FactoryDXGI>())
            {
                Debug.Assert(factory != null, "factory != null");
                factory.MakeWindowAssociation(Handle, WindowAssociationFlags.IgnoreAltEnter);
            }

            _renderThread = new Thread(RenderLoop)
            {
                Name         = "Render Thread",
                IsBackground = true
            };
        }