/// <summary> Initializes Direct3D-OCCT rendering. </summary>
        public void StopRenderingScene()
        {
            // This method is called when WPF loses its Direct3D device,
            // so we should just release our custom Direct3D scene
            CompositionTarget.Rendering -= OnRendering;

            if (myD3DRender != IntPtr.Zero)
            {
                Direct3DProxy.ReleaseRender(ref myD3DRender);
            }

            myColorSurf = IntPtr.Zero;
        }
        /// <summary> Initializes Direct3D-OCCT rendering. </summary>
        private void BeginRenderingScene()
        {
            if (myIsFailed)
            {
                return;
            }

            if (myD3DImage.IsFrontBufferAvailable)
            {
                IntPtr aWinHandle;
                IntPtr aD3DDevice;

                // Initialize Direct3D device and render target
                myD3DRender = Direct3DProxy.InitRender(out aWinHandle, out aD3DDevice);

                Viewer = new OCCViewer();

                if (!Viewer.InitInterop(aWinHandle, aD3DDevice))
                {
                    MessageBox.Show("Failed to initialize OpenGL-Direct3D interoperability!",
                                    "Error", MessageBoxButton.OK, MessageBoxImage.Error);

                    myIsFailed = true;

                    if (myD3DRender != IntPtr.Zero)
                    {
                        Direct3DProxy.ReleaseRender(ref myD3DRender);
                    }

                    return;
                }

                // Leverage the Rendering event of WPF composition
                // target to update the our custom Direct3D scene
                CompositionTarget.Rendering += OnRendering;
            }
        }