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