コード例 #1
0
        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;
            //}
        }
コード例 #2
0
        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;
            }
        }