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());
            }
        }
Esempio n. 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());
            }
        }
Esempio n. 3
0
        private void VideoSink_OnBeginDraw(Element sink, GLib.SignalArgs args)
        {
            Dispatcher.Invoke(() => _d3DImageEx.Lock());
            var renderTarget = _D3D11Scene.GetRenderTarget();

            _ = sink.Emit("draw", renderTarget, (UInt32)2, (UInt64)0, (UInt64)0);

            Dispatcher.Invoke(() =>
            {
                InvalidateD3DImage();
                _d3DImageEx.Unlock();
            });
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            if (_enableOverlay)
            {
                _d3DImageEx = new D3DImageEx();
                _D3D11Scene = new D3D11TestScene(1920, 1080);

                d3dScene.Source = _d3DImageEx;

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

                _d3DImageEx.Lock();
                _d3DImageEx.SetBackBuffer(D3DResourceType.IDirect3DSurface9, backBuffer, _enableSoftwareFallback);
                _d3DImageEx.Unlock();

                _playback = new Playback(IntPtr.Zero, _enableOverlay);
                _playback.OnDrawSignalReceived += VideoSink_OnBeginDraw;

                CompositionTarget.Rendering += CompositionTarget_Rendering;
            }
            else
            {
                var windowHandle = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle;
                _playback = new Playback(windowHandle, _enableOverlay);
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Invalidates entire D3DImage area
 /// </summary>
 private void InvalidateD3DImage()
 {
     m_d3DImageEx.Lock();
     m_d3DImageEx.AddDirtyRect(new Int32Rect()
     {
         X      = 0,
         Y      = 0,
         Height = m_d3DImageEx.PixelHeight,
         Width  = m_d3DImageEx.PixelWidth
     });
     m_d3DImageEx.Unlock();
 }
 /// <summary>
 /// Invalidates entire D3DImage area
 /// </summary>
 private void InvalidateD3DImage()
 {
     d3dImage.Lock();
     d3dImage.AddDirtyRect(new Int32Rect()
     {
         X      = 0,
         Y      = 0,
         Height = d3dImage.PixelHeight,
         Width  = d3dImage.PixelWidth
     });
     d3dImage.Unlock();
 }