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()); } }
protected virtual void BufferSizeChanged(object sender, SizeChangedEventArgs e) { if (dxInitialized) { Texture2DDescription tdesc = new Texture2DDescription { ArraySize = 1, Width = (uint)e.NewSize.Width, Height = (uint)e.NewSize.Height, Format = WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, MipLevels = 1, SampleDescription = new WindowsAPICodePack.DirectX.Graphics.SampleDescription() { Count = 1, Quality = 0 }, Usage = Usage.Default, BindingOptions = BindingOptions.RenderTarget | BindingOptions.ShaderResource, MiscellaneousResourceOptions = MiscellaneousResourceOptions.Shared, CpuAccessOptions = CpuAccessOptions.None }; using (Texture2D texture2D = device.CreateTexture2D(tdesc)) { renderTargetView = device.CreateRenderTargetView(texture2D); deviceContext.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); /* Set the backbuffer, which is a ID3D11Texture2D pointer */ d3dImage.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, texture2D.NativeInterface); } // viewport SwapChainDescription desc = swapChain.Description; Viewport viewport = new Viewport(); viewport.Width = (float)e.NewSize.Width; viewport.Height = (float)e.NewSize.Height; viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; viewport.TopLeftX = 0; viewport.TopLeftY = 0; deviceContext.RS.Viewports = new Viewport[] { viewport }; aspectRatio = e.NewSize.Width / e.NewSize.Height; Update(); } }
protected virtual void BufferSizeChanged(object sender, SizeChangedEventArgs e) { if (dxInitialized) { Texture2DDescription tdesc = new Texture2DDescription { ArraySize = 1, Width = (uint)e.NewSize.Width, Height = (uint)e.NewSize.Height, Format = Format.B8G8R8A8_UNORM, MipLevels = 1, SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, Usage = Usage.Default, BindFlags = BindFlag.RenderTarget | BindFlag.ShaderResource, MiscFlags = ResourceMiscFlag.Shared, CpuAccessFlags = 0 }; using (Texture2D texture2D = device.CreateTexture2D(tdesc)) { renderTargetView = device.CreateRenderTargetView(texture2D); deviceContext.OM.SetRenderTargets(new RenderTargetView[] { renderTargetView }); /* Set the backbuffer, which is a ID3D11Texture2D pointer */ d3dImage.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, texture2D.NativeInterface); } // viewport SwapChainDescription desc = swapChain.Description; Viewport viewport = new Viewport(); viewport.Width = (float)e.NewSize.Width; viewport.Height = (float)e.NewSize.Height; viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; viewport.TopLeftX = 0; viewport.TopLeftY = 0; deviceContext.RS.SetViewports(new Viewport[] { viewport }); aspectRatio = e.NewSize.Width / e.NewSize.Height; Update(); } }
void Window1_Loaded(object sender, RoutedEventArgs e) { // The unloaded method is not working, so we attach to the parent window closing event the code to Destroy the resources Window.GetWindow(this).Closing += (s1, e1) => RenderControl_Closed(s1, e1); // We can use any resolution, because the OnResize event will be fired and the right dimensions will be set int anyWidth = 640; int anyHeight = 480; // For WPF we need to create a DX9RenderTarget. backBufferRenderTarget = editorEngine.CreateDX9SharedRenderTarget(renderName + ".DX9BackBuffer", anyWidth, anyHeight); // We need a View for Each RenderTarget. A View is the sum of a ViewPort, a RenderTarget and a DepthStencil // We do not need a DepthStencil for the Backbuffer has it's only used to copy the contents of the Render to a DX9 shader resource backBufferView = editorEngine.RenderViews.Create(backBufferRenderTarget); // We do not need to use the Depth because when all the render is ready, the renderview is copied to the backbufferview backBufferView.State.DepthEnabled = false; // When a resize of this control happens, i need to recreate this view onResizeMethods.Add((w, h) => backBufferView.Resize(w, h)); // The RenderTarget used for rendering renderRenderTarget = editorEngine.RenderTargets.Create(renderName, anyWidth, anyHeight); renderView = editorEngine.RenderViews.Create(renderRenderTarget); renderView.DepthStencil = editorEngine.DepthStencils.Create(new StringBuilder("MainDepthStencil"), renderView.RenderTarget.Width, renderView.RenderTarget.Height); // When a resize of this control happens, i need to recreate this view onResizeMethods.Add((w, h) => renderView.Resize(w, h)); /* Create a new D3DImageEx class */ m_d3DImageEx = new D3DImageEx(); /* Set our image's source to our D3DImage9Ex */ d3dScene.Source = m_d3DImageEx; /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D10Texture2D, backBufferRenderTarget.Texture.InternalTexture2D.GetTexturePtr()); OnInitializeRender(); // Create the timer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); dispatcherTimer.Interval = TimeSpan.FromMilliseconds(33); dispatcherTimer.Start(); // Add the OnDraw event for this control CompositionTarget.Rendering += CompositionTarget_Rendering; }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { /* Create a new D3DImageEx class */ m_d3DImageEx = new D3DImageEx(); /* Set our image's source to our D3DImage9Ex */ d3dScene.Source = m_d3DImageEx; /* Create a new D3DTest scene */ m_d3D11Scene = new ManagedGlyphlet(); m_d3D11Scene.Initialize(); /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(m_d3D11Scene.GetRenderTarget()); CompositionTarget.Rendering += CompositionTarget_Rendering; }
private void d3dScene_SizeChanged(object sender, SizeChangedEventArgs e) { if (DesignerProperties.GetIsInDesignMode(this)) { return; } if (m_d3DImageEx == null) { return; } // Informs the methods that a resize has ocurred!! foreach (Action <int, int> action in onResizeMethods) { action((int)e.NewSize.Width, (int)e.NewSize.Height); } /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D10Texture2D, backBufferRenderTarget.Texture.InternalTexture2D.GetTexturePtr()); }
private void Window_Loaded(object sender, RoutedEventArgs e) { if (_enableOverlay) { _d3DImageEx = new D3DImageEx(); d3dScene.Source = _d3DImageEx; _D3D11Scene = new D3D11TestScene(); /* Set the backbuffer, which is a ID3D11Texture2D pointer */ var renderTarget = _D3D11Scene.GetRenderTarget(); _d3DImageEx.SetBackBufferEx(D3DResourceTypeEx.ID3D11Texture2D, renderTarget); CompositionTarget.Rendering += CompositionTarget_Rendering; Playback playback = new Playback(renderTarget, _enableOverlay); playback.OnDrawSignalReceived += VideoSink_OnBeginDraw; } else { var windowHandle = new WindowInteropHelper(System.Windows.Application.Current.MainWindow).Handle; Playback playback = new Playback(windowHandle, _enableOverlay); } }
void MainWindow_Loaded(object sender, RoutedEventArgs e) { /* Create a new D3DImageEx class */ m_d3DImageEx = new D3DImageEx(); /* Set our image's source to our D3DImage9Ex */ d3dScene.Source = m_d3DImageEx; /* Create a new D3DTest scene */ m_d3D11Scene = new ManagedGlyphlet(); m_d3D11Scene.Initialize(); /* Set the backbuffer, which is a ID3D10Texture2D pointer */ m_d3DImageEx.SetBackBufferEx(m_d3D11Scene.GetRenderTarget()); CompositionTarget.Rendering += CompositionTarget_Rendering; }