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()); } }
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()); } }
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); } }
/// <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(); }