static void render(SwapChainPanel swapChainPanel) { ICommandListFactory commandListFactory = GetCommandListFactory(swapChainPanel); if (commandListFactory == null) { return; } RenderData _renderData = RenderData.Find(swapChainPanel, false); if (_renderData == null) { return; } Debug.WriteLine($"{nameof(SwapChainPanelPainter)}.{nameof(render)} _renderData={_renderData}"); GraphicsDevice _graphicsDevice = _renderData.graphicsDevice; if (_graphicsDevice == null) { return; } Veldrid.Swapchain _swapchain = _renderData.swapchain; if (_swapchain == null) { return; } Framebuffer _framebuffer = _renderData.framebuffer; if (_framebuffer == null) { return; } { Veldrid.CommandList _commandList = null; try { _commandList = commandListFactory.BuildCommandList(_graphicsDevice, _framebuffer); if (_commandList == null) { return; } _graphicsDevice.SubmitCommands(_commandList); _graphicsDevice.SwapBuffers(_swapchain); } catch (Exception E) { } finally { _commandList?.Dispose(); } } }
private static void SwapChainPanel_Loaded(object sender, RoutedEventArgs e) { SwapChainPanel swapChainPanel = sender as SwapChainPanel; if (swapChainPanel == null) { return; } RenderData _renderData = RenderData.Find(swapChainPanel, false); Debug.WriteLine($"{nameof(SwapChainPanelPainter)}.{nameof(SwapChainPanel_Loaded)} _renderData={_renderData}"); if (_renderData == null) { return; } _renderData.Loaded = true; render(swapChainPanel); }
private static void SwapChainPanel_SizeChanged(object sender, SizeChangedEventArgs e) { SwapChainPanel swapChainPanel = sender as SwapChainPanel; if (swapChainPanel == null) { return; } Debug.WriteLine($"{nameof(SwapChainPanelPainter)}.{nameof(SwapChainPanel_SizeChanged)} swapChainPanel={swapChainPanel}"); RenderData _renderData = RenderData.Find(swapChainPanel, false); if (_renderData == null) { return; } // _renderData.Reset_swapchain(); render(swapChainPanel); }
static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { Debug.WriteLine($"{nameof(SwapChainPanelPainter)}.{nameof(PropertyChangedCallback)} d={d} e.OldValue={e.OldValue} e.NewValue={e.NewValue}"); SwapChainPanel swapChainPanel = d as SwapChainPanel; if (swapChainPanel == null) { return; } ICommandListFactory commandListFactory = e.NewValue as ICommandListFactory; if (commandListFactory == null) { // 'déconnexion de swapChainPanel' bool _ok = RenderData.Dispose(swapChainPanel); if (_ok) { // events swapChainPanel.Loaded -= SwapChainPanel_Loaded; swapChainPanel.Unloaded -= SwapChainPanel_Unloaded; swapChainPanel.SizeChanged -= SwapChainPanel_SizeChanged; swapChainPanel.CompositionScaleChanged -= SwapChainPanel_CompositionScaleChanged; } } else { RenderData _renderData = RenderData.Find(swapChainPanel, false); if (_renderData == null) { _renderData = RenderData.Find(swapChainPanel, true); if (_renderData == null) { return; } bool _ok = false; try { GraphicsDevice _graphicsDevice = _renderData.graphicsDevice; if (_graphicsDevice == null) { return; } // events swapChainPanel.Loaded += SwapChainPanel_Loaded; swapChainPanel.Unloaded += SwapChainPanel_Unloaded; swapChainPanel.SizeChanged += SwapChainPanel_SizeChanged; swapChainPanel.CompositionScaleChanged += SwapChainPanel_CompositionScaleChanged; _ok = true; } finally { if (_ok == false) { RenderData.Dispose(swapChainPanel); } } } } }
static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { D3D11Image d3D11Image = d as D3D11Image; if (d3D11Image == null) { return; } d3D11Image.OnRender = null; ICommandListFactory commandListFactory = e.NewValue as ICommandListFactory; if (commandListFactory == null) { return; } RenderData _renderData = RenderData.Find(d3D11Image, true); if (_renderData == null) { return; } GraphicsDevice _graphicsDevice = _renderData.graphicsDevice; if (_graphicsDevice == null) { return; } SharpDX.Direct3D11.Device _device = _renderData.device; if (_device == null) { return; } d3D11Image.OnRender = (IntPtr surface, bool isNewSurface) => { #region --- OnRender Framebuffer _framebuffer = _renderData.FrameBuffer(surface, isNewSurface); if (_framebuffer == null) { return; } Veldrid.CommandList commandList = null; try { commandList = commandListFactory.BuildCommandList(_graphicsDevice, _framebuffer); if (commandList == null) { return; } _graphicsDevice.SubmitCommands(commandList); } finally { commandList?.Dispose(); } _device.ImmediateContext.Flush(); #endregion }; }