Пример #1
0
        private async Task DisableRenderer()
        {
            if (_loaded)
            {
                await EnableRenderer();

                return;
            }

            if (_imageEx == null)
            {
                return;
            }

            try {
                DisposeHelper.Dispose(ref _renderer);

                CompositionTargetEx.Rendering -= OnRendering;
                Scene.Source = null;

                _imageEx.Lock();
                _imageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, IntPtr.Zero);
                _imageEx.Unlock();
                _imageEx = null;
            } catch (Exception e) {
                MessageBox.Show(e.ToString());
            }
        }
Пример #2
0
        private async void DisableRenderer()
        {
            if (_imageEx == null || VisibilityAnimation.GetVisible(Scene) == false)
            {
                return;
            }

            try {
                VisibilityAnimation.SetVisible(Scene, false);
                await Task.Delay(500);

                if (Model.Renderer != null)
                {
                    Model.Renderer.Dispose();
                    Model.Renderer = null;
                }

                CompositionTarget.Rendering -= OnRendering;

                Scene.Source = null;

                _imageEx.Lock();
                _imageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, IntPtr.Zero);
                _imageEx.Unlock();
                _imageEx = null;
            } catch (Exception e) {
                MessageBox.Show(e.ToString());
            }
        }
Пример #3
0
        protected virtual void BufferSizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (dxInitialized)
            {
                Texture2DDescription tdesc = new Texture2DDescription
                {
                    ArraySize         = 1,
                    Width             = (uint)e.NewSize.Width,
                    Height            = (uint)e.NewSize.Height,
                    Format            = WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm,
                    MipLevels         = 1,
                    SampleDescription = new WindowsAPICodePack.DirectX.Graphics.SampleDescription()
                    {
                        Count = 1, Quality = 0
                    },
                    Usage          = Usage.Default,
                    BindingOptions = BindingOptions.RenderTarget | BindingOptions.ShaderResource,
                    MiscellaneousResourceOptions = MiscellaneousResourceOptions.Shared,
                    CpuAccessOptions             = CpuAccessOptions.None
                };

                using (Texture2D texture2D = device.CreateTexture2D(tdesc))
                {
                    renderTargetView = device.CreateRenderTargetView(texture2D);
                    deviceContext.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView });

                    /* Set the backbuffer, which is a ID3D11Texture2D pointer */
                    d3dImage.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, texture2D.NativeInterface);
                }

                // viewport
                SwapChainDescription desc     = swapChain.Description;
                Viewport             viewport = new Viewport();
                viewport.Width    = (float)e.NewSize.Width;
                viewport.Height   = (float)e.NewSize.Height;
                viewport.MinDepth = 0.0f;
                viewport.MaxDepth = 1.0f;
                viewport.TopLeftX = 0;
                viewport.TopLeftY = 0;

                deviceContext.RS.Viewports = new Viewport[] { viewport };

                aspectRatio = e.NewSize.Width / e.NewSize.Height;

                Update();
            }
        }
        protected virtual void BufferSizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (dxInitialized)
            {
                Texture2DDescription tdesc = new Texture2DDescription
                {
                    ArraySize         = 1,
                    Width             = (uint)e.NewSize.Width,
                    Height            = (uint)e.NewSize.Height,
                    Format            = Format.B8G8R8A8_UNORM,
                    MipLevels         = 1,
                    SampleDescription = new SampleDescription {
                        Count = 1, Quality = 0
                    },
                    Usage          = Usage.Default,
                    BindFlags      = BindFlag.RenderTarget | BindFlag.ShaderResource,
                    MiscFlags      = ResourceMiscFlag.Shared,
                    CpuAccessFlags = 0
                };

                using (Texture2D texture2D = device.CreateTexture2D(tdesc))
                {
                    renderTargetView = device.CreateRenderTargetView(texture2D);
                    deviceContext.OM.SetRenderTargets(new RenderTargetView[] { renderTargetView });

                    /* Set the backbuffer, which is a ID3D11Texture2D pointer */
                    d3dImage.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, texture2D.NativeInterface);
                }

                // viewport
                SwapChainDescription desc     = swapChain.Description;
                Viewport             viewport = new Viewport();
                viewport.Width    = (float)e.NewSize.Width;
                viewport.Height   = (float)e.NewSize.Height;
                viewport.MinDepth = 0.0f;
                viewport.MaxDepth = 1.0f;
                viewport.TopLeftX = 0;
                viewport.TopLeftY = 0;

                deviceContext.RS.SetViewports(new Viewport[] { viewport });

                aspectRatio = e.NewSize.Width / e.NewSize.Height;

                Update();
            }
        }
Пример #5
0
        void Window1_Loaded(object sender, RoutedEventArgs e)
        {
            // The unloaded method is not working, so we attach to the parent window closing event the code to Destroy the resources
            Window.GetWindow(this).Closing += (s1, e1) => RenderControl_Closed(s1, e1);

            // We can use any resolution, because the OnResize event will be fired and the right dimensions will be set

            int anyWidth = 640;

            int anyHeight = 480;

            // For WPF we need to create a DX9RenderTarget.
            backBufferRenderTarget = editorEngine.CreateDX9SharedRenderTarget(renderName + ".DX9BackBuffer", anyWidth, anyHeight);

            // We need a View for Each RenderTarget. A View is the sum of a ViewPort, a RenderTarget and a DepthStencil
            // We do not need a DepthStencil for the Backbuffer has it's only used to copy the contents of the Render to a DX9 shader resource

            backBufferView = editorEngine.RenderViews.Create(backBufferRenderTarget);

            // We do not need to use the Depth because when all the render is ready, the renderview is copied to the backbufferview
            backBufferView.State.DepthEnabled = false;

            // When a resize of this control happens, i need to recreate this view
            onResizeMethods.Add((w, h) => backBufferView.Resize(w, h));

            // The RenderTarget used for rendering

            renderRenderTarget = editorEngine.RenderTargets.Create(renderName, anyWidth, anyHeight);

            renderView = editorEngine.RenderViews.Create(renderRenderTarget);

            renderView.DepthStencil = editorEngine.DepthStencils.Create(new StringBuilder("MainDepthStencil"), renderView.RenderTarget.Width, renderView.RenderTarget.Height);

            // When a resize of this control happens, i need to recreate this view
            onResizeMethods.Add((w, h) => renderView.Resize(w, h));

            /* Create a new D3DImageEx class */
            m_d3DImageEx = new D3DImageEx();

            /* Set our image's source to our D3DImage9Ex */
            d3dScene.Source = m_d3DImageEx;

            /* Set the backbuffer, which is a ID3D10Texture2D pointer */
            m_d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D10Texture2D, backBufferRenderTarget.Texture.InternalTexture2D.GetTexturePtr());

            OnInitializeRender();

            // Create the timer

            dispatcherTimer          = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick    += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = TimeSpan.FromMilliseconds(33);
            dispatcherTimer.Start();

            // Add the OnDraw event for this control
            CompositionTarget.Rendering += CompositionTarget_Rendering;
        }
Пример #6
0
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            /* Create a new D3DImageEx class */
            m_d3DImageEx = new D3DImageEx();

            /* Set our image's source to our D3DImage9Ex */
            d3dScene.Source = m_d3DImageEx;

            /* Create a new D3DTest scene */
            m_d3D11Scene = new ManagedGlyphlet();
            m_d3D11Scene.Initialize();

            /* Set the backbuffer, which is a ID3D10Texture2D pointer */
            m_d3DImageEx.SetBackBufferEx(m_d3D11Scene.GetRenderTarget());

            CompositionTarget.Rendering += CompositionTarget_Rendering;
        }
Пример #7
0
        private void d3dScene_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            if (DesignerProperties.GetIsInDesignMode(this))
            {
                return;
            }

            if (m_d3DImageEx == null)
            {
                return;
            }

            // Informs the methods that a resize has ocurred!!

            foreach (Action <int, int> action in onResizeMethods)
            {
                action((int)e.NewSize.Width, (int)e.NewSize.Height);
            }

            /* Set the backbuffer, which is a ID3D10Texture2D pointer */
            m_d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D10Texture2D, backBufferRenderTarget.Texture.InternalTexture2D.GetTexturePtr());
        }
Пример #8
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (_enableOverlay)
            {
                _d3DImageEx     = new D3DImageEx();
                d3dScene.Source = _d3DImageEx;
                _D3D11Scene     = new D3D11TestScene();

                /* Set the backbuffer, which is a ID3D11Texture2D pointer */
                var renderTarget = _D3D11Scene.GetRenderTarget();
                _d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, renderTarget);

                CompositionTarget.Rendering += CompositionTarget_Rendering;

                Playback playback = new Playback(renderTarget, _enableOverlay);
                playback.OnDrawSignalReceived += VideoSink_OnBeginDraw;
            }
            else
            {
                var      windowHandle = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle;
                Playback playback     = new Playback(windowHandle, _enableOverlay);
            }
        }
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            /* Create a new D3DImageEx class */
            m_d3DImageEx = new D3DImageEx();

            /* Set our image's source to our D3DImage9Ex */
            d3dScene.Source = m_d3DImageEx;

            /* Create a new D3DTest scene */
            m_d3D11Scene = new ManagedGlyphlet();
            m_d3D11Scene.Initialize();

            /* Set the backbuffer, which is a ID3D10Texture2D pointer */
            m_d3DImageEx.SetBackBufferEx(m_d3D11Scene.GetRenderTarget());

            CompositionTarget.Rendering += CompositionTarget_Rendering;
        }