public void Shutdown() { logger.Debug("D3DImageRendererEx::Shutdown()"); initialized = false; needRedraw = false; if (d3dProvider != null) { d3dProvider.NewDataAvailable -= D3dProvider_NewDataAvailable; d3dProvider = null; } System.Windows.Media.CompositionTarget.Rendering -= CompositionTarget_Rendering; VideoSource = null; //if (VideoSource != null) //{ // VideoSource.IsFrontBufferAvailableChanged -= VideoSource_IsFrontBufferAvailableChanged; // VideoSource = null; //} }
public void Run(ID3DImageProvider provider) { logger.Debug("D3DImageRendererEx::Run(...)"); if (initialized) { logger.Warn("D3DImageRendererEx::Run(...) invalid state"); return; } try { d3dProvider = provider; d3dProvider.NewDataAvailable += D3dProvider_NewDataAvailable; VideoSource = new D3DImage(); var pSurface = d3dProvider.GetSurfacePointer(); if (pSurface != IntPtr.Zero) { VideoSource.Lock(); VideoSource.SetBackBuffer(D3DResourceType.IDirect3DSurface9, pSurface); VideoSource.Unlock(); } // VideoSource.IsFrontBufferAvailableChanged += VideoSource_IsFrontBufferAvailableChanged; System.Windows.Media.CompositionTarget.Rendering += CompositionTarget_Rendering; initialized = true; } catch (Exception ex) { logger.Error(ex); Shutdown(); // throw; } }